From f4cacdfc6aa0380208876f11004569412fad6a77 Mon Sep 17 00:00:00 2001 From: KonradStaniec Date: Fri, 2 Dec 2022 16:09:31 +0100 Subject: [PATCH] bump nimbus-eth2 (#1345) * bump nimbus-eth2 --- .../beacon_light_client.nim | 4 +- .../beacon_light_client_manager.nim | 12 ++-- nimbus_verified_proxy/block_cache.nim | 17 +++--- .../nimbus_verified_proxy.nim | 4 +- nimbus_verified_proxy/rpc/rpc_eth_api.nim | 4 +- nimbus_verified_proxy/rpc/rpc_utils.nim | 61 ++++++++++++++++++- vendor/nim-chronos | 2 +- vendor/nim-web3 | 2 +- vendor/nimbus-eth2 | 2 +- 9 files changed, 83 insertions(+), 25 deletions(-) diff --git a/fluffy/network/beacon_light_client/beacon_light_client.nim b/fluffy/network/beacon_light_client/beacon_light_client.nim index e23500e28..ea01d8bf1 100644 --- a/fluffy/network/beacon_light_client/beacon_light_client.nim +++ b/fluffy/network/beacon_light_client/beacon_light_client.nim @@ -89,8 +89,8 @@ proc new*( onStoreInitialized, onFinalizedHeader, onOptimisticHeader) proc lightClientVerifier(obj: SomeLightClientObject): - Future[Result[void, BlockError]] = - let resfut = newFuture[Result[void, BlockError]]("lightClientVerifier") + Future[Result[void, VerifierError]] = + let resfut = newFuture[Result[void, VerifierError]]("lightClientVerifier") lightClient.processor[].addObject(MsgSource.gossip, obj, resfut) resfut diff --git a/fluffy/network/beacon_light_client/beacon_light_client_manager.nim b/fluffy/network/beacon_light_client/beacon_light_client_manager.nim index f8de6c548..de8de2855 100644 --- a/fluffy/network/beacon_light_client/beacon_light_client_manager.nim +++ b/fluffy/network/beacon_light_client/beacon_light_client_manager.nim @@ -16,7 +16,7 @@ import beacon_chain/beacon_clock, "."/[light_client_network, light_client_content] -from beacon_chain/consensus_object_pools/block_pools_types import BlockError +from beacon_chain/consensus_object_pools/block_pools_types import VerifierError logScope: topics = "lcman" @@ -40,7 +40,7 @@ type Endpoint[Slot, altair.LightClientOptimisticUpdate] ValueVerifier[V] = - proc(v: V): Future[Result[void, BlockError]] {.gcsafe, raises: [Defect].} + proc(v: V): Future[Result[void, VerifierError]] {.gcsafe, raises: [Defect].} BootstrapVerifier* = ValueVerifier[altair.LightClientBootstrap] UpdateVerifier* = @@ -204,19 +204,19 @@ proc workerTask[E]( let res = await self.valueVerifier(E)(val) if res.isErr: case res.error - of BlockError.MissingParent: + of VerifierError.MissingParent: # Stop, requires different request to progress return didProgress - of BlockError.Duplicate: + of VerifierError.Duplicate: # Ignore, a concurrent request may have already fulfilled this when E.V is altair.LightClientBootstrap: didProgress = true else: discard - of BlockError.UnviableFork: + of VerifierError.UnviableFork: notice "Received value from an unviable fork", value = val.shortLog return didProgress - of BlockError.Invalid: + of VerifierError.Invalid: warn "Received invalid value", value = val.shortLog return didProgress else: diff --git a/nimbus_verified_proxy/block_cache.nim b/nimbus_verified_proxy/block_cache.nim index 9c49782e0..fd3e2d06e 100644 --- a/nimbus_verified_proxy/block_cache.nim +++ b/nimbus_verified_proxy/block_cache.nim @@ -13,7 +13,8 @@ else: import std/tables, web3/ethtypes, - stew/[results, keyed_queue] + stew/[results, keyed_queue], + ./rpc/rpc_utils ## Cache for payloads received through block gossip and validated by the @@ -22,7 +23,7 @@ import ## oldest payload is deleted first. type BlockCache* = ref object max: int - blocks: KeyedQueue[BlockHash, ExecutionPayloadV1] + blocks: KeyedQueue[BlockHash, ExecutionData] proc `==`(x, y: Quantity): bool {.borrow, noSideEffect.} @@ -30,7 +31,7 @@ proc new*(T: type BlockCache, max: uint32): T = let maxAsInt = int(max) return BlockCache( max: maxAsInt, - blocks: KeyedQueue[BlockHash, ExecutionPayloadV1].init(maxAsInt) + blocks: KeyedQueue[BlockHash, ExecutionData].init(maxAsInt) ) func len*(self: BlockCache): int = @@ -39,7 +40,7 @@ func len*(self: BlockCache): int = func isEmpty*(self: BlockCache): bool = return len(self.blocks) == 0 -proc add*(self: BlockCache, payload: ExecutionPayloadV1) = +proc add*(self: BlockCache, payload: ExecutionData) = if self.blocks.hasKey(payload.blockHash): return @@ -48,15 +49,15 @@ proc add*(self: BlockCache, payload: ExecutionPayloadV1) = discard self.blocks.append(payload.blockHash, payload) -proc latest*(self: BlockCache): results.Opt[ExecutionPayloadV1] = +proc latest*(self: BlockCache): results.Opt[ExecutionData] = let latestPair = ? self.blocks.last() return Opt.some(latestPair.data) proc getByNumber*( self: BlockCache, - number: Quantity): Opt[ExecutionPayloadV1] = + number: Quantity): Opt[ExecutionData] = - var payloadResult: Opt[ExecutionPayloadV1] + var payloadResult: Opt[ExecutionData] for payload in self.blocks.prevValues: if payload.blockNumber == number: @@ -67,5 +68,5 @@ proc getByNumber*( proc getPayloadByHash*( self: BlockCache, - hash: BlockHash): Opt[ExecutionPayloadV1] = + hash: BlockHash): Opt[ExecutionData] = return self.blocks.eq(hash) diff --git a/nimbus_verified_proxy/nimbus_verified_proxy.nim b/nimbus_verified_proxy/nimbus_verified_proxy.nim index 2ffca3a1c..dc83afccf 100644 --- a/nimbus_verified_proxy/nimbus_verified_proxy.nim +++ b/nimbus_verified_proxy/nimbus_verified_proxy.nim @@ -22,7 +22,7 @@ import beacon_chain/spec/datatypes/[phase0, altair, bellatrix], beacon_chain/[light_client, nimbus_binary_common, version], ../nimbus/rpc/cors, - ./rpc/rpc_eth_api, + "."/rpc/[rpc_eth_api, rpc_utils], ./nimbus_verified_proxy_conf, ./block_cache @@ -119,7 +119,7 @@ proc run() {.raises: [Exception, Defect].} = when stateFork >= BeaconStateFork.Bellatrix: if blck.message.is_execution_block: template payload(): auto = blck.message.body.execution_payload - blockCache.add(payload.asEngineExecutionPayload()) + blockCache.add(asExecutionData(payload.asEngineExecutionPayload())) else: discard return diff --git a/nimbus_verified_proxy/rpc/rpc_eth_api.nim b/nimbus_verified_proxy/rpc/rpc_eth_api.nim index f2b4655b7..0b8afb9f2 100644 --- a/nimbus_verified_proxy/rpc/rpc_eth_api.nim +++ b/nimbus_verified_proxy/rpc/rpc_eth_api.nim @@ -94,7 +94,7 @@ template rpcClient(lcProxy: VerifiedRpcProxy): RpcClient = proc getPayloadByTag( proxy: VerifiedRpcProxy, quantityTag: string): - results.Opt[ExecutionPayloadV1] {.raises: [ValueError, Defect].} = + results.Opt[ExecutionData] {.raises: [ValueError, Defect].} = checkPreconditions(proxy) let tagResult = parseQuantityTag(quantityTag) @@ -113,7 +113,7 @@ proc getPayloadByTag( proc getPayloadByTagOrThrow( proxy: VerifiedRpcProxy, - quantityTag: string): ExecutionPayloadV1 {.raises: [ValueError, Defect].} = + quantityTag: string): ExecutionData {.raises: [ValueError, Defect].} = let tagResult = getPayloadByTag(proxy, quantityTag) diff --git a/nimbus_verified_proxy/rpc/rpc_utils.nim b/nimbus_verified_proxy/rpc/rpc_utils.nim index f4e68428d..dea6f9aa7 100644 --- a/nimbus_verified_proxy/rpc/rpc_utils.nim +++ b/nimbus_verified_proxy/rpc/rpc_utils.nim @@ -17,6 +17,63 @@ import stint, web3 +type + ExecutionData* = object + parentHash*: BlockHash + feeRecipient*: Address + stateRoot*: BlockHash + receiptsRoot*: BlockHash + logsBloom*: FixedBytes[256] + prevRandao*: FixedBytes[32] + blockNumber*: Quantity + gasLimit*: Quantity + gasUsed*: Quantity + timestamp*: Quantity + extraData*: DynamicBytes[0, 32] + baseFeePerGas*: UInt256 + blockHash*: BlockHash + transactions*: seq[TypedTransaction] + withdrawals*: seq[WithdrawalV1] + +proc asExecutionData*( + payload: ExecutionPayloadV1 | ExecutionPayloadV2): ExecutionData = + when payload is ExecutionPayloadV1: + return ExecutionData( + parentHash: payload.parentHash, + feeRecipient: payload.feeRecipient, + stateRoot: payload.stateRoot, + receiptsRoot: payload.receiptsRoot, + logsBloom: payload.logsBloom, + prevRandao: payload.prevRandao, + blockNumber: payload.blockNumber, + gasLimit: payload.gasLimit, + gasUsed: payload.gasUsed, + timestamp: payload.timestamp, + extraData: payload.extraData, + baseFeePerGas: payload.baseFeePerGas, + blockHash: payload.blockHash, + transactions: payload.transactions, + withdrawals: @[] + ) + else: + return ExecutionData( + parentHash: payload.parentHash, + feeRecipient: payload.feeRecipient, + stateRoot: payload.stateRoot, + receiptsRoot: payload.receiptsRoot, + logsBloom: payload.logsBloom, + prevRandao: payload.prevRandao, + blockNumber: payload.blockNumber, + gasLimit: payload.gasLimit, + gasUsed: payload.gasUsed, + timestamp: payload.timestamp, + extraData: payload.extraData, + baseFeePerGas: payload.baseFeePerGas, + blockHash: payload.blockHash, + transactions: payload.transactions, + withdrawals: payload.withdrawals + ) + template unsafeQuantityToInt64(q: Quantity): int64 = int64 q @@ -44,7 +101,7 @@ proc calculateTransactionData( return (tr.rootHash(), txHashes, txSize) func blockHeaderSize( - payload: ExecutionPayloadV1, txRoot: etypes.Hash256): uint64 = + payload: ExecutionData, txRoot: etypes.Hash256): uint64 = let bh = etypes.BlockHeader( parentHash : payload.parentHash.asEthHash, ommersHash : etypes.EMPTY_UNCLE_HASH, @@ -66,7 +123,7 @@ func blockHeaderSize( return uint64(len(rlp.encode(bh))) proc asBlockObject*( - p: ExecutionPayloadV1): BlockObject {.raises: [Defect, RlpError].} = + p: ExecutionData): BlockObject {.raises: [Defect, RlpError].} = # TODO: currently we always calculate txHashes as BlockObject does not have # option of returning full transactions. It needs fixing at nim-web3 library # level diff --git a/vendor/nim-chronos b/vendor/nim-chronos index 9df76c39d..75d030ff7 160000 --- a/vendor/nim-chronos +++ b/vendor/nim-chronos @@ -1 +1 @@ -Subproject commit 9df76c39df254c7ff0cec6dec5c9f345f2819c91 +Subproject commit 75d030ff71264513fb9701c75a326cd36fcb4692 diff --git a/vendor/nim-web3 b/vendor/nim-web3 index 16a921168..1e2e2e6d1 160000 --- a/vendor/nim-web3 +++ b/vendor/nim-web3 @@ -1 +1 @@ -Subproject commit 16a921168678017c42c1b15617951a88cd8c5705 +Subproject commit 1e2e2e6d16a22cfc33f475b293c3ffbce8c46409 diff --git a/vendor/nimbus-eth2 b/vendor/nimbus-eth2 index f141ae57d..4e71e77da 160000 --- a/vendor/nimbus-eth2 +++ b/vendor/nimbus-eth2 @@ -1 +1 @@ -Subproject commit f141ae57d36dfa7bb2f26d7dd9fe6789acb3f429 +Subproject commit 4e71e77da78d2ee1849facc140fcd06be4248a28