nimbus-eth1/fluffy/tools/blockwalk.nim
Kim De Mey dbe3393f5c
Fix eth/common & web3 related deprecation warnings for fluffy (#2698)
* Fix eth/common & web3 related deprecation warnings for fluffy

This commit uses the new types in the new eth/common/ structure
to remove deprecation warnings.

It is however more than just a mass replace as also all places
where eth/common or eth/common/eth_types or eth/common/eth_types_rlp
got imported have been revised and adjusted to a better per submodule
based import.

There are still a bunch of toMDigest deprecation warnings but that
convertor is not needed for fluffy code anymore so in theory it
should not be used (bug?). It seems to still get imported via export
leaks ffrom imported nimbus code I think.

* Address review comments

* Remove two more unused eth/common imports
2024-10-04 23:21:26 +02:00

106 lines
3.1 KiB
Nim

# Nimbus
# Copyright (c) 2022-2024 Status Research & Development GmbH
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at https://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at https://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
# Testing tool to verify that a specific range of blocks can be fetched from
# the Portal network.
{.push raises: [].}
import
std/strutils,
confutils,
chronicles,
chronicles/topics_registry,
stew/byteutils,
web3/primitives,
../rpc/eth_rpc_client
type BlockWalkConf* = object
logLevel* {.
defaultValue: LogLevel.INFO,
defaultValueDesc: $LogLevel.INFO,
desc: "Sets the log level",
name: "log-level"
.}: LogLevel
rpcAddress* {.
desc: "Address of the JSON-RPC service",
defaultValue: "127.0.0.1",
name: "rpc-address"
.}: string
rpcPort* {.
defaultValue: 8545, desc: "Port of the JSON-RPC service", name: "rpc-port"
.}: uint16
blockHash* {.
desc: "The block hash from where to start walking the blocks backwards",
name: "block-hash"
.}: Hash32
proc parseCmdArg*(T: type Hash32, p: string): T {.raises: [ValueError].} =
Hash32.fromHex(p)
proc completeCmdArg*(T: type Hash32, val: string): seq[string] =
return @[]
proc walkBlocks(client: RpcClient, startHash: Hash32) {.async: (raises: []).} =
var parentHash = startHash
var blockNumber: Quantity
# Should be 0x0, but block 0 does not exist in the json data file
while blockNumber != Quantity(0x1):
let parentBlockOpt =
try:
await client.eth_getBlockByHash(parentHash, false)
except RpcPostError as e:
# RpcPostError when for example timing out on the request. Could retry
# in this case.
fatal "Error occured on JSON-RPC request", error = e.msg
quit 1
except CatchableError as e:
fatal "Error occured on JSON-RPC request", error = e.msg
quit 1
# Using the http connection re-use seems to slow down these sequentual
# requests considerably. Force a new connection setup by doing a close after
# each request.
try:
await client.close()
except CatchableError as e:
fatal "Error closing RPC client connection", error = e.msg
quit 1
if parentBlockOpt.isNone():
fatal "Failed getting parent block", hash = parentHash
quit 1
let parentBlock = parentBlockOpt.get()
blockNumber = parentBlock.number
parentHash = parentBlock.parentHash
echo "Block " & $distinctBase(blockNumber) & ": " & $parentBlock.hash
proc run(config: BlockWalkConf) {.async: (raises: []).} =
let client = newRpcHttpClient()
try:
await client.connect(config.rpcAddress, Port(config.rpcPort), false)
except CatchableError as e:
fatal "Error connecting to JSON-RPC service", error = e.msg
quit 1
await walkBlocks(client, config.blockHash)
when isMainModule:
{.pop.}
let config = BlockWalkConf.load()
{.push raises: [].}
setLogLevel(config.logLevel)
waitFor run(config)