闪电贷款
闪电贷款是无抵押贷款,允许用户借入lisUSD,只要在交易结束前归还所借金额(和费用)。
要使用闪电贷款并从中获利,你需要对BNB链(和智能链)、编程和智能合约有充分的了解。
闪电贷款的应用
闪电贷款有诸多用途。
一个明显的例子是资产之间的套利,用户可以在某人的lisUSD贷款清算期间,发生的荷兰式拍卖中闪电贷款lisUSD来购买BNB,立即在DEX上将lisUSD换成另一种资产,然后马上在另一个DEX上将获得的资产换成lisUSD,那里的资产比率更高,并向Lista偿还闪电贷款+利息,保留差额—所有这些都在一次贷款交易中完成。
涉及的实体
flashLender - Lista的智能合约,实现Flash贷款功能的 "服务器端"。
flashBorrower - 实现 "客户端 "的智能合约,EOA可以复制、修改和部署,通过flashLender进行交互。本页后面有一个智能合约的存根例子。
EOA(外部拥有的账户)--一个与他们部署的flashBorrower副本互动的账户。实际上,EOA是一个开发者,他复制flashBorrower,进行修改,并将其部署在BSC上,通过它与flashLender互动。
flashLender可以用来借入(mint)和偿还(burn)lisUSD destablecoins,并收取一定费用,在一次交易中。EOA需要与他们自己部署的flashBorrower副本进行交互,而后者又与flashLender进行交互。
闪电贷款费用
要获得费用,请调用flashFee(address token, uint256 amount)函数,该函数以18位小数返回费用金额。
代码示例
flashLender — flash.sol
flashBorrower — flashBorrower.sol
逐步推进
1. 设置你的FlashBorrower合同
你的合同必须符合ERC3156FlashBorrower接口,实现onFlashLoan()
函数。
为了与flashLender互动,你的合同必须实现flashBorrow(token, amount)
和onFlashLoan(initiator, token, amount, fee, data)
,这是一个在执行flashLoan()
时调用的回调函数。
在onFlashLoan()
中实现任何自定义逻辑。
这里有一个存根合同的例子,你可以通过它更好地了解如何实现flashBorrower。
flashBorrower必须实现IERC3156FlashBorrower,并且onFlashLoan()必须返回CALLBACK_SUCCESS哈希值。
2. 理解如何与flashLender互动
理解flashLender中使用的参数:
CALLBACK_SUCCESS
— 自定义字符串的哈希值,成功时返回。token
(address) — BNB ERC-20令牌的地址,EOA闪电式贷款。amount
(uint256) — 闪存贷款的金额。receiver
(IERC3156FlashBorrower) — EOA部署的flashBorrowed的地址。data
(bytes calldata) — 不改变flashLoan()
签名的基本的非使用参数。
了解你想与之互动的函数:
maxFlashLoan(address token)
— 如果token被支持的destablecoin,返回 "最大"。flashFee(address token, uint256 amount)
— 如果代币是被支持的可转移货币,则对金额应用 "收费 "并返回。flashLoan(IERC3156FlashBorrower receiver, address token, uint256 amount, bytes calldata data)
—用额外的数据(如果有的话)将代币amount
toreceiver
,并期望返回等于CALLBACK_SUCCESS。function accrue()
— 将剩余的费用发送到vow.sol。
如果你对此感到很好奇,可以了解一下Flash.sol中使用的MakerDao参数/常量。
vat
— vat.sol的地址。hayJoin
— hayJoin.sol的地址。hay
— hay.sol的地址。vow
— vow.sol.的地址。max
— 允许的最大借款金额。toll
— 归还贷款的费用。WAD
— 18 位小数。RAY
— 27 位小数。RAD
— 45 位小数。CALLBACK_SUCCESS
— 自定义字符串的哈希值,成功时返回。
要深入了解MakerDao合约,如var、hay、vow等,请从vat文档开始,然后再去看那里记录的其他智能合约。
3. 与flashLender互动
flashLender可以通过以下地址使用:
测试网 - 即将推出
一个典型的交互是这样的工作流程:
一个EOA在一个借款合同flashBorrower.sol上调用
flashBorrow(token, amount)
。提前批准flashLender用费用来偿还贷款。然后它在flashLender上调用
flashLoan(receiver, token, amount, data)
函数,该函数向flashBorrower兑现了指定的金额。同样的函数flashLoan(receiver, token, amount, data)然后调用(CALLBACK)flashBorrower上的
onFlashLoan(initiator, token, amount, fee, data)
函数,该函数实现了EOA想对借来的lisUSD做什么的自定义逻辑,然后onFlashLoan()
如果执行成功则返回KECCAK256 "ERC3156FlashBorrower.onFlashLoan
" 。自定义逻辑是由EOA思考并完全实现的。然后,flashLender会烧掉铸造的贷款,并将费用作为剩余的储存起来。
flashBorrower必须实现 I ,并且onFlashLoan()必须返回CALLBACK_SUCCESS哈希值。
贴近生活的使用实例
查看测试内容,找到一个贴近生活的使用实例。
Last updated