0xmonaco CTF 体验心得
由开发人员、艺术家和设计师组成的集体 MatchBoxDAO 宣布推出 MatchBox Arena。该团队将其称为“Web3 公司的世界杯”,并表示游戏锦标赛旨在找出哪家公司拥有最好的技术团队。首先,可以代表公司和世界顶级的crypto公司(uniswap,polygon,ledger,chainlink。。。)同台竞技真的是一个非常荣幸的事情。所以我牺牲了宝贵的春节假期,就一直在打这个比赛。 这次CTF是一个用solidity操控汽车的算法比赛(终于遇到我非常感兴趣的地方了)介绍这本质上来说是一次博弈实验,而不是一次简单的代码hackthon。更像是一个社会实验,涉及纯技术方面、经济激励、效用优化模式和理性的压力测试。对于每一个参赛者,你需要实现自己的Car合约,特别是takeyourturn这个函数。对于每一轮你都需要做出决策,具体有五种决策: 1)加速(ACCELERATE) 2)炮弹(SHELL) 3)超级炮弹(SUPER_SHELL) 4)香蕉(BANANA) 5)盾(SHIELD) 有点像跑跑卡丁车?是的。。每一种决策都会耗费掉你的金额,你的金额总量是17500。而...

成长 -- 随笔(2)
深夜陷入了沉思,回顾了一下自己的成长历程。距离上一次的成长随笔已经过去7个月了~~ https://mirror.xyz/0xaaE7a1AD2764626d09a233a9bC06C38b413637cf/By3P_3NiIriKGObdbWlFo0mDdwFDY1v9VFbjaUMmObU 既然是随笔,我觉得格式什么的,就随意了~~ 这段时间我学了啥呢~~ Uniswap V2, V3; 精通Curve ( 3 Pool, Meta Pool, Compond Pool, AAVE Pool) ~~~ Balancer V2, Kyber, Bancor ; AAVE, Clipper, DODO, Mstable, Saddle, Shell, Wombat ~~~ DODO, DODO V2, Fraxswap ~~ 对我来说,能力提升最大的是打CTF。比赛的过程,纠错发现bug的攻防真的很能提升一个人的合约能力~~~ 最开心的是,认识了组内Andrew和Jimmy两位Crypto科学家~~ 最感激的是,Melvin带着我做项目,耐心和孜孜不倦地引导我去激发自己的潜能~~...
成长 -- 随笔
我完全不敢想象自己的成长速度。 1个月前,我还在和慢雾的群上问curve的合约代码的语言是的时候。余弦大佬回了我是vyper。我现在已经可以把vyper语言看懂了, 并且对于原理也掌握了。 把curve代码看了一下一遍,其实也发现不过如此。白皮书,其实也没这么深奥。跟当年打ACM的那种级别比,还是差得有点远。 Hardhat也越来越熟悉了。当时那个编写测试用例还要问XD的那个毛头小子,已经成长了好多。 我觉得我现在完全可以独立撑起一个商业项目,唯一卡住的地方可能是JS还是不太熟悉。基本功能是OK的,但是遇到一些比较少见的bug。估计,要问人。 对于以前的我来说,3,4天吃透一个主流Defi协议,我真的想都不敢想。如果只是调研,我觉得我还是勉强可以一试。 这种成长的速度我只能用指数级别来形容。我看了一下一个月前的自己,觉得好菜。 我很希望我一个月之后,再回头看现在的我,也是觉得现在的我很菜~~ end
0xmonaco CTF 体验心得
由开发人员、艺术家和设计师组成的集体 MatchBoxDAO 宣布推出 MatchBox Arena。该团队将其称为“Web3 公司的世界杯”,并表示游戏锦标赛旨在找出哪家公司拥有最好的技术团队。首先,可以代表公司和世界顶级的crypto公司(uniswap,polygon,ledger,chainlink。。。)同台竞技真的是一个非常荣幸的事情。所以我牺牲了宝贵的春节假期,就一直在打这个比赛。 这次CTF是一个用solidity操控汽车的算法比赛(终于遇到我非常感兴趣的地方了)介绍这本质上来说是一次博弈实验,而不是一次简单的代码hackthon。更像是一个社会实验,涉及纯技术方面、经济激励、效用优化模式和理性的压力测试。对于每一个参赛者,你需要实现自己的Car合约,特别是takeyourturn这个函数。对于每一轮你都需要做出决策,具体有五种决策: 1)加速(ACCELERATE) 2)炮弹(SHELL) 3)超级炮弹(SUPER_SHELL) 4)香蕉(BANANA) 5)盾(SHIELD) 有点像跑跑卡丁车?是的。。每一种决策都会耗费掉你的金额,你的金额总量是17500。而...

成长 -- 随笔(2)
深夜陷入了沉思,回顾了一下自己的成长历程。距离上一次的成长随笔已经过去7个月了~~ https://mirror.xyz/0xaaE7a1AD2764626d09a233a9bC06C38b413637cf/By3P_3NiIriKGObdbWlFo0mDdwFDY1v9VFbjaUMmObU 既然是随笔,我觉得格式什么的,就随意了~~ 这段时间我学了啥呢~~ Uniswap V2, V3; 精通Curve ( 3 Pool, Meta Pool, Compond Pool, AAVE Pool) ~~~ Balancer V2, Kyber, Bancor ; AAVE, Clipper, DODO, Mstable, Saddle, Shell, Wombat ~~~ DODO, DODO V2, Fraxswap ~~ 对我来说,能力提升最大的是打CTF。比赛的过程,纠错发现bug的攻防真的很能提升一个人的合约能力~~~ 最开心的是,认识了组内Andrew和Jimmy两位Crypto科学家~~ 最感激的是,Melvin带着我做项目,耐心和孜孜不倦地引导我去激发自己的潜能~~...
成长 -- 随笔
我完全不敢想象自己的成长速度。 1个月前,我还在和慢雾的群上问curve的合约代码的语言是的时候。余弦大佬回了我是vyper。我现在已经可以把vyper语言看懂了, 并且对于原理也掌握了。 把curve代码看了一下一遍,其实也发现不过如此。白皮书,其实也没这么深奥。跟当年打ACM的那种级别比,还是差得有点远。 Hardhat也越来越熟悉了。当时那个编写测试用例还要问XD的那个毛头小子,已经成长了好多。 我觉得我现在完全可以独立撑起一个商业项目,唯一卡住的地方可能是JS还是不太熟悉。基本功能是OK的,但是遇到一些比较少见的bug。估计,要问人。 对于以前的我来说,3,4天吃透一个主流Defi协议,我真的想都不敢想。如果只是调研,我觉得我还是勉强可以一试。 这种成长的速度我只能用指数级别来形容。我看了一下一个月前的自己,觉得好菜。 我很希望我一个月之后,再回头看现在的我,也是觉得现在的我很菜~~ end

Subscribe to shaneson.eth

