Merge branch 'jangko-fix_tangerine_whistle_bugs'
This commit is contained in:
commit
94f933dddb
|
@ -406,7 +406,7 @@ OK: 23/30 Fail: 0/30 Skip: 7/30
|
||||||
+ CallLoseGasOOG.json OK
|
+ CallLoseGasOOG.json OK
|
||||||
+ CallRecursiveBombPreCall.json OK
|
+ CallRecursiveBombPreCall.json OK
|
||||||
+ CallcodeLoseGasOOG.json OK
|
+ CallcodeLoseGasOOG.json OK
|
||||||
Delegatecall1024.json Skip
|
+ Delegatecall1024.json OK
|
||||||
+ Delegatecall1024OOG.json OK
|
+ Delegatecall1024OOG.json OK
|
||||||
+ callOutput1.json OK
|
+ callOutput1.json OK
|
||||||
+ callOutput2.json OK
|
+ callOutput2.json OK
|
||||||
|
@ -435,7 +435,7 @@ OK: 23/30 Fail: 0/30 Skip: 7/30
|
||||||
+ delegatecodeDynamicCode.json OK
|
+ delegatecodeDynamicCode.json OK
|
||||||
+ delegatecodeDynamicCode2SelfCall.json OK
|
+ delegatecodeDynamicCode2SelfCall.json OK
|
||||||
```
|
```
|
||||||
OK: 33/34 Fail: 0/34 Skip: 1/34
|
OK: 34/34 Fail: 0/34 Skip: 0/34
|
||||||
## stEIP150Specific
|
## stEIP150Specific
|
||||||
```diff
|
```diff
|
||||||
+ CallAndCallcodeConsumeMoreGasThenTransactionHas.json OK
|
+ CallAndCallcodeConsumeMoreGasThenTransactionHas.json OK
|
||||||
|
@ -2017,8 +2017,8 @@ OK: 1/284 Fail: 0/284 Skip: 283/284
|
||||||
```diff
|
```diff
|
||||||
+ ABAcalls0.json OK
|
+ ABAcalls0.json OK
|
||||||
+ ABAcalls1.json OK
|
+ ABAcalls1.json OK
|
||||||
ABAcalls2.json Skip
|
+ ABAcalls2.json OK
|
||||||
ABAcalls3.json Skip
|
+ ABAcalls3.json OK
|
||||||
+ ABAcallsSuicide0.json OK
|
+ ABAcallsSuicide0.json OK
|
||||||
+ ABAcallsSuicide1.json OK
|
+ ABAcallsSuicide1.json OK
|
||||||
+ Call10.json OK
|
+ Call10.json OK
|
||||||
|
@ -2083,7 +2083,7 @@ OK: 1/284 Fail: 0/284 Skip: 283/284
|
||||||
+ suicideSendEtherToMe.json OK
|
+ suicideSendEtherToMe.json OK
|
||||||
+ testRandomTest.json OK
|
+ testRandomTest.json OK
|
||||||
```
|
```
|
||||||
OK: 61/67 Fail: 0/67 Skip: 6/67
|
OK: 63/67 Fail: 0/67 Skip: 4/67
|
||||||
## stTransactionTest
|
## stTransactionTest
|
||||||
```diff
|
```diff
|
||||||
+ ContractStoreClearsOOG.json OK
|
+ ContractStoreClearsOOG.json OK
|
||||||
|
@ -2520,4 +2520,4 @@ OK: 5/133 Fail: 0/133 Skip: 128/133
|
||||||
OK: 0/130 Fail: 0/130 Skip: 130/130
|
OK: 0/130 Fail: 0/130 Skip: 130/130
|
||||||
|
|
||||||
---TOTAL---
|
---TOTAL---
|
||||||
OK: 1497/2334 Fail: 0/2334 Skip: 837/2334
|
OK: 1500/2334 Fail: 0/2334 Skip: 834/2334
|
||||||
|
|
|
@ -19,6 +19,7 @@ PersistBlockTests
|
||||||
+ block226522.json OK
|
+ block226522.json OK
|
||||||
+ block231501.json OK
|
+ block231501.json OK
|
||||||
+ block243826.json OK
|
+ block243826.json OK
|
||||||
|
+ block2463413.json OK
|
||||||
+ block248032.json OK
|
+ block248032.json OK
|
||||||
+ block299804.json OK
|
+ block299804.json OK
|
||||||
+ block420301.json OK
|
+ block420301.json OK
|
||||||
|
@ -43,7 +44,7 @@ PersistBlockTests
|
||||||
+ block97.json OK
|
+ block97.json OK
|
||||||
+ block98.json OK
|
+ block98.json OK
|
||||||
```
|
```
|
||||||
OK: 40/40 Fail: 0/40 Skip: 0/40
|
OK: 41/41 Fail: 0/41 Skip: 0/41
|
||||||
|
|
||||||
---TOTAL---
|
---TOTAL---
|
||||||
OK: 40/40 Fail: 0/40 Skip: 0/40
|
OK: 41/41 Fail: 0/41 Skip: 0/41
|
||||||
|
|
|
@ -154,10 +154,6 @@ proc writeContract*(computation: BaseComputation, fork: Fork): bool =
|
||||||
result = false
|
result = false
|
||||||
|
|
||||||
proc transferBalance(computation: BaseComputation, opCode: static[Op]) =
|
proc transferBalance(computation: BaseComputation, opCode: static[Op]) =
|
||||||
if computation.msg.depth > MaxCallDepth:
|
|
||||||
computation.setError(&"Stack depth limit reached depth={computation.msg.depth}")
|
|
||||||
return
|
|
||||||
|
|
||||||
let senderBalance = computation.vmState.readOnlyStateDb().
|
let senderBalance = computation.vmState.readOnlyStateDb().
|
||||||
getBalance(computation.msg.sender)
|
getBalance(computation.msg.sender)
|
||||||
|
|
||||||
|
@ -193,6 +189,11 @@ proc postExecuteVM(computation: BaseComputation) =
|
||||||
proc executeOpcodes*(computation: BaseComputation) {.gcsafe.}
|
proc executeOpcodes*(computation: BaseComputation) {.gcsafe.}
|
||||||
|
|
||||||
proc applyMessage*(computation: BaseComputation, opCode: static[Op]) =
|
proc applyMessage*(computation: BaseComputation, opCode: static[Op]) =
|
||||||
|
if computation.msg.depth > MaxCallDepth:
|
||||||
|
computation.setError(&"Stack depth limit reached depth={computation.msg.depth}")
|
||||||
|
computation.nextProc()
|
||||||
|
return
|
||||||
|
|
||||||
computation.snapshot()
|
computation.snapshot()
|
||||||
defer:
|
defer:
|
||||||
computation.dispose()
|
computation.dispose()
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
import
|
import
|
||||||
math, eth/common/eth_types,
|
math, eth/common/eth_types,
|
||||||
./utils/[macros_gen_opcodes, utils_numeric],
|
./utils/[macros_gen_opcodes, utils_numeric],
|
||||||
./opcode_values, ./vm_forks
|
./opcode_values, ./vm_forks, ../../errors
|
||||||
|
|
||||||
# Gas Fee Schedule
|
# Gas Fee Schedule
|
||||||
# Yellow Paper Appendix G - https://ethereum.github.io/yellowpaper/paper.pdf
|
# Yellow Paper Appendix G - https://ethereum.github.io/yellowpaper/paper.pdf
|
||||||
|
@ -67,7 +67,7 @@ type
|
||||||
of Call, CallCode, DelegateCall, StaticCall:
|
of Call, CallCode, DelegateCall, StaticCall:
|
||||||
c_isNewAccount*: bool
|
c_isNewAccount*: bool
|
||||||
c_gasBalance*: GasInt
|
c_gasBalance*: GasInt
|
||||||
c_contractGas*: Gasint
|
c_contractGas*: Uint256
|
||||||
c_currentMemSize*: Natural
|
c_currentMemSize*: Natural
|
||||||
c_memOffset*: Natural
|
c_memOffset*: Natural
|
||||||
c_memLength*: Natural
|
c_memLength*: Natural
|
||||||
|
@ -325,16 +325,16 @@ template gasCosts(fork: Fork, prefix, ResultGasCostsName: untyped) =
|
||||||
# Cgascap
|
# Cgascap
|
||||||
when fork >= FkTangerine:
|
when fork >= FkTangerine:
|
||||||
# https://github.com/ethereum/EIPs/blob/master/EIPS/eip-150.md
|
# https://github.com/ethereum/EIPs/blob/master/EIPS/eip-150.md
|
||||||
result.gasRefund =
|
let gas = `prefix all_but_one_64th`(gasParams.c_gasBalance - result.gasCost)
|
||||||
if gasParams.c_gasBalance >= result.gasCost:
|
if gasParams.c_contractGas > high(GasInt).u256 or
|
||||||
min(
|
gas < gasParams.c_contractGas.truncate(GasInt):
|
||||||
`prefix all_but_one_64th`(gasParams.c_gasBalance - result.gasCost),
|
result.gasRefund = gas
|
||||||
gasParams.c_contractGas
|
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
gasParams.c_contractGas
|
result.gasRefund = gasParams.c_contractGas.truncate(GasInt)
|
||||||
else:
|
else:
|
||||||
result.gasRefund += gasParams.c_contractGas
|
if gasParams.c_contractGas > high(GasInt).u256:
|
||||||
|
raise newException(TypeError, "GasInt Overflow (" & $gasParams.kind & ") " & $gasParams.c_contractGas)
|
||||||
|
result.gasRefund = gasParams.c_contractGas.truncate(GasInt)
|
||||||
|
|
||||||
result.gasCost += result.gasRefund
|
result.gasCost += result.gasRefund
|
||||||
|
|
||||||
|
|
|
@ -710,15 +710,12 @@ template genCall(callName: untyped, opCode: Op): untyped =
|
||||||
else:
|
else:
|
||||||
(memOutPos, memOutLen)
|
(memOutPos, memOutLen)
|
||||||
|
|
||||||
if gas > high(GasInt).u256:
|
|
||||||
raise newException(TypeError, "GasInt Overflow (" & callNameStr & ")")
|
|
||||||
|
|
||||||
let (childGasFee, childGasLimit) = computation.gasCosts[opCode].c_handler(
|
let (childGasFee, childGasLimit) = computation.gasCosts[opCode].c_handler(
|
||||||
value,
|
value,
|
||||||
GasParams(kind: opCode,
|
GasParams(kind: opCode,
|
||||||
c_isNewAccount: isNewAccount,
|
c_isNewAccount: isNewAccount,
|
||||||
c_gasBalance: computation.gasMeter.gasRemaining,
|
c_gasBalance: computation.gasMeter.gasRemaining,
|
||||||
c_contractGas: gas.truncate(GasInt),
|
c_contractGas: gas,
|
||||||
c_currentMemSize: computation.memory.len,
|
c_currentMemSize: computation.memory.len,
|
||||||
c_memOffset: memOffset,
|
c_memOffset: memOffset,
|
||||||
c_memLength: memLength
|
c_memLength: memLength
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -94,6 +94,11 @@ proc main() =
|
||||||
chainDB.dumpTest(1_920_000) # the DAO fork
|
chainDB.dumpTest(1_920_000) # the DAO fork
|
||||||
chainDB.dumpTest(1_927_662) # fork comparison bug in postExecuteVM
|
chainDB.dumpTest(1_927_662) # fork comparison bug in postExecuteVM
|
||||||
|
|
||||||
|
# too big and too slow, we can skip it
|
||||||
|
# because it already covered by GST
|
||||||
|
#chainDB.dumpTest(2_283_416) # first DDOS spam attack block
|
||||||
|
chainDB.dumpTest(2_463_413) # tangerine call* gas cost bug
|
||||||
|
|
||||||
when isMainModule:
|
when isMainModule:
|
||||||
var message: string
|
var message: string
|
||||||
|
|
||||||
|
|
|
@ -17,9 +17,6 @@ func allowedFailingGeneralStateTest*(folder, name: string): bool =
|
||||||
"randomStatetest85.json", # CALL* memoffset
|
"randomStatetest85.json", # CALL* memoffset
|
||||||
|
|
||||||
# Tangerine failed GST
|
# Tangerine failed GST
|
||||||
"Delegatecall1024.json",
|
|
||||||
"ABAcalls2.json",
|
|
||||||
"ABAcalls3.json",
|
|
||||||
"doubleSelfdestructTest.json",
|
"doubleSelfdestructTest.json",
|
||||||
"doubleSelfdestructTest2.json",
|
"doubleSelfdestructTest2.json",
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue