我正在阅读OpenZeppelin的Escrow.sol智能合同。withdraw函数的评论说:“为收款人提取累积余额,将所有气体转发给收款人。”forwarding all gas在这里是什么意思?
发布于 2022-09-07 16:56:33
正如您在撤退函数中看到的那样,它调用payee.sendValue(payment);。sendValue函数在地址库中声明。正如我们所看到的,它使用.call函数发送余额。
基于文档,.call函数将所有气体转发给接收方。这是理想的情况下,如果一个接受者也是一个合同,希望运行一些其他的逻辑,这样它就不会耗尽汽油。
您还可以从文档中看到,.transfer和.send函数仅转发2300 gas,这足以接收以太,但不足以在接收以太的同时执行更复杂的操作,例如修改收件人合同的状态。
这就是为什么它说要将所有的气体转发给接收者,因为它使用的是.call函数而不是.send或.transfer函数。
接收方未使用的气体将被退回给发件人合同,而未使用的气体将被退还给原发件人。这样,以前的发件人可以继续执行更多的操作。
文档:
地址库:
https://ethereum.stackexchange.com/questions/135190
复制相似问题