Subscribe to shaneson.eth
Share Dialog
Share Dialog
<100 subscribers
<100 subscribers
ERC4626标准允许为代表单一底层ERC-20代币份额的代币金库实现一个标准的API,通过拓展ERC20协议,提供了存入和提取代币以及读取余额的基本功能。(金库标准化)
mStable已经整合了ERC 4626
balancer linear pools在整合ERC 4626
Yearn V3在整合 ERC 4626
Yield Protocal在整合4626
openzeppelin也已经支持了4626了(merged into master)
收益聚合器(例如Yearn、Rari 和Idle)、借贷市场(例如Compound, Aave和 Fuse)和原生收益代币(例如xSUSHI )通常在实施时略有不同。对于需要符合许多标准的协议,这使得在聚合器或插件层的集成变得困难,这迫使每个协议编写Adapter,而这些适配器容易出错并会浪费开发资源。
(1)就是为了使一切变得标准化、简单化,这使得任何有收益的代币都可以与任何 DeFi 应用程序兼容,从而增强多个网络中的收益金库的可组合性和可访问性。
(1)asset: 返回underlyingToken
- name: asset
type: function
stateMutability: view
inputs: []
outputs:
- name: assetTokenAddress
type: address
(2) totalAssets: 返回underlyingToken的总量
- name: totalAssets
type: function
stateMutability: view
inputs: []
outputs:
- name: totalManagedAssets
type: uint256
(3) convertToShares: 在满足所有条件的理想情况下,能换到shareToken的数量
- name: convertToShares
type: function
stateMutability: view
inputs:
- name: assets
type: uint256
outputs:
- name: shares
type: uint256
(4) maxDeposit: 通过存款通知,可以为接收方存入保险库的标的资产的最大数量。
- name: maxDeposit
type: function
stateMutability: view
inputs:
- name: receiver
type: address
outputs:
- name: maxAssets
type: uint256
(5) previewDeposit: 估算 Deposit 的结果
- name: previewDeposit
type: function
stateMutability: view
inputs:
- name: assets
type: uint256
outputs:
- name: shares
type: uint256
(6) maxMint: 从金库发送给接收者铸币的最大数量。
- name: maxMint
type: function
stateMutability: view
inputs:
- name: receiver
type: address
outputs:
- name: maxShares
type: uint256
(7) previewMint: 允许链上或链下用户在给定当前链上条件的情况下模拟其铸币在当前区块的效果
- name: previewMint
type: function
stateMutability: view
inputs:
- name: shares
type: uint256
outputs:
- name: assets
type: uint256
(1) deposit
【作用】Mint 出 shareToken给receiver
要对传入的金额进行检查,判断是不是等于assets。注意,所以所有的砍头币都不适合ERC4626。
- name: Deposit
type: event
inputs:
- name: sender
indexed: true
type: address
- name: owner
indexed: true
type: address
- name: assets
indexed: false
type: uint256
- name: shares
indexed: false
type: uint256
(2)withdraw
燃烧掉 share Token,给receiver发送底层资产
必须支持在所有者是msg.sender的情况下直接从所有者那里烧毁shareToken的提款流程。
必须支持一个提款流程,即当msg.sender拥有对所有者股份的ERC-20批准时,shareToken直接从所有者那里烧掉。
可能支持一个额外的流程,其中shareToken在提款执行前被转移到Vault合约。
- name: Withdraw
type: event
inputs:
- name: sender
indexed: true
type: address
- name: receiver
indexed: true
type: address
- name: owner
indexed: true
type: address
- name: assets
indexed: false
type: uint256
- name: shares
indexed: false
type: uint256

