add prestate.nim

This commit is contained in:
andri lim 2019-01-09 15:46:19 +07:00 committed by zah
parent 8978d1fcaa
commit 101c17d126
1 changed files with 44 additions and 0 deletions

44
premix/prestate.nim Normal file
View File

@ -0,0 +1,44 @@
import
json, downloader, stint, eth_trie/db, byteutils,
../nimbus/db/[db_chain, storage_types], rlp, eth_common,
../nimbus/p2p/chain, ../nimbus/tracer
proc generatePrestate*(nimbus: JsonNode) =
let
state = nimbus["state"]
blockNumber = 49439.u256
parentNumber = blockNumber - 1.u256
parentBlock = requestBlock(parentNumber)
thisBlock = requestBlock(blockNumber)
headerHash = rlpHash(thisBlock.header)
var
memoryDB = newMemoryDB()
chainDB = newBaseChainDB(memoryDB, false)
chainDB.setHead(parentBlock.header, true)
chainDB.persistTransactions(blockNumber, thisBlock.body.transactions)
discard chainDB.persistUncles(thisBlock.body.uncles)
memoryDB.put(genericHashKey(headerHash).toOpenArray, rlp.encode(thisBlock.header))
chainDB.addBlockNumberToHashLookup(thisBlock.header)
for k, v in state:
let key = hexToSeqByte(k)
let value = hexToSeqByte(v.getStr())
memoryDB.put(key, value)
let
chain = newChain(chainDB)
parent = chainDB.getBlockHeader(parentNumber)
header = chainDB.getBlockHeader(blockNumber)
body = chainDB.getBlockBody(headerHash)
headers = @[header]
bodies = @[body]
var metaData = %{
"blockNumber": %blockNumber.toHex
}
metaData.dumpMemoryDB(memoryDB)
writeFile("block" & $blockNumber & ".json", metaData.pretty())