header-langage
简体中文
繁體中文
English
Tiếng Việt
한국어
日本語
ภาษาไทย
Türkçe
掃碼下載APP
Partnered With:

如何使用Javascript爲DeFi協議Compound供應資產?

閱讀本文需 13 分鐘
文適用於對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



歡迎加入律動 BlockBeats 官方社群:

Telegram 訂閱群:https://t.me/theblockbeats

Telegram 交流群:https://t.me/BlockBeats_App

Twitter 官方帳號:https://twitter.com/BlockBeatsAsia

举报 糾錯/舉報
選擇文庫
新增文庫
取消
完成
新增文庫
僅自己可見
公開
保存
糾錯/舉報
提交