http://www.7klian.com

如何利用JavaScript为DeFi协议提供资产数据

DeFi已经成为生态系统中一个非常流行的用例。在撰写本文时,有超过10亿美元被锁定在DeFi协议中。以开放、分布式的替代方案取代现有金融产品的前景,迄今已证明非常受欢迎。

这些DeFi平台之所以伟大,是因为它们易于开发人员使用。由于它们的开源代码的性质,任何愿意学习如何使用它们的人都可以使用它们。
其中最大的一个是Compound金融,已锁定价值约为1.15亿美元。任何人都可以向他们的协议
提供资产,并从中赚取利息,但这个过程是如何工作的?
Compound金融是如何运作?
Compound目前在这九个市场发挥作用:BAT、DAI、ETH、REP、SAI、USDC、USDT、WBTC、ZRX。这些是你可以赚取利息的数字
资产。
让我们以DAI为例。你为Compound协议
提供DAI后,该值将被协议锁定,直到您决定撤回它为止。同时您同意该协议可以借出该代币的价值,从而赢得整个资金池的利益,所以你可将其视为一个储蓄帐户。
存入其中后,,您可以随时查看有多少DAI,当前利率是多少,借用其他资产等。
让我们从技术上讲讲
从技术角度来看,这个供应过程是什么样的?
该协议将ERC20兼容合约用于每个受支持的市场,它们称为cToken。它们每个都有一个外部函数:mint,将提供的值发送到该处。此函数接收提供的值,根据汇率计算等效数量的cToken,然后将其交换为提供的值。
例如,如果汇率为1:1,则提供一个ETH,那么发送方将会收到一个cETH。
与mint相反的是一个名为redeme的函数。当用户想要提取其锁定值时,使用所需数量的cETH代币调用redeme将根据当前汇率返回ETH的等价值。
注意:还有一个redeemUnderlyinging函数,该函数使用基础资产单位而不是cToken单位作为输入。
编写代码
先决条件:本演练假定您基本了解
JavaScript、Web3和Ethereum智能合约。
我们将按照以下步骤供应ETH并将其兑换成Compound金融:
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 testnet,我们的URL是https://compound.finance/docs/abi/kovan/cETH。
在Compound的官方文档中可以找到每个网络上每个合约的地址。
使用web3,我们初始化合约实例如下:
const cEthInstance = new web3.eth.Contract(cEthABI, addr);
步骤2:提供ETH
图1显示了使用web3的send函数mint cTokens是多么容易:
cEthInstance.methods.mint().send({from: account, value: supplyValue})
    .once(‘transactionHash’, (hash) => {
        // Transaction hash
    })
    .on(‘confirmation’, (number, receipt) => {
        // Number of confirmations
    })
    .on(‘error’, (error) => {
        console.log(error);
    });
在此阶段,我们的ETH将开始根据当前利率赚取利息(也可以使用数学公式来计算)。
步骤3:读取我们的cETH余额
由于cToken合约符合ERC20,因此它们提供了一个称为balanceOf的函数。我们可以通过调用并向其传递帐户地址来检查我们的cETH余额:
let b = await cEthInstance.methods.balanceOf(account).call();
第四步:读取我们锁定的ETH余额
cToken合约还提供了一个名为balanceOfUnderlying的函数,该函数使用其拥有的cToken和当前汇率返回帐户的基础资产价值:
let u = await cEthInstance.methods.balanceOfUnderlying(account).call();
步骤5:从协议中赎回我们的ETH
将步骤4中的值u用作图2中的redeemAmount,我们可以调用redeemUnderlying来赎回我们的以太币:
cEthInstance.methods.redeemUnderlying(redeemAmount).send({from: account})
    .once(‘transactionHash’, (hash) => {
        // Transaction Hash
    })
    .on(‘confirmation’, (number, receipt) => {
        // Number of confirmations
    })
    .on(‘error’, (error) => {
        console.log(error);
    })
或者我们可以使用redeem代替redeemUnderlying并将第3步中的值b作为redeemAmount传递。
结论
随着DeFi变得越来越容易使用并为许多人所接受,在任何开发人员的工具箱中,学习如何与这些协议进行交互都是一种宝贵的工具。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读