fix DelegateCall gasCost, GST +6

This commit is contained in:
andri lim 2019-03-18 17:24:25 +07:00
parent a7c6531f08
commit 36fb75d042
No known key found for this signature in database
GPG Key ID: 31702AE10541E6B9
4 changed files with 24 additions and 34 deletions

View File

@ -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

View File

@ -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.} =

View File

@ -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)

View File

@ -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