Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Regression - gas consumption of addmod1_overflow2.json and mulmod1_overflow.json #50

Closed
mratsim opened this issue Jun 13, 2018 · 0 comments

Comments

@mratsim
Copy link
Contributor

mratsim commented Jun 13, 2018

After #49, both tests are now failing due to the SSTORE which has a consumeGas 20000 and refundGas 15000 part.

Logs before the PR

vmArithmeticTestaddmod1_overflow2.json
1 PUSH1 0x05
3 PUSH1 0x00
5 PUSH1 0x01
7 PUSH1 0x00
8 SUB
9 ADDMOD
11 PUSH1 0x00
12 SSTORE
-1 STOP
#vm.computation.BaseComputation: COMPUTATION STARTING: gas: 10000 | from: cd1722f2947def4cf144679da39c4c32bdc35681 | to: 0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6 | value: 1000000000000000000 | depth: 0 | static: n
#vm.computation.BaseComputation: OPCODE: 0x60 (PUSH1) | pc: 0
#gas: GAS CONSUMPTION: 10000 - 3 -> 9997 (PUSH1)
#vm.computation.BaseComputation: Stack:
  5


#vm.computation.BaseComputation: OPCODE: 0x60 (PUSH1) | pc: 2
#gas: GAS CONSUMPTION: 9997 - 3 -> 9994 (PUSH1)
#vm.computation.BaseComputation: Stack:
  5
  0


#vm.computation.BaseComputation: OPCODE: 0x60 (PUSH1) | pc: 4
#gas: GAS CONSUMPTION: 9994 - 3 -> 9991 (PUSH1)
#vm.computation.BaseComputation: Stack:
  5
  0
  1


#vm.computation.BaseComputation: OPCODE: 0x60 (PUSH1) | pc: 6
#gas: GAS CONSUMPTION: 9991 - 3 -> 9988 (PUSH1)
#vm.computation.BaseComputation: Stack:
  5
  0
  1
  0


#vm.computation.BaseComputation: OPCODE: 0x03 (SUB) | pc: 8
#gas: GAS CONSUMPTION: 9988 - 3 -> 9985 (SUB)
#vm.computation.BaseComputation: Stack:
  5
  0
  115792089237316195423570985008687907853269984665640564039457584007913129639935


#vm.computation.BaseComputation: OPCODE: 0x08 (ADDMOD) | pc: 9
#gas: GAS CONSUMPTION: 9985 - 8 -> 9977 (ADDMOD)
#vm.computation.BaseComputation: Stack:
  0


#vm.computation.BaseComputation: OPCODE: 0x60 (PUSH1) | pc: 10
#gas: GAS CONSUMPTION: 9977 - 3 -> 9974 (PUSH1)
#vm.computation.BaseComputation: Stack:
  0
  0


#vm.computation.BaseComputation: OPCODE: 0x55 (SSTORE) | pc: 12
#gas: GAS CONSUMPTION: 9974 - 0 -> 9974 (SSTORE)
#gas: GAS CONSUMPTION: 9974 - 5000 -> 4974 (SSTORE: [15, 87, 46, 82, 149, 197, 127, 21, 136, 111, 155, 38, 62, 47, 109, 45, 108, 123, 94, 198][slot] -> 0 (0))
#vm.computation.BaseComputation: Stack:



#vm.computation.BaseComputation: COMPUTATION SUCCESS: from: cd1722f2947def4cf144679da39c4c32bdc35681 | to: 0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6 | value: 1000000000000000000 | depth: 0 | static: n | gas-used: 5026 | gas-remaining: 4974
  [OK] tests/fixtures/VMTests/vmArithmeticTest/addmod1_overflow2.json

And

vmArithmeticTestmulmod1_overflow.json
1 PUSH1 0x05
3 PUSH1 0x02
5 PUSH1 0x01
7 PUSH1 0x00
8 SUB
9 MULMOD
11 PUSH1 0x00
12 SSTORE
-1 STOP
#vm.computation.BaseComputation: COMPUTATION STARTING: gas: 10000 | from: cd1722f2947def4cf144679da39c4c32bdc35681 | to: 0f572e5295c57f15886f9b263e2f6d2d6c7b5e
c6 | value: 1000000000000000000 | depth: 0 | static: n
#vm.computation.BaseComputation: OPCODE: 0x60 (PUSH1) | pc: 0
#gas: GAS CONSUMPTION: 10000 - 3 -> 9997 (PUSH1)
#vm.computation.BaseComputation: Stack:
  5


#vm.computation.BaseComputation: OPCODE: 0x60 (PUSH1) | pc: 2
#gas: GAS CONSUMPTION: 9997 - 3 -> 9994 (PUSH1)
#vm.computation.BaseComputation: Stack:
  5
  2


#vm.computation.BaseComputation: OPCODE: 0x60 (PUSH1) | pc: 4
#gas: GAS CONSUMPTION: 9994 - 3 -> 9991 (PUSH1)
#vm.computation.BaseComputation: Stack:
  5
  2
  1


