Precompiled-Contracts

非常高的天然氣成本

  • November 24, 2018

我注意到以下特點:

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,聲明兩者都預編譯“無效輸入失敗並消耗所有提供的氣體”。您將提供所有剩餘的氣體,因此在呼叫預編譯時它會消耗呼叫框架中的所有可用氣體。

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