London: fix test_blockchain_json and test_generalstate_json

new London HF requires update to test code
This commit is contained in:
jangko 2021-06-30 20:41:29 +07:00
parent 697b38b844
commit d47be9047f
No known key found for this signature in database
GPG Key ID: 31702AE10541E6B9
4 changed files with 49 additions and 14 deletions

View File

@ -35,12 +35,6 @@ type
proc fromJson*(n: JsonNode, name: string, x: var SomeData) = proc fromJson*(n: JsonNode, name: string, x: var SomeData) =
hexToByteArray(n[name].getStr(), x) 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) doAssert(x.prefixHex == toLowerAscii(n[name].getStr()), name)
proc fromJson*(n: JsonNode, name: string, x: var Hash256) = 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) x = initTime(hexToInt(n[name].getStr(), int64), 0)
doAssert(x.toUnix.prefixHex == toLowerAscii(n[name].getStr()), name) 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 = proc parseBlockHeader*(n: JsonNode): BlockHeader =
n.fromJson "parentHash", result.parentHash n.fromJson "parentHash", result.parentHash
n.fromJson "sha3Uncles", result.ommersHash n.fromJson "sha3Uncles", result.ommersHash
@ -79,6 +79,7 @@ proc parseBlockHeader*(n: JsonNode): BlockHeader =
n.fromJson "extraData", result.extraData n.fromJson "extraData", result.extraData
n.fromJson "mixHash", result.mixDigest n.fromJson "mixHash", result.mixDigest
n.fromJson "nonce", result.nonce n.fromJson "nonce", result.nonce
n.fromJson "baseFeePerGas", result.fee
proc parseTransaction*(n: JsonNode): Transaction = proc parseTransaction*(n: JsonNode): Transaction =
var tx = Transaction(txType: TxLegacy) var tx = Transaction(txType: TxLegacy)

View File

@ -76,7 +76,7 @@ func normalizeBlockHeader(node: JsonNode): JsonNode =
of "receiptTrie": node["receiptsRoot"] = v of "receiptTrie": node["receiptsRoot"] = v
of "transactionsTrie": node["transactionsRoot"] = v of "transactionsTrie": node["transactionsRoot"] = v
of "number", "difficulty", "gasUsed", of "number", "difficulty", "gasUsed",
"gasLimit", "timestamp": "gasLimit", "timestamp", "baseFeePerGas":
node[k] = normalizeNumber(v) node[k] = normalizeNumber(v)
of "extraData": of "extraData":
node[k] = normalizeData(v) node[k] = normalizeData(v)
@ -102,8 +102,14 @@ proc parseBlocks(blocks: JsonNode): seq[TestBlock] =
of "transactions", "uncleHeaders", of "transactions", "uncleHeaders",
"blocknumber", "chainname", "chainnetwork": "blocknumber", "chainname", "chainnetwork":
discard 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: else:
doAssert("expectException" in key) doAssert("expectException" in key, key)
t.hasException = true t.hasException = true
result.add t result.add t
@ -139,6 +145,7 @@ func vmConfiguration(network: string, c: var ChainConfig) =
c.istanbulBlock = number[FkIstanbul] c.istanbulBlock = number[FkIstanbul]
c.muirGlacierBlock = number[FkBerlin] c.muirGlacierBlock = number[FkBerlin]
c.berlinBlock = number[FkBerlin] c.berlinBlock = number[FkBerlin]
c.londonBlock = number[FkLondon]
case network case network
of "EIP150": of "EIP150":
@ -172,6 +179,10 @@ func vmConfiguration(network: string, c: var ChainConfig) =
c.assignNumber(FkIstanbul, Zero) c.assignNumber(FkIstanbul, Zero)
of "Berlin": of "Berlin":
c.assignNumber(FkBerlin, Zero) c.assignNumber(FkBerlin, Zero)
of "London":
c.assignNumber(FkLondon, Zero)
of "BerlinToLondonAt5":
c.assignNumber(FkLondon, Five)
else: else:
raise newException(ValueError, "unsupported network " & network) raise newException(ValueError, "unsupported network " & network)
@ -224,7 +235,8 @@ proc importBlock(tester: var Tester, chainDB: BaseChainDB,
preminedBlock.header.coinbase, preminedBlock.header.coinbase,
some(preminedBlock.header.timestamp), some(preminedBlock.header.timestamp),
some(preminedBlock.header.gasLimit), some(preminedBlock.header.gasLimit),
@[] @[],
preminedBlock.header.fee
) )
deepCopy(result, preminedBlock) deepCopy(result, preminedBlock)

View File

@ -157,6 +157,9 @@ proc testFixture(fixtures: JsonNode, testStatusIMPL: var TestStatus,
stateRoot: emptyRlpHash stateRoot: emptyRlpHash
) )
if "currentBaseFee" in fenv:
tester.header.baseFee = fromHex(UInt256, fenv{"currentBaseFee"}.getStr)
let specifyIndex = getConfiguration().index let specifyIndex = getConfiguration().index
tester.trace = trace tester.trace = trace
tester.debugMode = debugMode tester.debugMode = debugMode

View File

@ -29,7 +29,8 @@ const
FkConstantinople: "Constantinople", FkConstantinople: "Constantinople",
FkPetersburg: "ConstantinopleFix", FkPetersburg: "ConstantinopleFix",
FkIstanbul: "Istanbul", FkIstanbul: "Istanbul",
FkBerlin: "Berlin" FkBerlin: "Berlin",
FkLondon: "London"
}.toTable }.toTable
supportedForks* = { supportedForks* = {
@ -41,7 +42,8 @@ const
FkConstantinople, FkConstantinople,
FkPetersburg, FkPetersburg,
FkIstanbul, FkIstanbul,
FkBerlin} FkBerlin,
FkLondon}
nameToFork* = revmap(forkNames) nameToFork* = revmap(forkNames)
@ -199,8 +201,8 @@ proc parseAccessList(n: JsonNode): AccessList =
result.add ap result.add ap
proc getFixtureTransaction*(j: JsonNode, dataIndex, gasIndex, valueIndex: int): Transaction = proc getFixtureTransaction*(j: JsonNode, dataIndex, gasIndex, valueIndex: int): Transaction =
let nonce = j["nonce"].getHexadecimalInt.AccountNonce let dynamicFeeTx = "gasPrice" notin j
let gasPrice = j["gasPrice"].getHexadecimalInt let nonce = j["nonce"].getHexadecimalInt.AccountNonce
let gasLimit = j["gasLimit"][gasIndex].getHexadecimalInt let gasLimit = j["gasLimit"][gasIndex].getHexadecimalInt
var toAddr: Option[EthAddress] var toAddr: Option[EthAddress]
@ -223,7 +225,24 @@ proc getFixtureTransaction*(j: JsonNode, dataIndex, gasIndex, valueIndex: int):
var secretKey = j["secretKey"].getStr var secretKey = j["secretKey"].getStr
removePrefix(secretKey, "0x") removePrefix(secretKey, "0x")
let privateKey = PrivateKey.fromHex(secretKey).tryGet() 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"): if j.hasKey("accessLists"):
let accList = j["accessLists"][dataIndex] let accList = j["accessLists"][dataIndex]
var tx = Transaction( var tx = Transaction(