去中心化金融(DeFi)协议Compound支持的所有资产,都是通过cToken智能合约来封装集成的,用户通过铸造代币(cToken)向协议提供资产,然后你只要持有cToken,就可以赚取到利息,而当你选择赎回后,每个cToken都可兑换成相应的基础资产。
可以说,cToken是与Compound协议交互的主要方式。每个cToken合约都创造了自己的货币市场,而用户铸币、赎回、借款、偿还借款、清算借款或转让cToken时,他们将使用到cToken合约。
目前,Compound协议有两种类型的cToken:CErc20和CEther,其中CErc20封装的是ERC-20资产,而CEther则封装的是以太币。
(当前Compound协议支持的7种cToken及对应合约地址)
而在这篇文章中,我们将了解Compound协议的核心函数:Mint(铸币);
Redeem(赎回);
Redeem Underlying(赎回基础资产);
Borrow(借款);
Repay Borrow(偿还借款);
Repay Borrow Behalf;
Liquidate Borrow(清算借款);
故障信息
Exchange Rate(兑换汇率);
Get Cash(获取Cash);
Total Borrow(借款总额);
Borrow Balance(借款余额);
Borrow Rate(借款利率);
Total Supply(总供给量);
Supply Balance(供应余额);
Supply Balance Underlying(基础资产供应余额);
Supply Rate(供应率);
Total Reserves(总储备金);
Reserve Factor(储备金率);
1、铸币(Mint)
铸币(Mint)函数负责将资产转移到货币市场,后者根据资产的当前供应率计算利息。铸造的代币数量,根据用户所提供的基础资产数量除以当前汇率得出。
铸币(Mint)相当于Compound 协议的供应来源。
CErc20function mint(uint mintAmount) returns (uint)msg.sender : 提供资产并拥有铸造cToken的帐户;
mintAmount : 以基础资产为单位进行铸币的金额;
RETURN:返回0表示成功,其它则是错误代码;
在提供资产之前,用户必须首先批准cToken以访问其代币余额;
CEtherfunction mint() payablemsg.value (payable):以太币待提供金额,单位为wei;
msg.sender:提供以太币并拥有铸造cToken的账户;
RETURN : 没有返回,出错时还原;
SolidityErc20 underlying = Erc20(0xToken...); // get a handle for the underlying asset contract
CErc20 cToken = CErc20(0x3FDA...); // get a handle for the corresponding cToken contract
underlying.approve(address(cToken), 100); // approve the transfer
assert(cToken.mint(100) == 0); // mint the cTokens and assert there is no error
Web3 1.0const cToken = CEther.at(0x3FDB...);
await cToken.methods.mint().send({from: myAccount, value: 50});
2、赎回
赎回函数负责将基础资产从货币市场转移至用户,以交换之前铸造的cToken。基础资产赎回金额根据cToken的数量乘以当前汇率得出。赎回金额必须小于用户帐户的流动性以及市场的可用流动性。
赎回相当于Compound 协议的退出功能。
CErc20 / CEtherfunction redeem(uint redeemTokens) returns (uint)msg.sender : 赎回资金转移账户