风险提示
风险提示: 律动 BlockBeats 提醒,根据银保监会等五部门于 2018 年 8 月发布《关于防范以「虚拟货币」「区块链」名义进行非法集资的风险提示》的文件,请广大公众理性看待区块链,不要盲目相信天花乱坠的承诺,树立正确的货币观念和投资理念,切实提高风险意识;对发现的违法犯罪线索,可积极向有关部门举报反映。或联系律动tousu@theblockbeats.com。
举报
简体中文 繁体中文
English(Google translation)
登录/注册
热门排行
热门搜索
没有找到搜索内容
查看更多
如何使用Javascript为DeFi协议Compound供应资产?
硬核 2020年06月20日 19:30
文适用于对JavaScript,Web3和以太坊智能合约有基本了解的开发者

原文标题:《程序员秘籍丨如何使用 Javascript 为 DeFi 协议 Compound 供应资产?》

原文作者:Kyle 



前言:本文适用于对 JavaScript,Web3 和以太坊智能合约有基本了解的开发者。


DeFi 已成为以太坊生态系统非常流行的用例。在撰写本文时,DeFi 协议已锁定价值超过 10 亿美元。迄今为止,使用开放的,去中心化的替代选择替代现有金融产品的前景已经非常受欢迎。


1*K_B9fk4OLex0SizoDAUC3w


这些 DeFi 平台之所以如此出色,原因之一就是因为它们易于开发人员使用。由于它们的开源特性,开发者可以更好地了解,任何愿意学习如何使用它们的人都可以使用它们。


DeFi 领域目前最大的公司之一是 Compound Finance,目前其生态中锁定的价值约为 1.15 亿美元。所有人都可以为其协议提供资产并从中获取利息,但是这个过程如何做到的?

 

Compound 怎么玩的? 


Compound 目前支持 9 种代币:BAT,DAI,ETH,REP,SAI,USDC,USDT,WBTC,ZRX。这些是您可以赚取利息的数字资产。


让我们以 DAI 为例。当你向协议提供 DAI 后,DAI 将被锁定,直到您决定取回它为止。当 DAI 被锁定时,您需要同意协议可以借出这些价值,从而赢得整个流动性池的利息。你可以把它想象为一种储蓄帐户。


存入其中后,您可以随时查看池中总共锁定了多少 DAI,当前利率是多少,借用其他资产等。

 

技术实现 


从技术角度来看,这种资产供应过程是什么样的?


该协议使用了 ERC20 兼容合约用于每个受支持的市场。它们称为 cToken。它们每个都有一个外部函数:mint,这是供应的价值的发送目的地。此函数用于接收供应的价值,根据交易所汇率计算等值的 cToken 数量,并将它们交换为供应的价值。


例如,如果汇率为 1:1,则供应 1 个 ETH,发送方将收到一个 cETH。


mint 的反向函数为 redeem 函数。当用户想要提取其锁定的价值时,根据当前汇率,使用所需数量的 cETH 代币进行赎回,返还等价的 ETH。


注意:还有一个 redeemUnderlying 函数,使用基础资产单位而不是 cToken 单位作为输入。

 

编写代码 


前提条件:本演练假定读者对 JavaScript,Web3 和以太坊智能合约有基本的了解。


我们将按照以下步骤为 Compound Finance 提供和兑换 ETH:


加载 cETH 合约。

通过调用 mint,锁定 ETH 并接收 cETH 代币来提供 ETH。

读取我们的 cETH 余额。

读取我们锁定的 ETH 余额。

通过提供 cETH 从协议中赎回我们的 ETH。


步骤 1:加载 cETH 合约


每个代币合约在每个网络上都有一个不同的地址。cToken 合约的 ABI 可从 https://compound.finance/docs/abi//公开获得。


在我们的场景中,使用 cETH 和 Kovan 测试网,我们的 URL 是 https://compound.finance/docs/abi/kovan/cETH


在 Compound 的官方文档中可以找到每个网络上每个合约的地址。


使用 web3,我们像这样初始化合约实例:

const cEthInstance = new web3.eth.Contract(cEthABI, addr);

 

步骤 2:提供 ETH

 

图 1 显示了使用 web3 的 send 函数创建 cToken 的容易程度:


QQ20200618-154422@2x

图 1:铸造 cToken


在此阶段,我们的 ETH 将开始根据当前利率赚取利息(也可以使用一个数学公式来计算)。

 

步骤 3:读取我们的 cETH 余额

 

由于 cToken 合约兼容 ERC20,因此它们提供了一个称为 balanceOf 的函数。我们可以通过调用并向其传递我们的帐户地址来检查我们的 cETH 余额:

let b = await cEthInstance.methods.balanceOf(account).call();

 

步骤 4:读取锁定的 ETH 余额

 

cToken 合约还提供了一个称为 balanceOfUnderlying 的函数,该函数使用其拥有的 cToken 和当前汇率返还帐户的基础资产价值:

let u = await

cEthInstance.methods.balanceOfUnderlying(account).call();


步骤 5:从协议中赎回我们的 ETH


将步骤 4 中的值 u 用作图 2 中的 redeemAmount,我们可以调用 redeemUnderlying 来赎回我们的 ETH:


2

图 2:赎回过程


或者,我们可以使用 redeem 代替 redeemUnderlying 并将第 3 步中的值 b 作为 redeemAmount。

 

结论 


随着 DeFi 变得越来越容易使用并被许多人采用,在任何开发人员的工具箱中,学习如何与这些协议进行交互都是一种宝贵的工具。


如果您对区块链开发感兴趣,我会撰写有关入门和构建产品组合的教程,演练,提示和技巧。查看以下的区块链开发资源:https://medium.com


原文链接:https://www.8btc.com


智能合约DeFiCompoundWeb3

硬核

高级科普文,更专业

扫码下载律动APP

专业区块链研究机构 与资讯平台