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

免責聲明:

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

推荐阅读

;