Solidity
“將所有氣體轉發給收件人”是什麼意思?
我正在閱讀 OpenZeppelin 的
Escrow.sol
智能合約。該withdraw
功能的評論說:“提取收款人的累積餘額,將所有氣體轉發給收件人。”。這裡是什麼forwarding all gas
意思?
正如您在撤消函式中看到的那樣,它呼叫
payee.sendValue(payment);
. 該sendValue
函式在地址庫中聲明。正如我們所看到的,它使用.call
函式發送餘額。根據文件,該
.call
函式將所有氣體轉發給接收者。如果接收者也是一個想要執行其他邏輯的合約並且這樣它不會耗盡gas,這是理想的。從文件中也可以看出,
.transfer
and.send
函式僅轉發 2300 gas,這足以接收乙太幣,但不足以在接收乙太幣的同時進行更複雜的操作,例如修改接收者合約的狀態。這就是為什麼它說將所有氣體轉發給接收者,因為它使用
.call
函式而不是.send
or.transfer
函式發送 eth。接收方未使用的gas返回給發送方合約,未使用的gas則退還給原始發送方。這樣,以前的發送者可以繼續做更多的操作。
文件:
地址庫: