AaveTool開發包适用于為PHP應用快速增加對AAVE協定的支援能力,官方下載下傳位址: AaveTool for PHP 。
1、AaveTool開發包概述
主要包含以下特性:
- 支援以太币/ERC20代币的存入、生息、贖回等完整功能
- 支援資産資料與協定事件查詢
- 支援AAVE市場和UNISWAP市場
AaveTool開發包支援PHP 7.1+,目前版本1.0.0,主要類型及關系如下圖所示:

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
輸出結果如下:
2.2 從Aave借出資産
執行個體程式demo/borrow-dai.php示範了如何從Aave協定借出資産。在終端執行如下指令啟動示例程式:
php borrow-dai.php
2.3 檢視Aave協定總體統計資訊
執行個體程式demo/general-info.php示範了如何查詢Aave協定的總體統計資料。在終端執行如下指令啟動示例程式:
php general-info.php
2.4 查詢賬戶在Aave協定中的資料
示例程式demo/user-info.php示範了如何查詢以太坊賬戶在Aave協定中的統計資料。在終端執行如下指令啟動示例程式:
php user-info.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/