(1)EOA账户
如果实施者打算直接支持EOA账户访问,他们应该考虑为deposit/mint/withdraw/redeem添加一个额外的函数调用,并有办法适应滑点损失或意外的存款/提款限制,因为他们没有其他办法在没有达到确切的输出金额时恢复交易。
(2)预览方法返回值问题
totalAssets、convertToShares和convertToAssets等方法是用于显示的估计值,一般不用于这些方法underlying资产数量。(0.09 ~ 1.01)
预览方法返回的值尽可能地接近精确。由于这个原因,它们可以通过改变链上的条件而被操纵,并且不一定能安全地用作价格信标。本规范包括允许不精确的转换方法,因此可以作为稳健的价格标志来实现。例如,在资产和股票之间的转换中,使用时间加权平均价格来实现转换方法是正确的。
https://eips.ethereum.org/EIPS/eip-4626#abstract
ERC4626标准允许为代表单一底层ERC-20代币份额的代币金库实现一个标准的API,通过拓展ERC20协议,提供了存入和提取代币以及读取余额的基本功能。(金库标准化)
mStable已经整合了ERC 4626
balancer linear pools在整合ERC 4626
Yearn V3在整合 ERC 4626
Yield Protocal在整合4626
openzeppelin也已经支持了4626了(merged into master)
收益聚合器(例如Yearn、Rari 和Idle)、借贷市场(例如Compound, Aave和 Fuse)和原生收益代币(例如xSUSHI )通常在实施时略有不同。对于需要符合许多标准的协议,这使得在聚合器或插件层的集成变得困难,这迫使每个协议编写Adapter,而这些适配器容易出错并会浪费开发资源。
(1)就是为了使一切变得标准化、简单化,这使得任何有收益的代币都可以与任何 DeFi 应用程序兼容,从而增强多个网络中的收益金库的可组合性和可访问性。
(1)asset: 返回underlyingToken
- name: asset
type: function
stateMutability: view
inputs: []
outputs:
- name: assetTokenAddress
type: address
(2) totalAssets: 返回underlyingToken的总量
- name: totalAssets
type: function
stateMutability: view
inputs: []
outputs:
- name: totalManagedAssets
type: uint256
(3) convertToShares: 在满足所有条件的理想情况下,能换到shareToken的数量
- name: convertToShares
type: function
stateMutability: view
inputs:
- name: assets
type: uint256
outputs:
- name: shares
type: uint256
(4) maxDeposit: 通过存款通知,可以为接收方存入保险库的标的资产的最大数量。
- name: maxDeposit
type: function
stateMutability: view
inputs:
- name: receiver
type: address
outputs:
- name: maxAssets
type: uint256
(5) previewDeposit: 估算 Deposit 的结果
- name: previewDeposit
type: function
stateMutability: view
inputs:
- name: assets
type: uint256
outputs:
- name: shares
type: uint256
(6) maxMint: 从金库发送给接收者铸币的最大数量。
- name: maxMint
type: function
stateMutability: view
inputs:
- name: receiver
type: address
outputs:
- name: maxShares
type: uint256
(7) previewMint: 允许链上或链下用户在给定当前链上条件的情况下模拟其铸币在当前区块的效果
- name: previewMint
type: function
stateMutability: view
inputs:
- name: shares
type: uint256
outputs:
- name: assets
type: uint256
(1) deposit
【作用】Mint 出 shareToken给receiver
要对传入的金额进行检查,判断是不是等于assets。注意,所以所有的砍头币都不适合ERC4626。
- name: Deposit
type: event
inputs:
- name: sender
indexed: true
type: address
- name: owner
indexed: true
type: address
- name: assets
indexed: false
type: uint256
- name: shares
indexed: false
type: uint256
(2)withdraw
燃烧掉 share Token,给receiver发送底层资产
必须支持在所有者是msg.sender的情况下直接从所有者那里烧毁shareToken的提款流程。
必须支持一个提款流程,即当msg.sender拥有对所有者股份的ERC-20批准时,shareToken直接从所有者那里烧掉。
可能支持一个额外的流程,其中shareToken在提款执行前被转移到Vault合约。
- name: Withdraw
type: event
inputs:
- name: sender
indexed: true
type: address
- name: receiver
indexed: true
type: address
- name: owner
indexed: true
type: address
- name: assets
indexed: false
type: uint256
- name: shares
indexed: false
type: uint256

(1)EOA账户
如果实施者打算直接支持EOA账户访问,他们应该考虑为deposit/mint/withdraw/redeem添加一个额外的函数调用,并有办法适应滑点损失或意外的存款/提款限制,因为他们没有其他办法在没有达到确切的输出金额时恢复交易。
(2)预览方法返回值问题
totalAssets、convertToShares和convertToAssets等方法是用于显示的估计值,一般不用于这些方法underlying资产数量。(0.09 ~ 1.01)
预览方法返回的值尽可能地接近精确。由于这个原因,它们可以通过改变链上的条件而被操纵,并且不一定能安全地用作价格信标。本规范包括允许不精确的转换方法,因此可以作为稳健的价格标志来实现。例如,在资产和股票之间的转换中,使用时间加权平均价格来实现转换方法是正确的。
https://eips.ethereum.org/EIPS/eip-4626#abstract
No activity yet