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
要时刻保持冷静,严谨。因为敲出来的每字母都要对几千万,甚至几个亿的资产负责。
接上一篇文章我对Abracadabra研究了之后,对它的Oracle Price计算非常有疑惑。一些生息资产居然可以计算Rate和Price。包括:3crv,3crypto等等。然后我就花了相对久等时间去研读源码。整个项目源码中Oracle的代码量占到了50%以上,所以这个项目的重点和难点明显是在Oracle部分。我把代码看完了之后,然后得到下面的图(简要):

因为篇幅问题,上面还有接近20个合约还没有列。毕竟重要的有Spell,sSpell,wMemo(Wonderland实现9,9的关键代码),wOHMLink(OHM实现9,9的核心代码)。这篇主要是用来总结Abracadabra和OHM与Wonderland联系最相近的(9,9)部分。
在Wonderland上如何实现(9,9)呢?如下图:第一步是质押$TIME;第二步是把$MEMO转成$wMEMO;然后去Abracadabra上用$wMEMO借出$MIM; 然后把$MIM换成$TIME,然后STAKE。结束一轮循环。可以看到,(9,9)的概念其实相当于杠杠做(3,3)。这个杠杆率是自己控制的,官方建议不要超过20%。我目测认为,Wonderland的TVL这么高的原因跟Abracadabra离不开关系。而(9,9)能实现最关键的部分在于支持wMemo借贷,而wMemo是一个生息资产。如何对wMemo定价成了这个逻辑的核心问题,而解决了这个问题的合约是wMEMOOracle.sol。接下来讲一下这个合约。

这个合约主要是用来获取wMEMO的价格的。我们先看他需要用到的外部接口有哪些:IAggregator和IWMEMO。IAggregator是用来访问chainlink合约的。(IMEMO这个接口被我删了,因为没用)
interface IAggregator {
function latestAnswer() external view returns (int256 answer);
}
然后我们看一下他的存储区:其中,最重要的是MIM_USD和WMEMO_MIM。MIM_USD拿到的是Chianlink的MIM_USD价格对,WMEMO_MIM是UniswapFactory实例的Pair对。
using FixedPoint for *;
using BoringMath for uint256;
uint256 public constant PERIOD = 10 minutes;
IAggregator public constant MIM_USD = IAggregator(0x54EdAB30a7134A16a54218AE64C73e1DAf48a8Fb);
IUniswapV2Pair public constant WMEMO_MIM = IUniswapV2Pair(0x4d308C46EA9f234ea515cC51F16fba776451cac8);
struct PairInfo {
uint256 priceCumulativeLast;
uint32 blockTimestampLast;
uint144 priceAverage;
}
PairInfo public pairInfo;
最后,我们看一下他是怎么get price的:首先它通过传入blocktimestamp,然后利用uniswap的接口计算出priceCumulative这个值;得到了priceCumulative之后,然后传入Chainlink的Oracle报价,利用移动平均的计算方式计算MIM的平均值,最后得到priceAverage。为什么不直接WMEMO_MIM * MIM呢,因为这样做会有闪电贷的漏洞。

看了大概30多个合约,能总结出来那些莫名其妙的Token(生息资产,Chainlink和其他Oracle都没有这个pricefeed)拿到价格的机制是:
Chainlink有的,读Chainlink。
Chainlink没有?在Uniswap上有没有交易对,如果有那么就Uniswap Paris * ETH (USDT/MIM) Chainlink price
Chianlink和Uniswap上都没有?看一下Curve里面有没有交易对,如果有那么就Curve lp paris * ETH (USDT/MIM) Chainklink price
Chianlink和Uniswap和Curve上都没有?可能是一些新链的Token和很特殊的Token,联系一下对应链的DEX有没有API或者LP获得的方式。如果有,就是LP * ETH (USDT/MIM) Chainklink price
多说一句,我为我之前看空Chainlink忏悔,为我的错误认知道歉。虽然Chainlink很贵,但是它的昂贵却换来了超高的数据质量。有些事情,看似便宜,但很贵;有些事情,看似很贵,但是很便宜~~
随着经验的上涨,我现在真的觉得以前无知的自己很傻逼~嗯。现在好像2,3个月回首过往都觉得当时的自己傻逼且弱智。
这就是成长吗?
最后:
要时刻保持冷静,严谨。因为敲出来的每字母都要对几千万,甚至几个亿的资产负责。
要时刻保持冷静,严谨。因为敲出来的每字母都要对几千万,甚至几个亿的资产负责。
接上一篇文章我对Abracadabra研究了之后,对它的Oracle Price计算非常有疑惑。一些生息资产居然可以计算Rate和Price。包括:3crv,3crypto等等。然后我就花了相对久等时间去研读源码。整个项目源码中Oracle的代码量占到了50%以上,所以这个项目的重点和难点明显是在Oracle部分。我把代码看完了之后,然后得到下面的图(简要):

