mirror of
https://github.com/status-im/nimbus-eth1.git
synced 2025-01-13 13:55:45 +00:00
dbe3393f5c
* 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
106 lines
3.1 KiB
Nim
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)
|