London: fix test_blockchain_json and test_generalstate_json
new London HF requires update to test code
This commit is contained in:
parent
697b38b844
commit
d47be9047f
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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(
|
||||||
|
|
Loading…
Reference in New Issue