因为篇幅问题,上面还有接近20个合约还没有列。毕竟重要的有Spell,sSpell,wMemo(Wonderland实现9,9的关键代码),wOHMLink(OHM实现9,9的核心代码)。这篇主要是用来总结Abracadabra和OHM与Wonderland联系最相近的(9,9)部分。
在Wonderland上如何实现(9,9)呢?如下图:第一步是质押$TIME;第二步是把$MEMO转成$wMEMO;然后去Abracadabra上用$wMEMO借出$MIM; 然后把$MIM换成$TIME,然后STAKE。结束一轮循环。可以看到,(9,9)的概念其实相当于杠杠做(3,3)。这个杠杆率是自己控制的,官方建议不要超过20%。我目测认为,Wonderland的TVL这么高的原因跟Abracadabra离不开关系。而(9,9)能实现最关键的部分在于支持wMemo借贷,而wMemo是一个生息资产。如何对wMemo定价成了这个逻辑的核心问题,而解决了这个问题的合约是wMEMOOracle.sol。接下来讲一下这个合约。

这个合约主要是用来获取wMEMO的价格的。我们先看他需要用到的外部接口有哪些:IAggregator和IWMEMO。IAggregator是用来访问chainlink合约的。(IMEMO这个接口被我删了,因为没用)
interface IAggregator {
function latestAnswer() external view returns (int256 answer);
}
然后我们看一下他的存储区:其中,最重要的是MIM_USD和WMEMO_MIM。MIM_USD拿到的是Chianlink的MIM_USD价格对,WMEMO_MIM是UniswapFactory实例的Pair对。
using FixedPoint for *;
using BoringMath for uint256;
uint256 public constant PERIOD = 10 minutes;
IAggregator public constant MIM_USD = IAggregator(0x54EdAB30a7134A16a54218AE64C73e1DAf48a8Fb);
IUniswapV2Pair public constant WMEMO_MIM = IUniswapV2Pair(0x4d308C46EA9f234ea515cC51F16fba776451cac8);
struct PairInfo {
uint256 priceCumulativeLast;
uint32 blockTimestampLast;
uint144 priceAverage;
}
PairInfo public pairInfo;
最后,我们看一下他是怎么get price的:首先它通过传入blocktimestamp,然后利用uniswap的接口计算出priceCumulative这个值;得到了priceCumulative之后,然后传入Chainlink的Oracle报价,利用移动平均的计算方式计算MIM的平均值,最后得到priceAverage。为什么不直接WMEMO_MIM * MIM呢,因为这样做会有闪电贷的漏洞。

看了大概30多个合约,能总结出来那些莫名其妙的Token(生息资产,Chainlink和其他Oracle都没有这个pricefeed)拿到价格的机制是:
Chainlink有的,读Chainlink。
Chainlink没有?在Uniswap上有没有交易对,如果有那么就Uniswap Paris * ETH (USDT/MIM) Chainlink price
Chianlink和Uniswap上都没有?看一下Curve里面有没有交易对,如果有那么就Curve lp paris * ETH (USDT/MIM) Chainklink price
Chianlink和Uniswap和Curve上都没有?可能是一些新链的Token和很特殊的Token,联系一下对应链的DEX有没有API或者LP获得的方式。如果有,就是LP * ETH (USDT/MIM) Chainklink price
多说一句,我为我之前看空Chainlink忏悔,为我的错误认知道歉。虽然Chainlink很贵,但是它的昂贵却换来了超高的数据质量。有些事情,看似便宜,但很贵;有些事情,看似很贵,但是很便宜~~
随着经验的上涨,我现在真的觉得以前无知的自己很傻逼~嗯。现在好像2,3个月回首过往都觉得当时的自己傻逼且弱智。
这就是成长吗?
最后:
要时刻保持冷静,严谨。因为敲出来的每字母都要对几千万,甚至几个亿的资产负责。
No activity yet