fix DelegateCall gasCost, GST +6
This commit is contained in:
parent
a7c6531f08
commit
36fb75d042
|
@ -156,11 +156,11 @@ OK: 63/79 Fail: 0/79 Skip: 16/79
|
||||||
Call1024BalanceTooLow.json Skip
|
Call1024BalanceTooLow.json Skip
|
||||||
Call1024OOG.json Skip
|
Call1024OOG.json Skip
|
||||||
Call1024PreCalls.json Skip
|
Call1024PreCalls.json Skip
|
||||||
CallLoseGasOOG.json Skip
|
+ CallLoseGasOOG.json OK
|
||||||
CallRecursiveBombPreCall.json Skip
|
CallRecursiveBombPreCall.json Skip
|
||||||
+ Callcode1024BalanceTooLow.json OK
|
+ Callcode1024BalanceTooLow.json OK
|
||||||
Callcode1024OOG.json Skip
|
Callcode1024OOG.json Skip
|
||||||
CallcodeLoseGasOOG.json Skip
|
+ CallcodeLoseGasOOG.json OK
|
||||||
+ callOutput1.json OK
|
+ callOutput1.json OK
|
||||||
+ callOutput2.json OK
|
+ callOutput2.json OK
|
||||||
+ callOutput3.json OK
|
+ callOutput3.json OK
|
||||||
|
@ -176,7 +176,7 @@ OK: 63/79 Fail: 0/79 Skip: 16/79
|
||||||
+ callcodeOutput3.json OK
|
+ callcodeOutput3.json OK
|
||||||
+ callcodeOutput3Fail.json OK
|
+ callcodeOutput3Fail.json OK
|
||||||
+ callcodeOutput3partial.json OK
|
+ callcodeOutput3partial.json OK
|
||||||
callcodeOutput3partialFail.json Skip
|
+ callcodeOutput3partialFail.json OK
|
||||||
+ callcodeWithHighValue.json OK
|
+ callcodeWithHighValue.json OK
|
||||||
+ callcodeWithHighValueAndGasOOG.json OK
|
+ callcodeWithHighValueAndGasOOG.json OK
|
||||||
+ createFailBalanceTooLow.json OK
|
+ createFailBalanceTooLow.json OK
|
||||||
|
@ -193,7 +193,7 @@ OK: 63/79 Fail: 0/79 Skip: 16/79
|
||||||
+ createNameRegistratorPreStore1NotEnoughGas.json OK
|
+ createNameRegistratorPreStore1NotEnoughGas.json OK
|
||||||
+ createNameRegistratorendowmentTooHigh.json OK
|
+ createNameRegistratorendowmentTooHigh.json OK
|
||||||
```
|
```
|
||||||
OK: 31/39 Fail: 0/39 Skip: 8/39
|
OK: 34/39 Fail: 0/39 Skip: 5/39
|
||||||
## stCallDelegateCodesCallCodeHomestead
|
## stCallDelegateCodesCallCodeHomestead
|
||||||
```diff
|
```diff
|
||||||
callcallcallcode_001.json Skip
|
callcallcallcode_001.json Skip
|
||||||
|
@ -403,9 +403,9 @@ OK: 23/30 Fail: 0/30 Skip: 7/30
|
||||||
Call1024BalanceTooLow.json Skip
|
Call1024BalanceTooLow.json Skip
|
||||||
Call1024OOG.json Skip
|
Call1024OOG.json Skip
|
||||||
Call1024PreCalls.json Skip
|
Call1024PreCalls.json Skip
|
||||||
CallLoseGasOOG.json Skip
|
+ CallLoseGasOOG.json OK
|
||||||
CallRecursiveBombPreCall.json Skip
|
CallRecursiveBombPreCall.json Skip
|
||||||
CallcodeLoseGasOOG.json Skip
|
+ CallcodeLoseGasOOG.json OK
|
||||||
Delegatecall1024.json Skip
|
Delegatecall1024.json Skip
|
||||||
Delegatecall1024OOG.json Skip
|
Delegatecall1024OOG.json Skip
|
||||||
+ callOutput1.json OK
|
+ callOutput1.json OK
|
||||||
|
@ -420,7 +420,7 @@ OK: 23/30 Fail: 0/30 Skip: 7/30
|
||||||
+ callcodeOutput3.json OK
|
+ callcodeOutput3.json OK
|
||||||
+ callcodeOutput3Fail.json OK
|
+ callcodeOutput3Fail.json OK
|
||||||
+ callcodeOutput3partial.json OK
|
+ callcodeOutput3partial.json OK
|
||||||
callcodeOutput3partialFail.json Skip
|
+ callcodeOutput3partialFail.json OK
|
||||||
+ callcodeWithHighValueAndGasOOG.json OK
|
+ callcodeWithHighValueAndGasOOG.json OK
|
||||||
deleagateCallAfterValueTransfer.json Skip
|
deleagateCallAfterValueTransfer.json Skip
|
||||||
+ delegatecallAndOOGatTxLevel.json OK
|
+ delegatecallAndOOGatTxLevel.json OK
|
||||||
|
@ -435,7 +435,7 @@ OK: 23/30 Fail: 0/30 Skip: 7/30
|
||||||
delegatecodeDynamicCode.json Skip
|
delegatecodeDynamicCode.json Skip
|
||||||
delegatecodeDynamicCode2SelfCall.json Skip
|
delegatecodeDynamicCode2SelfCall.json Skip
|
||||||
```
|
```
|
||||||
OK: 18/34 Fail: 0/34 Skip: 16/34
|
OK: 21/34 Fail: 0/34 Skip: 13/34
|
||||||
## stEIP150Specific
|
## stEIP150Specific
|
||||||
```diff
|
```diff
|
||||||
CallAndCallcodeConsumeMoreGasThenTransactionHas.json Skip
|
CallAndCallcodeConsumeMoreGasThenTransactionHas.json Skip
|
||||||
|
@ -2520,4 +2520,4 @@ OK: 0/133 Fail: 0/133 Skip: 133/133
|
||||||
OK: 0/130 Fail: 0/130 Skip: 130/130
|
OK: 0/130 Fail: 0/130 Skip: 130/130
|
||||||
|
|
||||||
---TOTAL---
|
---TOTAL---
|
||||||
OK: 1381/2334 Fail: 0/2334 Skip: 953/2334
|
OK: 1387/2334 Fail: 0/2334 Skip: 947/2334
|
||||||
|
|
|
@ -64,14 +64,13 @@ type
|
||||||
case kind*: Op
|
case kind*: Op
|
||||||
of Sstore:
|
of Sstore:
|
||||||
s_isStorageEmpty*: bool
|
s_isStorageEmpty*: bool
|
||||||
of Call:
|
of Call, CallCode, DelegateCall, StaticCall:
|
||||||
c_isNewAccount*: bool
|
c_isNewAccount*: bool
|
||||||
c_gasBalance*: GasInt
|
c_gasBalance*: GasInt
|
||||||
c_contractGas*: Gasint
|
c_contractGas*: Gasint
|
||||||
c_currentMemSize*: Natural
|
c_currentMemSize*: Natural
|
||||||
c_memOffset*: Natural
|
c_memOffset*: Natural
|
||||||
c_memLength*: Natural
|
c_memLength*: Natural
|
||||||
c_opCode*: Op
|
|
||||||
of Create:
|
of Create:
|
||||||
cr_currentMemSize*: Natural
|
cr_currentMemSize*: Natural
|
||||||
cr_memOffset*: Natural
|
cr_memOffset*: Natural
|
||||||
|
@ -303,7 +302,7 @@ template gasCosts(fork: Fork, prefix, ResultGasCostsName: untyped) =
|
||||||
)
|
)
|
||||||
|
|
||||||
# Cnew_account
|
# Cnew_account
|
||||||
if gasParams.c_isNewAccount and gasParams.c_opCode == Call:
|
if gasParams.c_isNewAccount and gasParams.kind == Call:
|
||||||
if fork < FkSpurious:
|
if fork < FkSpurious:
|
||||||
# Pre-EIP161 all account creation calls consumed 25000 gas.
|
# Pre-EIP161 all account creation calls consumed 25000 gas.
|
||||||
result.gasCost += static(FeeSchedule[GasNewAccount])
|
result.gasCost += static(FeeSchedule[GasNewAccount])
|
||||||
|
@ -315,7 +314,7 @@ template gasCosts(fork: Fork, prefix, ResultGasCostsName: untyped) =
|
||||||
result.gasCost += static(FeeSchedule[GasNewAccount])
|
result.gasCost += static(FeeSchedule[GasNewAccount])
|
||||||
|
|
||||||
# Cxfer
|
# Cxfer
|
||||||
if not value.isZero:
|
if not value.isZero and gasParams.kind in {Call, CallCode}:
|
||||||
result.gasCost += static(FeeSchedule[GasCallValue])
|
result.gasCost += static(FeeSchedule[GasCallValue])
|
||||||
|
|
||||||
# Cextra
|
# Cextra
|
||||||
|
@ -338,7 +337,7 @@ template gasCosts(fork: Fork, prefix, ResultGasCostsName: untyped) =
|
||||||
result.gasCost += result.gasRefund
|
result.gasCost += result.gasRefund
|
||||||
|
|
||||||
# Ccallgas - Gas sent to the child message
|
# Ccallgas - Gas sent to the child message
|
||||||
if not value.isZero:
|
if not value.isZero and gasParams.kind in {Call, CallCode}:
|
||||||
result.gasRefund += static(FeeSchedule[GasCallStipend])
|
result.gasRefund += static(FeeSchedule[GasCallStipend])
|
||||||
|
|
||||||
func `prefix gasHalt`(currentMemSize, memOffset, memLength: Natural): GasInt {.nimcall.} =
|
func `prefix gasHalt`(currentMemSize, memOffset, memLength: Natural): GasInt {.nimcall.} =
|
||||||
|
|
|
@ -220,12 +220,12 @@ proc writePaddedResult(mem: var Memory,
|
||||||
data: openarray[byte],
|
data: openarray[byte],
|
||||||
memPos, dataPos, len: Natural,
|
memPos, dataPos, len: Natural,
|
||||||
paddingValue = 0.byte) =
|
paddingValue = 0.byte) =
|
||||||
|
|
||||||
mem.extend(memPos, len)
|
mem.extend(memPos, len)
|
||||||
let dataEndPosition = dataPos.int64 + len - 1
|
let dataEndPosition = dataPos.int64 + len - 1
|
||||||
let sourceBytes = data[min(dataPos, data.len) .. min(data.len - 1, dataEndPosition)]
|
let sourceBytes = data[min(dataPos, data.len) .. min(data.len - 1, dataEndPosition)]
|
||||||
mem.write(memPos, sourceBytes)
|
mem.write(memPos, sourceBytes)
|
||||||
|
|
||||||
# Don't duplicate zero-padding of mem.extend
|
# Don't duplicate zero-padding of mem.extend
|
||||||
let paddingOffset = memPos + sourceBytes.len
|
let paddingOffset = memPos + sourceBytes.len
|
||||||
# TODO: avoid unnecessary memory allocation
|
# TODO: avoid unnecessary memory allocation
|
||||||
|
@ -700,17 +700,15 @@ template genCall(callName: untyped, opCode: Op): untyped =
|
||||||
|
|
||||||
let (childGasFee, childGasLimit) = computation.gasCosts[opCode].c_handler(
|
let (childGasFee, childGasLimit) = computation.gasCosts[opCode].c_handler(
|
||||||
value,
|
value,
|
||||||
GasParams(kind: Call,
|
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.truncate(GasInt),
|
||||||
c_currentMemSize: computation.memory.len,
|
c_currentMemSize: computation.memory.len,
|
||||||
c_memOffset: memOffset,
|
c_memOffset: memOffset,
|
||||||
c_memLength: memLength,
|
c_memLength: memLength
|
||||||
c_opCode: opCode
|
|
||||||
))
|
))
|
||||||
|
|
||||||
#trace "Call (" & callNameStr & ")", childGasLimit, childGasFee
|
|
||||||
if childGasFee >= 0:
|
if childGasFee >= 0:
|
||||||
computation.gasMeter.consumeGas(childGasFee, reason = $opCode)
|
computation.gasMeter.consumeGas(childGasFee, reason = $opCode)
|
||||||
|
|
||||||
|
|
|
@ -75,21 +75,14 @@ func allowedFailingGeneralStateTest*(folder, name: string): bool =
|
||||||
"callcallcallcode_001_OOGMAfter_2.json",
|
"callcallcallcode_001_OOGMAfter_2.json",
|
||||||
|
|
||||||
# Failed in homestead but OK in Frontier
|
# Failed in homestead but OK in Frontier
|
||||||
"callcallcallcode_001.json",
|
|
||||||
"callcallcode_01.json",
|
|
||||||
"callcallcodecall_010.json",
|
|
||||||
"callcallcodecallcode_011.json",
|
"callcallcodecallcode_011.json",
|
||||||
"callcallcallcode_001.json",
|
|
||||||
"callcallcode_01.json",
|
|
||||||
"callcallcodecall_010.json",
|
|
||||||
"callcallcodecallcode_011.json",
|
|
||||||
"callcodecallcall_100.json",
|
|
||||||
"callcodecallcallcode_101.json",
|
|
||||||
"callcodecallcode_11.json",
|
|
||||||
"callcodecallcodecall_110.json",
|
|
||||||
"callcodecallcodecallcode_111.json",
|
"callcodecallcodecallcode_111.json",
|
||||||
"CallLoseGasOOG.json",
|
"callcallcode_01.json",
|
||||||
"CallcodeLoseGasOOG.json",
|
"callcodecallcall_100.json",
|
||||||
"callcodeOutput3partialFail.json"
|
"callcodecallcode_11.json",
|
||||||
|
"callcallcallcode_001.json",
|
||||||
|
"callcodecallcodecall_110.json",
|
||||||
|
"callcallcodecall_010.json",
|
||||||
|
"callcodecallcallcode_101.json"
|
||||||
]
|
]
|
||||||
result = name in allowedFailingGeneralStateTests
|
result = name in allowedFailingGeneralStateTests
|
||||||
|
|
Loading…
Reference in New Issue