nimbus-eth1/hive_integration/nodocker/consensus/extract_consensus_data.nim
pmmiranda 411a3cadfa
Renamed 'nimbus' directory and its references to 'execution_chain' (#3052)
* renamed nimbus folder to execution_chain

* Renamed "nimbus" references to "execution_chain"

* fixed wrongly changed http reference

* delete snap types file given that it was deleted before this PR merge

* missing 'execution_chain' replacement

---------

Co-authored-by: pmmiranda <pedro.miranda@nimbus.team>
2025-02-11 22:28:42 +00:00

64 lines
1.6 KiB
Nim

# Nimbus
# Copyright (c) 2021-2025 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,
../../../execution_chain/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