文章介绍了Compound V3中的bulker合约,该合约支持在单个交易中执行多个操作,如抵押、借贷、转账等。文章详细解释了bulker合约的工作原理、安全性设计以及如何处理非标准ERC-20代币。
The bulker contracts in Compound V3 are multicall-like contracts for batching several transactions.
例如,如果我们想在一个交易中提供以太坊、LINK和wBTC作为抵押,并借用USDC,我们可以做到。
我们还可以减少抵押持有量并在一个交易中提取贷款,如下图所示。这当然假设我们保持在抵押因子限制之内。
bulker 的表现与传统的 multicall 不同,它不会接受任意 calldata 列表。相反,它接受两个参数:一个动作列表(共有 6 种选择)以及提供给它们的参数。该函数如下所示。具体来说,我们可以
ACTION_SUPPLY_ASSET
)ACTION_SUPPLY_NATIVE_TOKEN
)ACTION_TRANSFER_ASSET
),请参见我们关于 Compound V3 如何像重基 ERC 20 代币运行的文章 以了解其工作原理ACTION_WITHDRAW_ASSET
)ACTION_WITHDRAW_NATIVE_TOKEN
)Invoke 会遍历这些操作并使用提供的参数调用 Comet(或奖励合约)。
虽然将此代码放入主合约中可能会更节省 gas,但在循环中使用 msg.value,尤其是在调用 delegatecall 时,并不安全。请参阅本文末尾的练习问题。
Compound 小心确保 msg.value 被扣减而不是再次使用,这可能导致双重支付——请参见黄色框。
可以...
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!