From d47be9047f7e0cd52a1202a2f4ee23269dd15630 Mon Sep 17 00:00:00 2001 From: jangko Date: Wed, 30 Jun 2021 20:41:29 +0700 Subject: [PATCH] London: fix test_blockchain_json and test_generalstate_json new London HF requires update to test code --- premix/parser.nim | 13 +++++++------ tests/test_blockchain_json.nim | 18 +++++++++++++++--- tests/test_generalstate_json.nim | 3 +++ tests/test_helpers.nim | 29 ++++++++++++++++++++++++----- 4 files changed, 49 insertions(+), 14 deletions(-) diff --git a/premix/parser.nim b/premix/parser.nim index 30b6f0d4c..982a93583 100644 --- a/premix/parser.nim +++ b/premix/parser.nim @@ -35,12 +35,6 @@ type proc fromJson*(n: JsonNode, name: string, x: var SomeData) = hexToByteArray(n[name].getStr(), x) - if x.prefixHex != toLowerAscii(n[name].getStr()): - debugEcho "name: ", name - debugEcho "A: ", x.prefixHex - debugEcho "B: ", toLowerAscii(n[name].getStr()) - quit(1) - doAssert(x.prefixHex == toLowerAscii(n[name].getStr()), name) proc fromJson*(n: JsonNode, name: string, x: var Hash256) = @@ -63,6 +57,12 @@ proc fromJson*(n: JsonNode, name: string, x: var EthTime) = x = initTime(hexToInt(n[name].getStr(), int64), 0) doAssert(x.toUnix.prefixHex == toLowerAscii(n[name].getStr()), name) +proc fromJson*[T](n: JsonNode, name: string, x: var Option[T]) = + if name in n: + var val: T + n.fromJson(name, val) + x = some(val) + proc parseBlockHeader*(n: JsonNode): BlockHeader = n.fromJson "parentHash", result.parentHash n.fromJson "sha3Uncles", result.ommersHash @@ -79,6 +79,7 @@ proc parseBlockHeader*(n: JsonNode): BlockHeader = n.fromJson "extraData", result.extraData n.fromJson "mixHash", result.mixDigest n.fromJson "nonce", result.nonce + n.fromJson "baseFeePerGas", result.fee proc parseTransaction*(n: JsonNode): Transaction = var tx = Transaction(txType: TxLegacy) diff --git a/tests/test_blockchain_json.nim b/tests/test_blockchain_json.nim index cd25cb454..710202ab2 100644 --- a/tests/test_blockchain_json.nim +++ b/tests/test_blockchain_json.nim @@ -76,7 +76,7 @@ func normalizeBlockHeader(node: JsonNode): JsonNode = of "receiptTrie": node["receiptsRoot"] = v of "transactionsTrie": node["transactionsRoot"] = v of "number", "difficulty", "gasUsed", - "gasLimit", "timestamp": + "gasLimit", "timestamp", "baseFeePerGas": node[k] = normalizeNumber(v) of "extraData": node[k] = normalizeData(v) @@ -102,8 +102,14 @@ proc parseBlocks(blocks: JsonNode): seq[TestBlock] = of "transactions", "uncleHeaders", "blocknumber", "chainname", "chainnetwork": discard + of "transactionSequence": + var noError = true + for tx in value: + let valid = tx["valid"].getStr == "true" + noError = noError and valid + doAssert(noError == false, "NOT A VALID TEST CASE") else: - doAssert("expectException" in key) + doAssert("expectException" in key, key) t.hasException = true result.add t @@ -139,6 +145,7 @@ func vmConfiguration(network: string, c: var ChainConfig) = c.istanbulBlock = number[FkIstanbul] c.muirGlacierBlock = number[FkBerlin] c.berlinBlock = number[FkBerlin] + c.londonBlock = number[FkLondon] case network of "EIP150": @@ -172,6 +179,10 @@ func vmConfiguration(network: string, c: var ChainConfig) = c.assignNumber(FkIstanbul, Zero) of "Berlin": c.assignNumber(FkBerlin, Zero) + of "London": + c.assignNumber(FkLondon, Zero) + of "BerlinToLondonAt5": + c.assignNumber(FkLondon, Five) else: raise newException(ValueError, "unsupported network " & network) @@ -224,7 +235,8 @@ proc importBlock(tester: var Tester, chainDB: BaseChainDB, preminedBlock.header.coinbase, some(preminedBlock.header.timestamp), some(preminedBlock.header.gasLimit), - @[] + @[], + preminedBlock.header.fee ) deepCopy(result, preminedBlock) diff --git a/tests/test_generalstate_json.nim b/tests/test_generalstate_json.nim index cf7472b62..98ec31fdf 100644 --- a/tests/test_generalstate_json.nim +++ b/tests/test_generalstate_json.nim @@ -157,6 +157,9 @@ proc testFixture(fixtures: JsonNode, testStatusIMPL: var TestStatus, stateRoot: emptyRlpHash ) + if "currentBaseFee" in fenv: + tester.header.baseFee = fromHex(UInt256, fenv{"currentBaseFee"}.getStr) + let specifyIndex = getConfiguration().index tester.trace = trace tester.debugMode = debugMode diff --git a/tests/test_helpers.nim b/tests/test_helpers.nim index 7d6f8d3c2..7102c6d6b 100644 --- a/tests/test_helpers.nim +++ b/tests/test_helpers.nim @@ -29,7 +29,8 @@ const FkConstantinople: "Constantinople", FkPetersburg: "ConstantinopleFix", FkIstanbul: "Istanbul", - FkBerlin: "Berlin" + FkBerlin: "Berlin", + FkLondon: "London" }.toTable supportedForks* = { @@ -41,7 +42,8 @@ const FkConstantinople, FkPetersburg, FkIstanbul, - FkBerlin} + FkBerlin, + FkLondon} nameToFork* = revmap(forkNames) @@ -199,8 +201,8 @@ proc parseAccessList(n: JsonNode): AccessList = result.add ap proc getFixtureTransaction*(j: JsonNode, dataIndex, gasIndex, valueIndex: int): Transaction = - let nonce = j["nonce"].getHexadecimalInt.AccountNonce - let gasPrice = j["gasPrice"].getHexadecimalInt + let dynamicFeeTx = "gasPrice" notin j + let nonce = j["nonce"].getHexadecimalInt.AccountNonce let gasLimit = j["gasLimit"][gasIndex].getHexadecimalInt var toAddr: Option[EthAddress] @@ -223,7 +225,24 @@ proc getFixtureTransaction*(j: JsonNode, dataIndex, gasIndex, valueIndex: int): var secretKey = j["secretKey"].getStr removePrefix(secretKey, "0x") let privateKey = PrivateKey.fromHex(secretKey).tryGet() - + + if dynamicFeeTx: + let accList = j["accessLists"][dataIndex] + var tx = Transaction( + txType: TxEip1559, + nonce: nonce, + maxFee: j["maxFeePerGas"].getHexadecimalInt, + maxPriorityFee: j["maxPriorityFeePerGas"].getHexadecimalInt, + gasLimit: gasLimit, + to: toAddr, + value: value, + payload: payload, + accessList: parseAccessList(accList), + chainId: ChainId(1) + ) + return signTransaction(tx, privateKey, ChainId(1), false) + + let gasPrice = j["gasPrice"].getHexadecimalInt if j.hasKey("accessLists"): let accList = j["accessLists"][dataIndex] var tx = Transaction(