區塊鏈研究實驗室|如何使用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,我們初始化合約例項如下:

constcEthInstance=newweb3.eth.Contract(cEthABI,addr);

步驟2:提供ETH

圖1顯示了使用web3的send函式mint cTokens是多麼容易:

cEthInstance.methods.mint().send({from:account,value:supplyValue}).once('transactionHash',(hash)=>{//Transactionhash}).on('confirmation',(number,receipt)=>{//Numberofconfirmations}).on('error',(error)=>{console.log(error);});

在此階段,我們的ETH將開始根據當前利率賺取利息(也可以使用數學公式來計算)。

步驟3:讀取我們的cETH餘額

由於cToken合約符合ERC20,因此它們提供了一個稱為balanceOf的函式。我們可以透過呼叫並向其傳遞帳戶地址來檢查我們的cETH餘額:

letb=awaitcEthInstance.methods.balanceOf(account).call();

第四步:讀取我們鎖定的ETH餘額

cToken合約還提供了一個名為balanceOfUnderlying的函式,該函式使用其擁有的cToken和當前匯率返回帳戶的基礎資產價值:

letu=awaitcEthInstance.methods.balanceOfUnderlying(account).call();

步驟5:從協議中贖回我們的ETH

將步驟4中的值u用作圖2中的redeemAmount,我們可以呼叫redeemUnderlying來贖回我們的以太幣:

cEthInstance.methods.redeemUnderlying(redeemAmount).send({from:account}).once('transactionHash',(hash)=>{//TransactionHash}).on('confirmation',(number,receipt)=>{//Numberofconfirmations}).on('error',(error)=>{console.log(error);})

或者我們可以使用redeem代替redeemUnderlying並將第3步中的值b作為redeemAmount傳遞。

結論

隨著DeFi變得越來越容易使用併為許多人所接受,在任何開發人員的工具箱中,學習如何與這些協議進行互動都是一種寶貴的工具。

-----------------------------------

原文作者:Alex Roan

原文連結:https://medium.com/better-programming/how-to-supply-assets-to-defi-protocols-using-javascript-df6c6d31e58d

譯者:鏈三豐

---------------------------------

相關文章閱讀:

區塊鏈研究實驗室|如何從DeFi協議獲取交易資料

區塊鏈研究實驗室|如何使用algotrade編寫比特幣的高階趨勢跟蹤策略

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;