Exceptions
乙太幣轉賬是否會在異常情況下消耗所有gas?
如果
addr.transfer()
失敗,它是否使用revert
- 或 -throw
樣式的異常?換句話說,失敗是否transfer
消耗了所有提供的氣體?
我相信它不會消耗所有提供的氣體。
雖然根據文件它會拋出:
<address>.transfer(uint256 amount): send given amount of Wei to Address, throws on failure
由於“REVERT 指令”EIP似乎不再消耗所有的氣體。
為了測試這一點,我創建了一些簡單的合約——可以在這個 EthFiddle上看到。
我使用 remix 部署了合約並呼叫了
forward
我的合約函式,Transfer
儘管交易使用了 Remix 的預設 3,000,000 gas,但實際 gas 成本為 29,135:調試事務並查看堆棧,我可以看到最近合理添加的 REVERT OPCODE 被呼叫:
我認為這並不是消耗所有氣體的原因。