Precompiled-Contracts
非常高的天然氣成本
我注意到以下特點:
CALL opcode vm trace step: 1122 execution step: 1122 add memory: gas: 3859834 remaining gas: 3921090 loaded address: 0xa7913fc3e4dbf3d8caca06e1c2da85ed838e150f 0: 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 1: 0x6 2: 0x 3: 0x800 4: 0x80 5: 0x7c0 6: 0x40 7: 0x 8: 0x800 9: 0x7c0 10: 0x780 11: 0x300 12: 0x891
一次呼叫就使用了 380 萬汽油?您可以看到呼叫是對 0x6 的呼叫,這是一個預編譯。但是,它應該花費500 gas的固定費率。我相信它正在消耗氣體,因為我給出的論點並不在曲線上,為什麼它不會簡單地返回錯誤?或者,如果預編譯不喜歡它,只需還原事務。我這樣稱呼它:
if iszero(call(not(0), 0x06, 0, input, 0x80, ret, 0x40)) { failed := 1 }
我希望它簡單地返回 false 並設置“失敗”變數,仍然使用 500 氣體。如果我的假設不正確,我希望它會恢復。是否有關於它消耗的 380 萬氣體的文件?
EIP-196是定義 ECADD/ECMUL 預編譯的 EIP,聲明兩者都預編譯“無效輸入失敗並消耗所有提供的氣體”。您將提供所有剩餘的氣體,因此在呼叫預編譯時它會消耗呼叫框架中的所有可用氣體。