天天看點

Aave協定PHP開發包

AaveTool開發包适用于為PHP應用快速增加對AAVE協定的支援能力,官方下載下傳位址: AaveTool for PHP

1、AaveTool開發包概述

主要包含以下特性:

  • 支援以太币/ERC20代币的存入、生息、贖回等完整功能
  • 支援資産資料與協定事件查詢
  • 支援AAVE市場和UNISWAP市場

AaveTool開發包支援PHP 7.1+,目前版本1.0.0,主要類型及關系如下圖所示:

Aave協定PHP開發包

AaveTool的主要代碼檔案清單如下:

代碼檔案 說明
aavetool/src/MoneyMarket.php AaveTool入口類
aavetool/src/LendingPool.php Aave LendingPool合約封裝
aavetool/src/LendingPoolCore.php Aave LendingPoolCore合約封裝
aavetool/src/AToken.php Aave AToken合約封裝
aavetool/src/Erc20Token.php ERC20代币合約封裝
aavetool/src/AddressProvider.php Aave LendingPoolAddressProvider合約封裝
aavetool/src/ContractBase.php 以太坊合約基類
aavetool/src/ProtocolMeta.php Aave協定元資訊
aavetool/src/Credential.php 以太坊賬戶類
aavetool/src/Callback.php 以太坊RPC調用輔助類
aavetool/src/Enums/Asset.php Aave資産枚舉類型
aavetool/src/Enums/InterestRateMode.php Aave借出資産計息模式枚舉類型
aavetool/src/Enums/Market.php Aave市場枚舉類型
aavetool/src/Enums/Network.php 以太坊網絡枚舉類型
demo/deposit-eth.php 示範代碼,向Aave存入以太币
demo/borrow-dai.php 示範代碼,從Aave借出DAI
demo/user-info.php 示範代碼,查詢賬戶在Aave協定中的基本資訊
demo/general-info.php 示範代碼,查詢Aave協定的總體資訊
vendor/ 第三方依賴包目錄
composer.json Composer包管理配置檔案
composer.lock Composer包管理配置

2、使用示例代碼

2.1 向Aave存入資産

示例程式demo/deposit-eth.php示範了如何向Aave協定存入資産。在終端執行如下指令啟動示例程式:

php deposit-eth.php           

輸出結果如下:

Aave協定PHP開發包

2.2 從Aave借出資産

執行個體程式demo/borrow-dai.php示範了如何從Aave協定借出資産。在終端執行如下指令啟動示例程式:

php borrow-dai.php           
Aave協定PHP開發包

2.3 檢視Aave協定總體統計資訊

執行個體程式demo/general-info.php示範了如何查詢Aave協定的總體統計資料。在終端執行如下指令啟動示例程式:

php general-info.php           
Aave協定PHP開發包

2.4 查詢賬戶在Aave協定中的資料

示例程式demo/user-info.php示範了如何查詢以太坊賬戶在Aave協定中的統計資料。在終端執行如下指令啟動示例程式:

php user-info.php           
Aave協定PHP開發包

2 Credential類使用方法

AaveTool使用Credential類來表示一個特定的以太坊賬号,是通路Aave協定

的主體。

2.1 執行個體化Credential

使用靜态方法

new()

建立一個新的以太坊賬戶,例如:

//use AaveTool\Credential;

$credential = Credential::new();           

也可以使用靜态方法

fromKey()

導入已有的私鑰來執行個體化Credential對象,例如:

$credential = Credential::fromKey('0x4f3edf983ac6......b113bce9c46');           

2.2 檢視賬戶的密鑰和位址

Credential類提供了如下方法擷取目前賬戶的私鑰、公鑰和位址:

  • getPrivateKey():傳回私鑰16進制字元串
  • getPublicKey():傳回公鑰16進制字元串
  • getAddress():傳回位址16進制字元串

例如,下面的代碼建立一個新的以太坊賬戶并顯示其位址:

$credential = Credential::new();
echo 'address => ' . $credential.getAddress() . PHP_EOL;           

3、MoneyMarket類使用說明

MoneyMarket類提供了一組便捷方法用于通路Aave協定。

3.1 MoneyMarket執行個體化

執行個體化MoneyMarket需要傳入兩個參數:用于互動的賬戶對象,以及必要的市場配置資訊。例如:

//use AaveTool\Credential;
//use AaveTool\MoneyMarket;
//use AaveTool\Enums\Network;
//use AaveTool\Enums\Market;

$credential = Credential::fromKey('0x7878......7878');
$config = [
  'url' => 'http://localhost:8545',        // 以太坊節點URL
  'timeout' => 60,                         // 節點逾時設定,機關:秒
  'network' => Network::MAIN,              // 接入以太坊主網
  'market' => Market::AAVE                 // 接入AAVE市場
];
$moneyMarket = new MoneyMarket($credential, $config);           

Network

枚舉類型目前支援以下選項:

  • Network::MAIN:以太坊主鍊
  • Network::ROPSTEN:以太坊Ropsten測試鍊
  • Network::RINKEBY:以太坊Rinkeby測試鍊

Market

  • Market::AAVE:Aave市場
  • Market::UNISWAP:Uniswap市場

3.2 将資産存入Aave協定

使用MoneyMarket對象的

deposit()

向Aave協定存入以太币或代币。例如向Aave協定存入100個Ether:

//use AaveTool\Enums\Asset;

$txid = $moneyMarket->deposit(
  Asset::ETH,                         // 存入資産名稱        
  '100000000000000000000'             // 存入資産數量
);           

或者向Aave協定存入100個USDT:

$txid = $moneyMarket->deposit(
  Asset::USDT,                         // 存入資産名稱        
  '100000000'                          // 存入資産數量
);           

注意,存入資産數量應以相應資産的最小機關計,例如:

  • 100 ether = 100000000000000000000 wei
  • 100 usdt = 100000000 unit

Asset

  • Aave市場:
    • ETH / DAI / USDT / SUSD / TUSD / USDT / BAT / ENJ
    • KNC / LEND / LINK / MANA / MKR / REN / REP / SNX / WBTC / ZRX
  • Uniswap市場:
    • ETH / DAI / USDC / USDT
    • UNI_USDC_ETH / UNI_LINK_ETH / UNI_DAI_ETH
    • UNI_LENT_ETH / UNI_MKR_ETH / UNI_SETH_ETH

預設情況下

deposit()

方法會自動估算交易的gasPrice和gasLimit,也可以使用方法的最後兩個參數指定這兩個值,例如:

$txid = $moneyMarket->deposit(
  Asset::USDT,                         // 存入資産名稱        
  '100000000',                         // 存入資産數量
  '20000000000',                       // gasPrice:20 gwei
  '100000'                             // gasLimit: 100k
);
echo 'deposit txid => ' . $txid . PHP_EOL;           

MoneyMarket的其他交易方法與

deposit()

方法類似,預設情況下均自動估算gasPrice和gasLimit,同時也支援手工指定這兩個參數值,後續不再贅述。

3.3 抵押/解抵押存入資産

存入Aave的資産可以設定為抵押物以便後續借貸。使用如下兩個方法設定指定的存入資産的可抵押狀态:

  • enableUseAsCollateral():設定為抵押物
  • disableUseAsCollateral():取消抵押物設定

例如,下面的代碼将之前存入的ETH資産設定為抵押物:

$txid = $moneyMarket->enableUseAsCollateral(Asset::ETH);
echo 'enable collateral txid => ' . $txid . PHP_EOL;           

3.4 從Aave協定借出資産

在抵押物有效的情況下,可以使用

borrow()

方法從Aave協定借出其他資産。例如借出20個LINK:

