From 0d53dfa8bcaaf57d0adb32322780aac733fb5032 Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Wed, 24 Jul 2019 15:44:36 +0100 Subject: [PATCH] instructions: add repricing from EIP-1884 --- lib/instructions/instruction_metrics.c | 6 +++--- test/unittests/test_instructions.cpp | 8 ++++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/instructions/instruction_metrics.c b/lib/instructions/instruction_metrics.c index 58347f3..3056d74 100644 --- a/lib/instructions/instruction_metrics.c +++ b/lib/instructions/instruction_metrics.c @@ -71,7 +71,7 @@ static struct evmc_instruction_metrics istanbul_metrics[256] = { /* = 0x2e */ {UNDEFINED, 0, 0}, /* = 0x2f */ {UNDEFINED, 0, 0}, /* ADDRESS = 0x30 */ {BASE, 0, 1}, - /* BALANCE = 0x31 */ {400, 1, 1}, + /* BALANCE = 0x31 */ {700, 1, 1}, /* ORIGIN = 0x32 */ {BASE, 0, 1}, /* CALLER = 0x33 */ {BASE, 0, 1}, /* CALLVALUE = 0x34 */ {BASE, 0, 1}, @@ -85,7 +85,7 @@ static struct evmc_instruction_metrics istanbul_metrics[256] = { /* EXTCODECOPY = 0x3c */ {700, 4, 0}, /* RETURNDATASIZE = 0x3d */ {BASE, 0, 1}, /* RETURNDATACOPY = 0x3e */ {VERYLOW, 3, 0}, - /* EXTCODEHASH = 0x3f */ {400, 1, 1}, + /* EXTCODEHASH = 0x3f */ {700, 1, 1}, /* BLOCKHASH = 0x40 */ {20, 1, 1}, /* COINBASE = 0x41 */ {BASE, 0, 1}, /* TIMESTAMP = 0x42 */ {BASE, 0, 1}, @@ -106,7 +106,7 @@ static struct evmc_instruction_metrics istanbul_metrics[256] = { /* MLOAD = 0x51 */ {VERYLOW, 1, 1}, /* MSTORE = 0x52 */ {VERYLOW, 2, 0}, /* MSTORE8 = 0x53 */ {VERYLOW, 2, 0}, - /* SLOAD = 0x54 */ {200, 1, 1}, + /* SLOAD = 0x54 */ {800, 1, 1}, /* SSTORE = 0x55 */ {0, 2, 0}, /* JUMP = 0x56 */ {MID, 1, 0}, /* JUMPI = 0x57 */ {HIGH, 2, 0}, diff --git a/test/unittests/test_instructions.cpp b/test/unittests/test_instructions.cpp index 23f390e..11b6c89 100644 --- a/test/unittests/test_instructions.cpp +++ b/test/unittests/test_instructions.cpp @@ -253,8 +253,11 @@ TEST(instructions, istanbul_hard_fork) { switch (op) { + case OP_BALANCE: + case OP_EXTCODEHASH: case OP_CHAINID: case OP_SELFBALANCE: + case OP_SLOAD: continue; default: EXPECT_EQ(i[op], p[op]) << op; @@ -276,6 +279,11 @@ TEST(instructions, istanbul_hard_fork) EXPECT_EQ(p[OP_SELFBALANCE].gas_cost, -1); EXPECT_EQ(in[OP_SELFBALANCE], std::string{"SELFBALANCE"}); EXPECT_TRUE(pn[OP_SELFBALANCE] == nullptr); + + // Repricings + EXPECT_EQ(i[OP_BALANCE].gas_cost, 700); + EXPECT_EQ(i[OP_EXTCODEHASH].gas_cost, 700); + EXPECT_EQ(i[OP_SLOAD].gas_cost, 800); } TEST(instructions, berlin_hard_fork)