AaveTool开发包适用于为PHP应用快速增加对AAVE协议的支持能力, 主要包含以下特性:
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.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
输出结果如下:
AaveTool使用Credential类来表示一个特定的以太坊账号,是访问Aave协议 的主体。
2.1 实例化Credential
使用静态方法new()
创建一个新的以太坊账户,例如:
//use AaveTool\Credential;
$credential = Credential::new();
也可以使用静态方法fromKey()
导入已有的私钥来实例化Credential对象,例如:
$credential = Credential::fromKey('0x4f3edf983ac6......b113bce9c46');
2.2 查看账户的密钥和地址
Credential类提供了如下方法获取当前账户的私钥、公钥和地址:
例如,下面的代码创建一个新的以太坊账户并显示其地址:
$credential = Credential::new();
echo 'address => ' . $credential.getAddress() . PHP_EOL;
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
枚举类型目前支持以下选项:
Market
枚举类型目前支持以下选项:
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' // 存入资产数量
);
注意,存入资产数量应以相应资产的最小单位计,例如:
Asset
枚举类型目前支持以下选项:
默认情况下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的资产可以设置为抵押物以便后续借贷。使用如下两个 方法设置指定的存入资产的可抵押状态:
例如,下面的代码将之前存入的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对借出的资产支持两种计息模式:
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()
方法返回一个关联数组,主要 包含以下字段:
3.9 查询账户在Aave协议中的资产情况
使用getUserReserveData()
方法查询当前账户在Aave协议中的 资产状况。例如下面的代码查询用户在Aave协议中ETH资产的借贷 情况:
$data = $moneyMarket->getUserReserveData(
Asset::ETH
);
foreach($data as $name => $value){
echo $name . ': ' . $value . PHP_EOL;
}
getUserReserveData()
方法返回一个关联数组,各字段 说明如下:
学如逆水行舟,不进则退。心似平原跑马,易放难收。IT技术是指掌握多种技能,并能利用多种技能独立完成产品的人。 也叫全端工程师(同时具备前端和后台能力),英文Full Stack engineer。【人工智能】【区块链】【系统/网络/运维】【云计算/大数据】【数据库】【移动开发】【后端开发】【游戏开发】【UI设计】【微服务】【爬虫】【Java】【Go】【C++】【PHP】【Python】【Android/IOS】【HTML/CSS】【JavaScript】【Node】。欢迎各位大神萌新一起专研分享技术。。。欢迎加入【IT技术交流群】:958319786
————————————————