Solidity

“將所有氣體轉發給收件人”是什麼意思?

  • September 7, 2022

我正在閱讀 OpenZeppelin 的Escrow.sol智能合約。該withdraw功能的評論說:“提取收款人的累積餘額,將所有氣體轉發給收件人。”。這裡是什麼forwarding all gas意思?

正如您在撤消函式中看到的那樣,它呼叫payee.sendValue(payment);. 該sendValue函式在地址庫中聲明。正如我們所看到的,它使用.call函式發送餘額。

根據文件,該.call函式將所有氣體轉發給接收者。如果接收者也是一個想要執行其他邏輯的合約並且這樣它不會耗盡gas,這是理想的。

從文件中也可以看出,.transferand.send函式僅轉發 2300 gas,這足以接收乙太幣,但不足以在接收乙太幣的同時進行更複雜的操作,例如修改接收者合約的狀態。

這就是為什麼它說將所有氣體轉發給接收者,因為它使用.call函式而不是.sendor.transfer函式發送 eth。

接收方未使用的gas返回給發送方合約,未使用的gas則退還給原始發送方。這樣,以前的發送者可以繼續做更多的操作。

文件:

https://docs.soliditylang.org/en/latest/units-and-global-variables.html?highlight=address%20initial#members-of-address-types

地址庫:

https://github.com/OpenZeppelin/openzeppelin-contracts/blob/c1d6e39aab042a38a90f618c614a298522851f7b/contracts/utils/Address.sol#L60

引用自:https://ethereum.stackexchange.com/questions/135190