mirror of
https://github.com/status-im/nimbus-eth1.git
synced 2025-03-01 12:20:49 +00:00
* Use simpler schema when writing transactions, receipts, and withdrawals Using MPT not only slow but also take up more spaces than needed. Aristo will remove older tries and only keep the last block tries. Using simpler schema will avoid those problems. * Rename getTransaction to getTransactionByIndex
47 lines
1.5 KiB
Nim
47 lines
1.5 KiB
Nim
# Nimbus
|
|
# Copyright (c) 2020-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/strutils,
|
|
json, stew/byteutils,
|
|
results,
|
|
../nimbus/db/[core_db, storage_types], eth/[rlp, common],
|
|
../nimbus/tracer
|
|
|
|
proc generatePrestate*(nimbus, geth: JsonNode, blockNumber: BlockNumber, parent: BlockHeader, blk: EthBlock) =
|
|
template header: BlockHeader = blk.header
|
|
let
|
|
state = nimbus["state"]
|
|
headerHash = rlpHash(header)
|
|
chainDB = newCoreDbRef(DefaultDbMemory)
|
|
kvt = chainDB.newKvt()
|
|
|
|
discard chainDB.setHead(parent, true)
|
|
chainDB.persistTransactions(blockNumber, header.txRoot, blk.transactions)
|
|
discard chainDB.persistUncles(blk.uncles)
|
|
|
|
kvt.put(genericHashKey(headerHash).toOpenArray, rlp.encode(header)).isOkOr:
|
|
raiseAssert "generatePrestate(): put() failed " & $$error
|
|
chainDB.addBlockNumberToHashLookup(header.number, headerHash)
|
|
|
|
for k, v in state:
|
|
let key = hexToSeqByte(k)
|
|
let value = hexToSeqByte(v.getStr())
|
|
kvt.put(key, value).isOkOr:
|
|
raiseAssert "generatePrestate(): put() (loop) failed " & $$error
|
|
|
|
var metaData = %{
|
|
"blockNumber": %blockNumber.toHex,
|
|
"geth": geth
|
|
}
|
|
|
|
metaData.dumpMemoryDB(chainDB)
|
|
writeFile("block" & $blockNumber & ".json", metaData.pretty())
|