#vm.computation.BaseComputation: OPCODE: 0x60 (PUSH1) | pc: 6
#gas: GAS CONSUMPTION: 9991 - 3 -> 9988 (PUSH1)
#vm.computation.BaseComputation: Stack:
  5
  2
  1
  0


#vm.computation.BaseComputation: OPCODE: 0x03 (SUB) | pc: 8
#gas: GAS CONSUMPTION: 9988 - 3 -> 9985 (SUB)
#vm.computation.BaseComputation: Stack:
  5
  2
  115792089237316195423570985008687907853269984665640564039457584007913129639935


#vm.computation.BaseComputation: OPCODE: 0x09 (MULMOD) | pc: 9
#gas: GAS CONSUMPTION: 9985 - 8 -> 9977 (MULMOD)
#vm.computation.BaseComputation: Stack:
  0


#vm.computation.BaseComputation: OPCODE: 0x60 (PUSH1) | pc: 10
#gas: GAS CONSUMPTION: 9977 - 3 -> 9974 (PUSH1)
#vm.computation.BaseComputation: Stack:
  0
  0


#vm.computation.BaseComputation: OPCODE: 0x55 (SSTORE) | pc: 12
#gas: GAS CONSUMPTION: 9974 - 0 -> 9974 (SSTORE)
#gas: GAS CONSUMPTION: 9974 - 5000 -> 4974 (SSTORE: [15, 87, 46, 82, 149, 197, 127, 21, 136, 111, 155, 38, 62, 47, 109, 45, 108, 123, 94, 198][slot] -> 0 (0))
#vm.computation.BaseComputation: Stack:



#vm.computation.BaseComputation: COMPUTATION SUCCESS: from: cd1722f2947def4cf144679da39c4c32bdc35681 | to: 0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6 | value: 1000000000000000000 | depth: 0 | static: n | gas-used: 5026 | gas-remaining: 4974
  [OK] tests/fixtures/VMTests/vmArithmeticTest/mulmod1_overflow.json

Logs after the PR

vmArithmeticTestaddmod1_overflow2.json
1 Push1 0x05
3 Push1 0x00
5 Push1 0x01
7 Push1 0x00
8 Sub
9 Addmod
11 Push1 0x00
12 Sstore
-1 Stop
#vm.computation.BaseComputation: COMPUTATION STARTING: gas: 10000 | from: cd1722f2947def4cf144679da39c4c32bdc35681 | to: 0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6 | value: 1000000000000000000 | depth: 0 | static: n
#vm.computation.BaseComputation: OPCODE: 0x60 (Push1) | pc: 0
#gas: GAS CONSUMPTION: 10000 - 3 -> 9997 (Push1)
#vm.computation.BaseComputation: Stack:
  5


#vm.computation.BaseComputation: OPCODE: 0x60 (Push1) | pc: 2
#gas: GAS CONSUMPTION: 9997 - 3 -> 9994 (Push1)
#vm.computation.BaseComputation: Stack:
  5
  0


#vm.computation.BaseComputation: OPCODE: 0x60 (Push1) | pc: 4
#gas: GAS CONSUMPTION: 9994 - 3 -> 9991 (Push1)
#vm.computation.BaseComputation: Stack:
  5
  0
  1


#vm.computation.BaseComputation: OPCODE: 0x60 (Push1) | pc: 6
#gas: GAS CONSUMPTION: 9991 - 3 -> 9988 (Push1)
#vm.computation.BaseComputation: Stack:
  5
  0
  1
  0


#vm.computation.BaseComputation: OPCODE: 0x03 (Sub) | pc: 8
#gas: GAS CONSUMPTION: 9988 - 3 -> 9985 (Sub)
#vm.computation.BaseComputation: Stack:
  5
  0
  115792089237316195423570985008687907853269984665640564039457584007913129639935


#vm.computation.BaseComputation: OPCODE: 0x08 (Addmod) | pc: 9
#gas: GAS CONSUMPTION: 9985 - 8 -> 9977 (Addmod)
#vm.computation.BaseComputation: Stack:
  0


#vm.computation.BaseComputation: OPCODE: 0x60 (Push1) | pc: 10
#gas: GAS CONSUMPTION: 9977 - 3 -> 9974 (Push1)
#vm.computation.BaseComputation: Stack:
  0
  0


#vm.computation.BaseComputation: OPCODE: 0x55 (Sstore) | pc: 12
#vm.computation.BaseComputation: COMPUTATION ERROR: gas: 10000 | from: cd1722f2947def4cf144679da39c4c32bdc35681 | to: 0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6 | value: 1000000000000000000 | depth: 0 | static: n | error: Out of gas: Needed 20000 - Remaining 9974 - Reason: SSTORE: [15, 87, 46, 82, 149, 197, 127, 21, 136, 111, 155, 38, 62, 47, 109, 45, 108, 123, 94, 198][slot] -> 0 (0)
    test_vm_json.nim(70, 10): Check failed: not computation.isError
    computation.isError was true
