Pre:
DoDo支持flash loan,并且手续费上比较友好
注:DODO V2 闪电贷仅当返还的base quote 数量比例产生变化时,合约会预览一笔将base quote 磨平的交易,该磨平交易手续费作为闪电贷手续费。其他情况不收取手续费用
试试在rinkby
测试网上能否执行借款还款操作
DoDo闪电交换机制:
Code:
solidity代码:
参考文档里闪电交换,有代码例子该代码则是只实现了借款和还款的操作,具体的借款后的操作逻辑还要自己实现
1 | pragma solidity ^0.8.0; |
brownie
部署脚本:
brownie run scripts/deployment.py --network rinkeby
1 | from brownie import Flashloan, accounts, config, network |
执行脚本
brownie run scripts/run_flash_loan.py --network rinkeby
1 | from brownie import Flashloan, accounts, config, network, interface |
执行效果:
能成功借款还款
遇到的问题:
dodoFlashLoan函数有3个参数:
-
flashLoanPool 池子地址
-
loanAmount 数量
-
loanToken 要借的token地址
选择池子地址:
在https://app.dodoex.io/pool/list?network=rinkeby
可以看到有哪些池子信息
比如此处我要借usdc,就可以搜索一下
然后该池子还要支持flashloan,比如上图第一个池子就不支持,第二个池子才支持
借款数量
一开始我填的loanAmount
为10 ether,想借10个,转换成wei则为10000000000000000000
执行后报错,无法正常借款还款
查一下报错
https://dashboard.tenderly.co/tx/rinkeby/0xee7f3a6e0ef5906f8f95cbc789151e1d62da424dc80c6d93c80307ba060be646
Error Message:ERC20: transfer amount exceeds balance
对比一下Dodo流程,此时池子在借款的时候,要发送token给我合约时报错了,报错信息为转账数量超过余额了。
减少loanAmount
为10000000
后,发现能成功,原来该usdc的精度为6位
以后要注意一下,大多数代币的精度为18位,但有些代币不是。