nimbus-eth1/nimbus/beacon/api_handler/api_exchangeconf.nim
Jacek Sieka f3e3c6bbe0
init style for Hash256 (#2661)
* init style for Hash256

https://github.com/status-im/nim-eth/pull/733 updates `Hash256` to
become an array instead of an object - unfortunately, nim does not allow
constructing arrays with `name()`, so this PR changes it to `default`
which works with both.

* lint
2024-09-26 13:24:36 +02:00

76 lines
2.4 KiB
Nim

# Nimbus
# Copyright (c) 2023-2024 Status Research & Development GmbH
# Licensed under either of
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE))
# * MIT license ([LICENSE-MIT](LICENSE-MIT))
# at your option.
# This file may not be copied, modified, or distributed except according to
# those terms.
import
std/[strutils],
eth/common,
../web3_eth_conv,
../beacon_engine,
web3/execution_types,
chronicles
{.push gcsafe, raises:[CatchableError].}
proc exchangeConf*(ben: BeaconEngineRef,
conf: TransitionConfigurationV1):
TransitionConfigurationV1 =
trace "Engine API request received",
meth = "exchangeTransitionConfigurationV1",
ttd = conf.terminalTotalDifficulty,
number = uint64(conf.terminalBlockNumber),
blockHash = conf.terminalBlockHash
let
com = ben.com
db = com.db
ttd = com.ttd
if ttd.isNone:
raise newException(ValueError, "invalid ttd: EL (none) CL ($1)" % [
$conf.terminalTotalDifficulty])
if conf.terminalTotalDifficulty != ttd.get:
raise newException(ValueError, "invalid ttd: EL ($1) CL ($2)" % [
$ttd.get, $conf.terminalTotalDifficulty])
let
terminalBlockNumber = common.BlockNumber conf.terminalBlockNumber
terminalBlockHash = ethHash conf.terminalBlockHash
if terminalBlockHash != default(common.Hash256):
var headerHash: common.Hash256
if not db.getBlockHash(terminalBlockNumber, headerHash):
raise newException(ValueError, "cannot get terminal block hash, number $1" %
[$terminalBlockNumber])
if terminalBlockHash != headerHash:
raise newException(ValueError, "invalid terminal block hash, got $1 want $2" %
[$terminalBlockHash, $headerHash])
var header: common.BlockHeader
if not db.getBlockHeader(headerHash, header):
raise newException(ValueError, "cannot get terminal block header, hash $1" %
[$terminalBlockHash])
return TransitionConfigurationV1(
terminalTotalDifficulty: ttd.get,
terminalBlockHash : w3Hash headerHash,
terminalBlockNumber : w3Qty header.number
)
if terminalBlockNumber != 0'u64:
raise newException(ValueError, "invalid terminal block number: $1" % [
$terminalBlockNumber])
if terminalBlockHash != default(common.Hash256):
raise newException(ValueError, "invalid terminal block hash, no terminal header set")
TransitionConfigurationV1(terminalTotalDifficulty: ttd.get)