Compound V3 中的批量操作工具

  • RareSkills
  • 发布于 2024-01-11 15:55
  • 阅读 179

文章介绍了Compound V3中的bulker合约,该合约支持在单个交易中执行多个操作,如抵押、借贷、转账等。文章详细解释了bulker合约的工作原理、安全性设计以及如何处理非标准ERC-20代币。

The bulker contracts in Compound V3 are multicall-like contracts for batching several transactions.

例如,如果我们想在一个交易中提供以太坊、LINK和wBTC作为抵押,并借用USDC,我们可以做到。

我们还可以减少抵押持有量并在一个交易中提取贷款,如下图所示。这当然假设我们保持在抵押因子限制之内。

bulker example

invoke()

bulker 的表现与传统的 multicall 不同,它不会接受任意 calldata 列表。相反,它接受两个参数:一个动作列表(共有 6 种选择)以及提供给它们的参数。该函数如下所示。具体来说,我们可以

  • 提供 ERC 20 (ACTION_SUPPLY_ASSET)
  • 提供 ETH (ACTION_SUPPLY_NATIVE_TOKEN)
  • 转移资产 (ACTION_TRANSFER_ASSET),请参见我们关于 Compound V3 如何像重基 ERC 20 代币运行的文章 以了解其工作原理
  • 提取 ERC 20 (ACTION_WITHDRAW_ASSET)
  • 提取 ETH (ACTION_WITHDRAW_NATIVE_TOKEN)
  • 领取累计的 COMP 奖励。底层函数 claimReward 将与 奖励合约 交互,而不是主要的借贷合约 (Comet.sol)。

invoke function

Invoke 会遍历这些操作并使用提供的参数调用 Comet(或奖励合约)。

虽然将此代码放入主合约中可能会更节省 gas,但在循环中使用 msg.value,尤其是在调用 delegatecall 时,并不安全。请参阅本文末尾的练习问题。

Compound 小心确保 msg.value 被扣减而不是再次使用,这可能导致双重支付——请参见黄色框。

可以...

剩余50%的内容订阅专栏后可查看

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
RareSkills
RareSkills
https://www.rareskills.io/