程序员秘籍丨如何使用Javascript为DeFi协议Compound供应资产?

前言:本文适用于对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:

  1. 加载cETH合约。
  2. 通过调用mint,锁定ETH并接收cETH代币来提供ETH。
  3. 读取我们的cETH余额。
  4. 读取我们锁定的ETH余额。
  5. 通过提供cETH从协议中赎回我们的ETH。

步骤1:加载cETH合约

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

在我们的场景中,使用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/blockcentric/blockchain-development-resources-b44b752f3248

本文链接:https://www.8btc.com/article/611193
转载请注明文章出处

转载声明:本文 由CoinON抓取收录,观点仅代表作者本人,不代表CoinON资讯立场,CoinON不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。若以此作为投资依据,请自行承担全部责任。

声明:图文来源于网络,如有侵权请联系删除

风险提示:投资有风险,入市需谨慎。本资讯不作为投资理财建议。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2020年6月19日 上午10:45
下一篇 2020年6月19日 上午11:45

相关推荐

程序员秘籍丨如何使用Javascript为DeFi协议Compound供应资产?

星期五 2020-06-19 10:51:58

前言:本文适用于对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:

  1. 加载cETH合约。
  2. 通过调用mint,锁定ETH并接收cETH代币来提供ETH。
  3. 读取我们的cETH余额。
  4. 读取我们锁定的ETH余额。
  5. 通过提供cETH从协议中赎回我们的ETH。

步骤1:加载cETH合约

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

在我们的场景中,使用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/blockcentric/blockchain-development-resources-b44b752f3248

本文链接:https://www.8btc.com/article/611193
转载请注明文章出处