nimbus-eth1/hive_integration/nodocker/consensus/extract_consensus_data.nim

64 lines
1.6 KiB
Nim

# Nimbus
# Copyright (c) 2021-2024 Status Research & Development GmbH
# Licensed under either of
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
# http://www.apache.org/licenses/LICENSE-2.0)
# * MIT license ([LICENSE-MIT](LICENSE-MIT) or
# http://opensource.org/licenses/MIT)
# at your option. This file may not be copied, modified, or distributed except
# according to those terms.
import
std/[json],
stew/byteutils,
../../../tools/common/helpers,
../../../nimbus/common/chain_config
type
Blob = seq[byte]
ChainData* = object
params*: NetworkParams
lastBlockHash*: string
blocksRlp*: seq[Blob]
const genFields = [
"nonce",
"timestamp",
"extraData",
"gasLimit",
"difficulty",
"mixHash",
"coinbase"
]
proc parseChainConfig(n: JsonNode): ChainConfig =
getChainConfig(n["network"].getStr)
proc optionalField(n: string, genesis, gen: JsonNode) =
if n in gen:
genesis[n] = gen[n]
proc parseGenesis(n: JsonNode): Genesis =
let gen = n["genesisBlockHeader"]
var genesis = newJObject()
for x in genFields:
genesis[x] = gen[x]
optionalField("baseFeePerGas", genesis, gen)
optionalField("blobGasUsed", genesis, gen)
optionalField("excessBlobGas", genesis, gen)
genesis["alloc"] = n["pre"]
parseGenesis($genesis)
proc extractChainData*(n: JsonNode): ChainData =
result.params = NetworkParams(
genesis: parseGenesis(n),
config : parseChainConfig(n))
result.lastBlockHash = n["lastblockhash"].getStr
let blks = n["blocks"]
for x in blks:
let hex = x["rlp"].getStr
let bytes = hexToSeqByte(hex)
result.blocksRlp.add bytes