本文作者:ripwu
Compound白皮书和核心代码,大佬已经写了很详细的文档,见
Compound从白皮书看业务逻辑Compound合约部署合约升级模式-以compound为例
这里补充下周边:COMP代币和价格预言
COMP
投放计划
为了激励用户,用户每次存款或者借款,Compound都会奖励COMP代币,可以用于治理投票
COMP每日总产出约为2312枚,各市场的分布见文档,部分市场如下
MarketPerDayDAI880
compBorrowSpeeds和comSupplySpeeds为cToken到每区块产出COMP数量的映射
比如对cUSDC来说,它在两个映射表中的值都为67000000000000000(COMP的精度为)
存款挖矿
用户每次操作,只要可能更新存款,如存款操作,会触发mintAllowed(),它进一步
调用updateCompSupplyIndex()更新当前市场的COMP存款指数
调用distributeSupplierComp()分发当前用户此前未结算的存款产出的COMP
functionmintAllowed(addresscToken,addressminter,uintmintAmount)externalreturns(uint){//KeeptheflywheelmovingupdateCompSupplyIndex(cToken);distributeSupplierComp(cToken,minter);returnuint(Error
--当前市场的COMP存款指数更新逻辑如下
/***
首先判断距离上次更新指数,经过了几个区块deltaBlocks,另外根据supplySpeed判断当前市场是否产出COMP(0x,Aave等配置为0,表示不产出)
条件都满足后,计算COMP产出数量,除以cToken总供给,得到这几个区块间,平均每个cToken对应的COMP产出,即代码中的ratio
也就是说,ratio可以理解为每持有一个cToken,可以得到多少COMP
最后将ratio累加进COMP存款指数
--当前用户此前未结算的COMP分发逻辑如下
/***);uintsupplierTokens=CToken(cToken)
首先获取市场最新的COMP存款指数,以及用户此前结算时的指数,相减得到deltaIndex
然后乘以用户持有的cToken数量,得到用户这段时间应该获得的COMP
--需要说明的是,这里结算的是用户之前的存款,占当前总供给的百分比,不会算入用户接下来马上将改变的存款
换句话说,存款余额的修改,要在至少一个区块之后才会被用于结算COMP,即用户操作与COMP结算是跨区块的
算是降低了被闪电贷攻击的风险
借款挖矿
与存款挖矿大同小异,稍微复杂一些,这里不再赘述
通胀
根据messari,COMP的InflationRate为27
elseif(isWithinAnchor(reportedPrice,anchorPrice)){require(reportedPrice<2**248,"Reportedpricetoolarge");prices
else{emitPriceGuarded(config
}
核心代码如上所示
validate()由Chainlink调用,参数currentAnswer表示Chainlink链下统计的价格,单位由Chainlink控制
以DAI为例,假设currentAnswer为100055330
为了方便处理,convertReportedPrice()将其转为内部单位,得到1000553
calculateAnchorPriceFromEthPrice()通过向交易对询价得到链上Uniswap交易所的价格,比如为1001190
接下来判断failoverActive,这是由社区投票决定的一项配置,表示当前市场(DAI)是否忽略Chainlink价格,以Uniswap价格为准
否则,通过isWithAnchor()确认Chainlink价格在Uniswap价格浮动范围内()
--```/***
/***/***
```
逻辑非常直白了..
参考资料
ripwu:https://learnblockchain.cn/people/3911
Compound从白皮书看业务逻辑:https://learnblockchain.cn/article/2781
Compound合约部署:https://learnblockchain.cn/article/2915
合约升级模式-以compound为例:https://learnblockchain.cn/article/2802
文档:https://compound.finance/governance/com
27.50%:https://messari.io/asset/compound/metrics/supply
流动性投放计划:https://messari.io/asset/compound/profile/supply-schedule
9月29日Compound62号提案所引发的可怕Bug:https://github.com/rebase-network/Dapp-Learning/blob/main/defi/Compound/contract/9月29日Compound62号提案所引发的可怕Bug.md
地址:https://etherscan.io/address/0x2775b1c75658Be0F640272CCb8c72ac986009e38
compound-finance/open-oracle:https://github.com/compound-finance/open-oracle
OracleInfrastructure:ChainlinkProposal:https://www.comp.xyz/t/oracle-infrastructure-chainlink-proposal/1272
OracleImprovement(ChainlinkPriceFeeds)#150:https://github.com/compound-finance/open-oracle/pull/150
TrailofBits:ChainlinkOpen-OracleSummaryReport:https://drive.google.com/file/d/1TsOXhBLenStjdd2mxF1Sfmmh_Na9X527/view
smartcontractkit/open-source:https://github.com/smartcontractkit/open-oracle/blob/master/contracts/Uniswap/UniswapAnchoredView.sol
USDC-WETH:https://etherscan.io/address/0xB4e16d0168e52d35CaCD2c6185b44281Ec28C9Dc
DAI-WETH:https://etherscan.io/address/0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11
SigmaPrime:ChainlinkValidatorProxySecurityAssessmentReport:https://drive.google.com/file/d/1u12kitAyQKwe3mJVFh5ePzabTmwhjA2Y/view
smartcontractkit/chainlink:https://github.com/smartcontractkit/chainlink/blob/develop/contracts/hide/v0.8/ValidatorProxy.sol
免责声明:作为区块链信息平台,本站所发布文章仅代表作者个人观点,与链闻ChainNews立场无关。文章内的信息、意见等均仅供参考,并非作为或被视为实际投资建议。
本文来源于非小号媒体平台:
登链社区
现已在非小号资讯平台发布105篇作品,
非小号开放平台欢迎币圈作者入驻
入驻指南:
/apply_guide/
本文网址:
/news/10468157.html
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表非小号的观点或立场
上一篇:
比特币进入牛市交叉点,BTC反弹迫在眉睫?
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。