cover

AAVE协议PHP开发包

汇智网 / hubwiz.com

为PHP应用快速增加对AAVE协议的支持能力。

1、开发包概述

AaveTool开发包适用于为PHP应用快速增加对AAVE协议的支持能力, 主要包含以下特性:

  • 支持以太币/ERC20代币的存入、生息、赎回等完整功能
  • 支持资产数据与协议事件查询
  • 支持AAVE市场和UNISWAP市场

AaveTool开发包支持PHP 7.1+,当前版本1.0.0,主要类型及关系如下图所示:

aavetool uml

AaveTool的主要代码文件清单如下:

代码文件说明
aavetool/src/MoneyMarket.phpAaveTool入口类
aavetool/src/LendingPool.phpAave LendingPool合约封装
aavetool/src/LendingPoolCore.phpAave LendingPoolCore合约封装
aavetool/src/AToken.phpAave AToken合约封装
aavetool/src/Erc20Token.phpERC20代币合约封装
aavetool/src/AddressProvider.phpAave LendingPoolAddressProvider合约封装
aavetool/src/ContractBase.php以太坊合约基类
aavetool/src/ProtocolMeta.phpAave协议元信息
aavetool/src/Credential.php以太坊账户类
aavetool/src/Callback.php以太坊RPC调用辅助类
aavetool/src/Enums/Asset.phpAave资产枚举类型
aavetool/src/Enums/InterestRateMode.phpAave借出资产计息模式枚举类型
aavetool/src/Enums/Market.phpAave市场枚举类型
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.jsonComposer包管理配置文件
composer.lockComposer包管理配置

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:是否可作为抵押物

声 明

本站所提供软件包仅用于学习和研究,请依法合规使用。

本站所提供软件包均提供完整源码,使用前请认真阅读源代码和文档以确保充分理解软件包的设计与功能实现,本站不承担 因不当使用本站所提供软件包而造成的任何法律风险或财产损失责任。

¥4500.00
查看授权信息
  • 付费成功自动开通下载
  • 三个月内代码免费升级
  • 专业人员在线技术支持
  • 支持按需定制(另付费)
下载代码包
版本发布日期地址
1.0.0 2020-8-4
下载最新版
QQ咨询
2860991437
9+