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) =
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)

View File

@ -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)

View File

@ -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

View File

@ -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(