//use AaveTool\Enums\Asset;
//use AaveTool\Enums\InterestRateMode;

$txid = $moneyMarket->borrow(
  Asset::LINK,                       // 資産名稱
  '20000000000000000000',            // 資産數量
  InterestRateMode::STABLE           // 計息模式
);
echo 'borrow txid => ' . $txid . PHP_EOL;           

Aave對借出的資産支援兩種計息模式:

  • InterestRateMode::STABLE:穩定利率,基于算法保持利率較小的變化
  • InterestRateMode::VARIABLE:變動利率,即利率随資産供需關系動态調整

3.5 切換借出資産的計息模式

使用

swapBorrowRateMode()

方法可以切換借出資産的計息模式。例如:

$txid = $moneyMarket->swapBorrowRateMode();
echo 'swap rate mode txid => ' . $txid . PHP_EOL;           

3.6 償還借出資産

repay()

方法償還從Aave借出的資産。例如償還一部分借出的LINK資産:

$txid = $moneyMarket->repay(
  Asset::LINK,                          // 資産名稱
  '10000000000000000000'                // 資産數量
);
echo 'repay txid => ' . $txid . PHP_EOL;           

預設情況下,repay()方法償還目前賬戶的借出資産,也可以為他人償還借出資産,例如替mary償還借款:

$mary = '0x9F7C50......D3e3bd';    
$txid = $moneyMarket->repay(
  Asset::LINK,                          // 資産名稱
  '10000000000000000000',               // 資産數量
  $mary                                 // 償還該位址名下借款 
);
echo 'repay txid => ' . $txid . PHP_EOL;           

3.7 從Aave協定取出存款

redeem()

方法取回存在Aave協定中的資産。例如取出一部分之前存入的ETH:

$txid = $moneyMarket->redeem(
  Asset::ETH,                            // 資産名稱
  '10000000000000000000'                 // 資産數量
);
echo 'redeem txid => ' . $txid . PHP_EOL;           

3.8 查詢賬戶在Aave協定中的基本資訊

getUserAccountData()

方法查詢目前賬戶在Aave協定中的基本資訊。例如:

$data = $moneyMarket->getUserAccountData();
foreach($data as $name => $value){
  echo $name . ': ' . $value . PHP_EOL;
}           

getUserAccountData()

方法傳回一個關聯數組,主要包含以下字段:

  • totalLiquidityETH:存入資産總額,機關:WEI
  • totalCollateralETH:抵押資産總額,機關:WEI
  • totalBorrowsETH:借出資産總額,機關:WEI
  • totalFeesETH:手續費總額,機關:WEI
  • availableBorrowsETH:有效借款額度,機關:WEI
  • currentLiquidationThreshold:抵押資産平均清算門檻值
  • ltv:Loan-to-Value平均值
  • healthFactor:賬戶健康系數

3.9 查詢賬戶在Aave協定中的資産情況

getUserReserveData()

方法查詢目前賬戶在Aave協定中的資産狀況。例如下面的代碼查詢使用者在Aave協定中ETH資産的借貸情況:

$data = $moneyMarket->getUserReserveData(
  Asset::ETH
);
foreach($data as $name => $value){
  echo $name . ': ' . $value . PHP_EOL;
}           

getUserReserveData()

方法傳回一個關聯數組,各字段說明如下:

  • currentATokenBalance:存入資産計息餘額
  • currentBorrowBalance:借出資産計息餘額
  • pincipalBorrowBalance:借出資産本金
  • borrowRateMode:借出計息模式
  • borrowRate:借出資産的年化利率
  • liquidityRate:存入資産的年化利率
  • originationFee:借出資産的初始費
  • variableBorrowIndex:變動累積指數
  • lastUpdateTimestamp:最後更新時間戳
  • usageAsCollateralEnabled:是否可作為抵押物

AaveTool官方下載下傳位址:

http://sc.hubwiz.com/codebag/aave-php-sdk/