nimbus-eth1/tests/test_op_env.nim

334 lines
10 KiB
Nim

import
macro_assembler, unittest2, macros,
stew/byteutils, eth/common, ../nimbus/db/state_db,
../nimbus/db/db_chain
proc opEnvMain*() =
suite "Environmental Information Opcodes":
setup:
let (blockNumber, chainDB) = initDatabase()
assembler: # CODECOPY OP
title: "CODECOPY_1"
code:
PUSH1 "0x03" # size
PUSH1 "0x08" # copy start pos
PUSH1 "0x00" # mem start pos
CODECOPY
STOP
SLT
CALLVALUE
JUMP
memory: "0x1234560000000000000000000000000000000000000000000000000000000000"
# assertEquals(6, gas); ??
assembler: # CODECOPY OP
title: "CODECOPY_2"
code:
PUSH1 "0x5E" # size
PUSH1 "0x08" # copy start pos
PUSH1 "0x00" # mem start pos
CODECOPY
STOP
PUSH1 "0x00"
PUSH1 "0x5f"
SSTORE
PUSH1 "0x14"
PUSH1 "0x00"
SLOAD
PUSH1 "0x1e"
PUSH1 "0x20"
SLOAD
PUSH4 "0xabcddcba"
PUSH1 "0x40"
SLOAD
JUMPDEST
MLOAD
PUSH1 "0x20"
ADD
PUSH1 "0x0a"
MSTORE
SLOAD
MLOAD
PUSH1 "0x40"
ADD
PUSH1 "0x14"
MSTORE
SLOAD
MLOAD
PUSH1 "0x60"
ADD
PUSH1 "0x1e"
MSTORE
SLOAD
MLOAD
PUSH1 "0x80"
ADD
PUSH1 "0x28"
MSTORE
SLOAD
PUSH1 "0xa0"
MSTORE
SLOAD
PUSH1 "0x16"
PUSH1 "0x48"
PUSH1 "0x00"
CODECOPY
PUSH1 "0x16"
PUSH1 "0x00"
CALLCODE
PUSH1 "0x00"
PUSH1 "0x3f"
SSTORE
PUSH2 "0x03e7"
JUMP
PUSH1 "0x00"
SLOAD
PUSH1 "0x00"
MSTORE8
PUSH1 "0x20"
MUL
CALLDATALOAD
PUSH1 "0x20"
SLOAD
memory:
"0x6000605F556014600054601E60205463ABCDDCBA6040545B51602001600A5254"
"0x516040016014525451606001601E5254516080016028525460A0525460166048"
"0x60003960166000F26000603F556103E756600054600053602002356020540000"
#assertEquals(10, gas); ??
assembler: # CODECOPY OP
title: "CODECOPY_3"
# cost for that:
# 94 - data copied
# 95 - new bytes allocated
code:
Push1 "0x5E"
Push1 "0x08"
Push1 "0x00"
CodeCopy
STOP
"0x6000605f556014600054601e60205463abcddcba6040545b"
"0x51602001600a5254516040016014525451606001601e52545160800160285254"
"0x60a052546016604860003960166000f26000603f556103e75660005460005360"
"0x20023500"
memory:
"0x6000605F556014600054601E60205463ABCDDCBA6040545B51602001600A5254"
"0x516040016014525451606001601E5254516080016028525460A0525460166048"
"0x60003960166000F26000603F556103E756600054600053602002350000000000"
#assertEquals(10, program.getResult().getGasUsed());
assembler: # CODECOPY OP
title: "CODECOPY_4"
code:
Push1 "0x5E"
Push1 "0x07"
Push1 "0x00"
CodeCopy
STOP
"0x6000605f556014600054601e60205463abcddcba6040545b51"
"0x602001600a5254516040016014525451606001601e5254516080016028525460"
"0xa052546016604860003960166000f26000603f556103e756600054600053602002351234"
memory:
"0x006000605F556014600054601E60205463ABCDDCBA6040545B51602001600A52"
"0x54516040016014525451606001601E5254516080016028525460A05254601660"
"0x4860003960166000F26000603F556103E7566000546000536020023512340000"
#assertEquals(10, program.getResult().getGasUsed());
assembler: # CODECOPY OP
title: "CODECOPY_5"
code:
Push2 "0x1234"
Push1 "0x00"
Sload
Push2 "0x5566"
Push1 "0x20"
Sload
Push1 "0x70"
Push1 "0x00"
Push1 "0x20"
CodeCopy
STOP
"0x6000605f55601460"
"0x0054601e60205463abcddcba6040545b51602001600a525451604001"
"0x6014525451606001601e5254516080016028525460a0525460166048"
"0x60003960166000f26000603f556103e75660005460005360200235123400"
stack:
"0x1234"
"0x00"
"0x5566"
"0x00"
memory:
"0x0000000000000000000000000000000000000000000000000000000000000000"
"0x61123460005461556660205460706000602039006000605f556014600054601e"
"0x60205463abcddcba6040545b51602001600a5254516040016014525451606001"
"0x601e5254516080016028525460a052546016604860003960166000f26000603f"
"0x556103e756600054600053602002351200000000000000000000000000000000"
assembler: # CODECOPY OP mal
title: "CODECOPY_6"
code:
"0x605E6007396000605f556014600054601e60205463abcddcba604054"
"0x5b51602001600a5254516040016014525451606001601e5254516080"
"0x016028525460a052546016604860003960166000f26000603f556103"
"0xe756600054600053602002351234"
success: false
stack:
"0x5e"
"0x07"
suite "Environmental Information Opcodes 2":
setup:
let (blockNumber, chainDB) = initDatabase()
var acc: EthAddress
hexToByteArray("0xfbe0afcd7658ba86be41922059dd879c192d4c73", acc)
var
parent = chainDB.getBlockHeader(blockNumber - 1)
stateDB = newAccountStateDB(chainDB.db, parent.stateRoot, false)
code = hexToSeqByte("0x0102030405060708090A0B0C0D0E0F" &
"611234600054615566602054603E6000602073471FD3AD3E9EEADEEC4608B92D" &
"16CE6B500704CC3C6000605f556014600054601e60205463abcddcba6040545b" &
"51602001600a5254516040016014525451606001601e52545160800160285254" &
"60a052546016604860003960166000f26000603f556103e756600054600053602002351234")
stateDB.setCode(acc, code)
parent.stateRoot = stateDB.rootHash
chainDB.setHead(parent, true)
assembler: # EXTCODECOPY OP
title: "EXTCODECOPY_1"
code:
Push1 "0x04" # size
Push1 "0x07" # code pos
Push1 "0x00" # mem pos
Push20 "0xfbe0afcd7658ba86be41922059dd879c192d4c73"
ExtCodeCopy
STOP
Slt
CallValue
Jump
Stop
memory: "0x08090a0b00000000000000000000000000000000000000000000000000000000"
assembler: # EXTCODECOPY OP
title: "EXTCODECOPY_2"
code:
Push1 "0x3E"
Push1 "0x07"
Push1 "0x00"
Push20 "0xfbe0afcd7658ba86be41922059dd879c192d4c73"
ExtCodeCopy
STOP
"0x6000605f"
"0x556014600054601e60205463abcddcba6040545b51602001600a525451604001"
"0x6014525451606001601e5254516080016028525460a052546016604860003960"
"0x166000f26000603f556103e75660005460005360200235602054"
memory:
"0x08090a0b0c0d0e0f611234600054615566602054603e6000602073471fd3ad3e"
"0x9eeadeec4608b92d16ce6b500704cc3c6000605f556014600054601e60200000"
assembler: # EXTCODECOPY OP
title: "EXTCODECOPY_3"
code:
Push1 "0x5E"
Push1 "0x07"
Push1 "0x00"
Push20 "0xfbe0afcd7658ba86be41922059dd879c192d4c73"
ExtCodeCopy
STOP
"0x6000605f"
"0x556014600054601e60205463abcddcba6040545b51602001600a525451604001"
"0x6014525451606001601e5254516080016028525460a052546016604860003960"
"0x166000f26000603f556103e75660005460005360200235"
memory:
"0x08090a0b0c0d0e0f611234600054615566602054603e6000602073471fd3ad3e"
"0x9eeadeec4608b92d16ce6b500704cc3c6000605f556014600054601e60205463"
"0xabcddcba6040545b51602001600a5254516040016014525451606001601e0000"
assembler: # EXTCODECOPY OP
title: "EXTCODECOPY_4"
code:
Push2 "0x1234"
Push1 "0x00"
Sload
Push2 "0x5566"
Push1 "0x20"
Sload
Push1 "0x3E"
Push1 "0x00"
Push1 "0x20"
Push20 "0xfbe0afcd7658ba86be41922059dd879c192d4c73"
ExtCodeCopy
STOP
"0x6000605f556014600054601e60205463abcddcba6040545b"
"0x51602001600a5254516040016014525451606001601e52545160800160285254"
"0x60a052546016604860003960166000f26000603f556103e756600054600053602002351234"
stack:
"0x1234"
"0x00"
"0x5566"
"0x00"
memory:
"0x0000000000000000000000000000000000000000000000000000000000000000"
"0x0102030405060708090a0b0c0d0e0f611234600054615566602054603e600060"
"0x2073471fd3ad3e9eeadeec4608b92d16ce6b500704cc3c6000605f5560140000"
assembler: # EXTCODECOPY OP mal
title: "EXTCODECOPY_5"
code:
Push1 "0x5E"
Push1 "0x07"
Push20 "0x471FD3AD3E9EEADEEC4608B92D16CE6B500704CC"
ExtCodeCopy
success: false
stack:
"0x5E"
"0x07"
assembler: # CODESIZE OP
title: "CODESIZE_1"
code:
"0x385E60076000396000605f556014600054601e60205463abcddcba6040545b51"
"0x602001600a5254516040016014525451606001601e5254516080016028525460"
"0xa052546016604860003960166000f26000603f556103e75660005460005360200235"
stack:
"0x0000000000000000000000000000000000000000000000000000000000000062"
success: false
# 0x94 == 148 bytes
assembler: # EXTCODESIZE OP
title: "EXTCODESIZE_1"
code:
Push20 "0xfbe0afcd7658ba86be41922059dd879c192d4c73"
ExtCodeSize
STOP
"0x5E60076000396000605f"
"0x556014600054601e60205463abcddcba6040545b51602001600a525451604001"
"0x6014525451606001601e5254516080016028525460a052546016604860003960"
"0x166000f26000603f556103e75660005460005360200235"
stack: "0x94"
assembler: # EIP2929 EXTCODESIZE OP
title: "EIP2929 EXTCODESIZE_1"
code:
Push20 "0xfbe0afcd7658ba86be41922059dd879c192d4c73"
ExtCodeSize
STOP
stack: "0x94"
fork: berlin
gasused: 2603
assembler: # EIP2929 EXTCODEHASH OP
title: "EIP2929 EXTCODEHASH_1"
code:
Push20 "0xfbe0afcd7658ba86be41922059dd879c192d4c73"
ExtCodeHash
STOP
stack:
"0xc862129bffb73168481c6a51fd36afb8342887fbc5314c763ac731c732d7310c"
fork: berlin
gasused: 2603
when isMainModule:
opEnvMain()