Computation error: Out of gas: Needed 20000 - Remaining 9974 - Reason: SSTORE: [15, 87, 46, 82, 149, 197, 127, 21, 136, 111, 155, 38, 62, 47, 109, 45, 108, 123, 94, 198][slot] -> 0 (0)
    Remaining: 9974 - Expected: 4974
    test_vm_json.nim(91, 53): Check failed: actualGasRemaining == expectedGasRemaining or
    computation.code.hasSStore() and
    (actualGasRemaining > expectedGasRemaining and
    (actualGasRemaining - expectedGasRemaining) mod 15000 == 0 or
    expectedGasRemaining > actualGasRemaining and
    (expectedGasRemaining - actualGasRemaining) mod 15000 == 0)
  [FAILED] tests/fixtures/VMTests/vmArithmeticTest/addmod1_overflow2.json

And

vmArithmeticTestmulmod1_overflow.json
1 Push1 0x05
3 Push1 0x02
5 Push1 0x01
7 Push1 0x00
8 Sub
9 Mulmod
11 Push1 0x00
12 Sstore
-1 Stop
#vm.computation.BaseComputation: COMPUTATION STARTING: gas: 10000 | from: cd1722f2947def4cf144679da39c4c32bdc35681 | to: 0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6 | value: 1000000000000000000 |
depth: 0 | static: n
#vm.computation.BaseComputation: OPCODE: 0x60 (Push1) | pc: 0
#gas: GAS CONSUMPTION: 10000 - 3 -> 9997 (Push1)
#vm.computation.BaseComputation: Stack:
  5


#vm.computation.BaseComputation: OPCODE: 0x60 (Push1) | pc: 2
#gas: GAS CONSUMPTION: 9997 - 3 -> 9994 (Push1)
#vm.computation.BaseComputation: Stack:
  5
  2


#vm.computation.BaseComputation: OPCODE: 0x60 (Push1) | pc: 4
#gas: GAS CONSUMPTION: 9994 - 3 -> 9991 (Push1)
#vm.computation.BaseComputation: Stack:
  5
  2
  1


#vm.computation.BaseComputation: OPCODE: 0x60 (Push1) | pc: 6
#gas: GAS CONSUMPTION: 9991 - 3 -> 9988 (Push1)
#vm.computation.BaseComputation: Stack:
  5
  2
  1
  0


#vm.computation.BaseComputation: OPCODE: 0x03 (Sub) | pc: 8
#gas: GAS CONSUMPTION: 9988 - 3 -> 9985 (Sub)
#vm.computation.BaseComputation: Stack:
  5
  2
  115792089237316195423570985008687907853269984665640564039457584007913129639935


#vm.computation.BaseComputation: OPCODE: 0x09 (Mulmod) | pc: 9
#gas: GAS CONSUMPTION: 9985 - 8 -> 9977 (Mulmod)
#vm.computation.BaseComputation: Stack:
  0


#vm.computation.BaseComputation: OPCODE: 0x60 (Push1) | pc: 10
#gas: GAS CONSUMPTION: 9977 - 3 -> 9974 (Push1)
#vm.computation.BaseComputation: Stack:
  0
  0


#vm.computation.BaseComputation: OPCODE: 0x55 (Sstore) | pc: 12
#vm.computation.BaseComputation: COMPUTATION ERROR: gas: 10000 | from: cd1722f2947def4cf144679da39c4c32bdc35681 | to: 0f572e5295c57f15886f9b263e2f6d2d6c7b5ec6 | value: 1000000000000000000 | depth: 0 | static: n | error: Out of gas: Needed 20000 - Remaining 9974 - Reason: SSTORE: [15, 87, 46, 82, 149, 197, 127, 21, 136, 111, 155, 38, 62, 47, 109, 45, 108, 123, 94, 198][slot] -> 0 (0)
    test_vm_json.nim(70, 10): Check failed: not computation.isError
    computation.isError was true
Computation error: Out of gas: Needed 20000 - Remaining 9974 - Reason: SSTORE: [15, 87, 46, 82, 149, 197, 127, 21, 136, 111, 155, 38, 62, 47, 109, 45, 108, 123, 94, 198][slot] -> 0 (0)
    Remaining: 9974 - Expected: 4974
    test_vm_json.nim(91, 53): Check failed: actualGasRemaining == expectedGasRemaining or
    computation.code.hasSStore() and
    (actualGasRemaining > expectedGasRemaining and
    (actualGasRemaining - expectedGasRemaining) mod 15000 == 0 or
    expectedGasRemaining > actualGasRemaining and
    (expectedGasRemaining - actualGasRemaining) mod 15000 == 0)
  [FAILED] tests/fixtures/VMTests/vmArithmeticTest/mulmod1_overflow.json
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant