From 5315c3addc821b60b4c16dde8e286a172b527415 Mon Sep 17 00:00:00 2001 From: Etan Kissling Date: Wed, 30 Oct 2024 21:21:47 +0100 Subject: [PATCH 1/6] Bump nim-snappy to `0c308d34241c9f0764f6d111a0288428ded173bc` (#6694) - Replace `apt-fast` with `apt-get` and don't test with `cpp` --- vendor/nim-snappy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/nim-snappy b/vendor/nim-snappy index 590edb152..0c308d342 160000 --- a/vendor/nim-snappy +++ b/vendor/nim-snappy @@ -1 +1 @@ -Subproject commit 590edb152071bca4901bcbe689fc0856efd8c4e7 +Subproject commit 0c308d34241c9f0764f6d111a0288428ded173bc From d7f77a7b8a724afbf7458d9f1f6c028dba059ed7 Mon Sep 17 00:00:00 2001 From: Etan Kissling Date: Wed, 30 Oct 2024 21:30:00 +0100 Subject: [PATCH 2/6] Bump nim-faststreams to `cf8d4d22636b8e514caf17e49f9c786ac56b0e85` (#6691) - restore 1.6 compat --- vendor/nim-faststreams | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/nim-faststreams b/vendor/nim-faststreams index c246d00ea..cf8d4d226 160000 --- a/vendor/nim-faststreams +++ b/vendor/nim-faststreams @@ -1 +1 @@ -Subproject commit c246d00eaa7d6f52019464b37da510a8be23e939 +Subproject commit cf8d4d22636b8e514caf17e49f9c786ac56b0e85 From c0f7220ab2ebeccb9c9b272a10ec6c24240fd632 Mon Sep 17 00:00:00 2001 From: tersec Date: Thu, 31 Oct 2024 03:58:44 +0000 Subject: [PATCH 3/6] rm unused and obsolete produceBlindedBlock client-side infrastructure (#6697) --- .../eth2_apis/eth2_rest_serialization.nim | 47 --------- beacon_chain/spec/eth2_apis/rest_types.nim | 1 - .../spec/eth2_apis/rest_validator_calls.nim | 9 -- beacon_chain/validator_client/api.nim | 97 ------------------- 4 files changed, 154 deletions(-) diff --git a/beacon_chain/spec/eth2_apis/eth2_rest_serialization.nim b/beacon_chain/spec/eth2_apis/eth2_rest_serialization.nim index b68bda78b..8d51372d0 100644 --- a/beacon_chain/spec/eth2_apis/eth2_rest_serialization.nim +++ b/beacon_chain/spec/eth2_apis/eth2_rest_serialization.nim @@ -408,8 +408,6 @@ type GetGraffitiResponse | GetAggregatedAttestationV2Response - DecodeConsensysTypes* = ProduceBlindedBlockResponse - RestVersioned*[T] = object data*: T jsonVersion*: ConsensusFork @@ -3268,51 +3266,6 @@ func readSszResBytes(T: typedesc[RestBlockTypes], except SszError: err("Invalid SSZ object") -proc decodeBytes*[T: DecodeConsensysTypes]( - t: typedesc[T], - value: openArray[byte], - contentType: Opt[ContentTypeData], - consensusVersion: string - ): RestResult[T] = - let mediaType = - if contentType.isNone() or - isWildCard(contentType.get().mediaType): - return err("Invalid/missing Content-Type value") - else: - contentType.get().mediaType - - if mediaType == ApplicationJsonMediaType: - try: - ok(RestJson.decode(value, T, - requireAllFields = true, - allowUnknownFields = true)) - except SerializationError as exc: - debug "Failed to deserialize REST JSON data", - err = exc.formatMsg(""), - data = string.fromBytes(value) - return err("Serialization error") - elif mediaType == OctetStreamMediaType: - when t is ProduceBlindedBlockResponse: - let fork = ConsensusFork.decodeString(consensusVersion).valueOr: - return err("Invalid or Unsupported consensus version") - case fork - of ConsensusFork.Electra: - let - blck = ? readSszResBytes(electra_mev.BlindedBeaconBlock, value) - forked = ForkedBlindedBeaconBlock( - kind: ConsensusFork.Electra, electraData: blck) - ok(ProduceBlindedBlockResponse(forked)) - of ConsensusFork.Deneb: - let - blck = ? readSszResBytes(deneb_mev.BlindedBeaconBlock, value) - forked = ForkedBlindedBeaconBlock( - kind: ConsensusFork.Deneb, denebData: blck) - ok(ProduceBlindedBlockResponse(forked)) - of ConsensusFork.Phase0 .. ConsensusFork.Capella: - err("Unable to decode blinded block for pre-Deneb forks") - else: - err("Unsupported Content-Type") - proc decodeBytes*[T: ProduceBlockResponseV3]( t: typedesc[T], value: openArray[byte], diff --git a/beacon_chain/spec/eth2_apis/rest_types.nim b/beacon_chain/spec/eth2_apis/rest_types.nim index 169e7572d..9ba40f4f4 100644 --- a/beacon_chain/spec/eth2_apis/rest_types.nim +++ b/beacon_chain/spec/eth2_apis/rest_types.nim @@ -538,7 +538,6 @@ type GetVersionResponse* = DataEnclosedObject[RestNodeVersion] GetEpochSyncCommitteesResponse* = DataEnclosedObject[RestEpochSyncCommittee] ProduceAttestationDataResponse* = DataEnclosedObject[AttestationData] - ProduceBlindedBlockResponse* = ForkedBlindedBeaconBlock ProduceSyncCommitteeContributionResponse* = DataEnclosedObject[SyncCommitteeContribution] SubmitBlindedBlockResponseDeneb* = DataEnclosedObject[deneb_mev.ExecutionPayloadAndBlobsBundle] SubmitBlindedBlockResponseElectra* = DataEnclosedObject[electra_mev.ExecutionPayloadAndBlobsBundle] diff --git a/beacon_chain/spec/eth2_apis/rest_validator_calls.nim b/beacon_chain/spec/eth2_apis/rest_validator_calls.nim index 54a8a25c3..b5526c792 100644 --- a/beacon_chain/spec/eth2_apis/rest_validator_calls.nim +++ b/beacon_chain/spec/eth2_apis/rest_validator_calls.nim @@ -46,15 +46,6 @@ proc produceBlockV3Plain*( accept: preferSSZ, meth: MethodGet.} ## https://ethereum.github.io/beacon-APIs/#/Validator/produceBlockV3 -proc produceBlindedBlockPlain*( - slot: Slot, - randao_reveal: ValidatorSig, - graffiti: GraffitiBytes - ): RestPlainResponse {. - rest, endpoint: "/eth/v1/validator/blinded_blocks/{slot}", - accept: preferSSZ, meth: MethodGet.} - ## https://ethereum.github.io/beacon-APIs/#/Validator/produceBlindedBlock - proc produceAttestationDataPlain*( slot: Slot, committee_index: CommitteeIndex diff --git a/beacon_chain/validator_client/api.nim b/beacon_chain/validator_client/api.nim index 05fe14e55..c4d5c3f4b 100644 --- a/beacon_chain/validator_client/api.nim +++ b/beacon_chain/validator_client/api.nim @@ -2705,103 +2705,6 @@ proc publishBlock*( raise (ref ValidatorApiError)( msg: "Failed to publish block", data: failures) -proc produceBlindedBlock*( - vc: ValidatorClientRef, - slot: Slot, - randao_reveal: ValidatorSig, - graffiti: GraffitiBytes, - strategy: ApiStrategyKind -): Future[ProduceBlindedBlockResponse] {. - async: (raises: [CancelledError, ValidatorApiError]).} = - const - RequestName = "produceBlindedBlock" - - var failures: seq[ApiNodeFailure] - - case strategy - of ApiStrategyKind.First, ApiStrategyKind.Best: - let res = vc.firstSuccessParallel( - RestPlainResponse, - ProduceBlindedBlockResponse, - SlotDuration, - ViableNodeStatus, - {BeaconNodeRole.BlockProposalData}, - produceBlindedBlockPlain(it, slot, randao_reveal, graffiti)): - if apiResponse.isErr(): - handleCommunicationError() - ApiResponse[ProduceBlindedBlockResponse].err(apiResponse.error) - else: - let response = apiResponse.get() - case response.status: - of 200: - let - version = response.headers.getString("eth-consensus-version") - res = decodeBytes(ProduceBlindedBlockResponse, response.data, - response.contentType, version) - if res.isErr(): - handleUnexpectedData() - ApiResponse[ProduceBlindedBlockResponse].err($res.error) - else: - ApiResponse[ProduceBlindedBlockResponse].ok(res.get()) - of 400: - # TODO(cheatfate): We not going to update BN status for this handler, - # because BN reports 400 for any type of error that does not mean - # that BN is incompatible. - let failure = ApiNodeFailure.init(ApiFailure.Invalid, RequestName, - strategy, node, response.status, response.getErrorMessage()) - failures.add(failure) - ApiResponse[ProduceBlindedBlockResponse].err(ResponseInvalidError) - of 500: - handle500() - ApiResponse[ProduceBlindedBlockResponse].err(ResponseInternalError) - of 503: - handle503() - ApiResponse[ProduceBlindedBlockResponse].err(ResponseNoSyncError) - else: - handleUnexpectedCode() - ApiResponse[ProduceBlindedBlockResponse].err(ResponseUnexpectedError) - - if res.isErr(): - raise (ref ValidatorApiError)(msg: res.error, data: failures) - return res.get() - - of ApiStrategyKind.Priority: - vc.firstSuccessSequential( - RestPlainResponse, - SlotDuration, - ViableNodeStatus, - {BeaconNodeRole.BlockProposalData}, - produceBlindedBlockPlain(it, slot, randao_reveal, graffiti)): - if apiResponse.isErr(): - handleCommunicationError() - false - else: - let response = apiResponse.get() - case response.status: - of 200: - let - version = response.headers.getString("eth-consensus-version") - res = decodeBytes(ProduceBlindedBlockResponse, response.data, - response.contentType, version) - if res.isOk(): return res.get() - handleUnexpectedData() - false - of 400: - handle400() - false - of 500: - handle500() - false - of 503: - handle503() - false - else: - handleUnexpectedCode() - false - - raise (ref ValidatorApiError)( - msg: "Failed to produce blinded block", data: failures) - proc publishBlindedBlockV2*( vc: ValidatorClientRef, data: ForkedSignedBlindedBeaconBlock, From 3b806d16e4a7165e0999588643371ca1d25fad61 Mon Sep 17 00:00:00 2001 From: Anton Iakimov Date: Thu, 31 Oct 2024 13:36:54 +0100 Subject: [PATCH 4/6] change era1 mainnet link to nimbus.team --- docs/the_nimbus_book/src/execution-client.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/the_nimbus_book/src/execution-client.md b/docs/the_nimbus_book/src/execution-client.md index b41d80fb9..0f24910e5 100644 --- a/docs/the_nimbus_book/src/execution-client.md +++ b/docs/the_nimbus_book/src/execution-client.md @@ -43,7 +43,7 @@ In addition to the era files themselves, you will need at least 200GB of free sp === "Mainnet" * https://mainnet.era.nimbus.team/ - * https://era1.ethportal.net/ + * https://mainnet.era1.nimbus.team/ === "Holesky" * https://holesky.era.nimbus.team/ From a40b071a1a63df48c371744d361bbe991e3b34d0 Mon Sep 17 00:00:00 2001 From: tersec Date: Fri, 1 Nov 2024 13:32:24 +0000 Subject: [PATCH 5/6] switch to Nim v2.0.12 (#6699) --- vendor/nimbus-build-system | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/nimbus-build-system b/vendor/nimbus-build-system index 4afb05266..8fafcd0ba 160000 --- a/vendor/nimbus-build-system +++ b/vendor/nimbus-build-system @@ -1 +1 @@ -Subproject commit 4afb0526629f51aef4c124368365ebe90a782d37 +Subproject commit 8fafcd0bac9f409091b7bcaee62ab6330f57441e From 6cf388065d8278361d34a91b4740952a651d107c Mon Sep 17 00:00:00 2001 From: Jacek Sieka Date: Fri, 1 Nov 2024 16:40:13 +0100 Subject: [PATCH 6/6] network: remove unusede p2p macro stuff (#6700) --- beacon_chain/networking/eth2_network.nim | 8 +-- beacon_chain/networking/eth2_protocol_dsl.nim | 61 +------------------ 2 files changed, 4 insertions(+), 65 deletions(-) diff --git a/beacon_chain/networking/eth2_network.nim b/beacon_chain/networking/eth2_network.nim index acd3106fe..b5541d08f 100644 --- a/beacon_chain/networking/eth2_network.nim +++ b/beacon_chain/networking/eth2_network.nim @@ -2054,11 +2054,9 @@ proc p2pProtocolBackendImpl*(p: P2PProtocol): Backend = ## ## Implement Senders and Handshake ## - if msg.kind == msgHandshake: - macros.error "Handshake messages are not supported in LibP2P protocols" - else: - var sendProc = msg.createSendProc() - implementSendProcBody sendProc + + var sendProc = msg.createSendProc() + implementSendProcBody sendProc protocol.outProcRegistrations.add( newCall(registerMsg, diff --git a/beacon_chain/networking/eth2_protocol_dsl.nim b/beacon_chain/networking/eth2_protocol_dsl.nim index 7bb86bef7..0d2668ccd 100644 --- a/beacon_chain/networking/eth2_protocol_dsl.nim +++ b/beacon_chain/networking/eth2_protocol_dsl.nim @@ -16,7 +16,6 @@ export chronos, results type MessageKind* = enum - msgHandshake msgNotification msgRequest msgResponse @@ -89,7 +88,6 @@ type messages*: seq[Message] # Messages by type: - handshake*: Message notifications*: seq[Message] requests*: seq[Request] @@ -529,7 +527,7 @@ proc createSendProc*(msg: Message, result.msgParams.add param case msg.kind - of msgHandshake, msgRequest: + of msgRequest: # Add a timeout parameter for all request procs def.addTimeoutParam(msg.protocol.timeouts) @@ -558,8 +556,6 @@ proc createSendProc*(msg: Message, ident "untyped" elif msg.kind == msgRequest and not isRawSender: ident "auto" - elif msg.kind == msgHandshake and not isRawSender: - Fut(msg.recName) else: Fut(Void) @@ -665,27 +661,6 @@ proc useStandardBody*(sendProc: SendProc, `sendCall` -proc correctSerializerProcParams(params: NimNode) = - # A serializer proc is just like a send proc, but: - # 1. it has a void return type - params[0] = ident "void" - # 2. The peer params is replaced with OutputStream - params[1] = newIdentDefs(streamVar, bindSym "OutputStream") - # 3. The timeout param is removed - params.del(params.len - 1) - -proc createSerializer*(msg: Message, procType = nnkProcDef): NimNode = - var serializer = msg.createSendProc(procType, nameSuffix = "Serializer") - correctSerializerProcParams serializer.def.params - - serializer.setBody writeParamsAsRecord( - serializer.msgParams, - streamVar, - msg.protocol.backend.SerializationFormat, - msg.recName) - - return serializer.def - proc defineThunk*(msg: Message, thunk: NimNode) = let protocol = msg.protocol @@ -739,29 +714,6 @@ proc netInit*(p: P2PProtocol): NimNode = # p.backend.NetworkType, # p.NetworkStateType) -proc createHandshakeTemplate*(msg: Message, - rawSendProc, handshakeImpl, - nextMsg: NimNode): SendProc = - let - handshakeExchanger = msg.createSendProc(procType = nnkTemplateDef) - forwardCall = newCall(rawSendProc).appendAllInputParams(handshakeExchanger.def) - peerValue = forwardCall[1] - msgRecName = msg.recName - - forwardCall[1] = peerVar - forwardCall.del(forwardCall.len - 1) - - let peerVar = genSym(nskLet ,"peer") - handshakeExchanger.setBody quote do: - let `peerVar` = `peerValue` - let sendingFuture = `forwardCall` - `handshakeImpl`(`peerVar`, - sendingFuture, - `nextMsg`(`peerVar`, `msgRecName`), - `timeoutVar`) - - return handshakeExchanger - proc peerInit*(p: P2PProtocol): NimNode = if p.PeerStateType == nil: newNilLit() @@ -774,7 +726,6 @@ proc processProtocolBody*(p: P2PProtocol, protocolBody: NimNode) = ## This procs handles all DSL statements valid inside a p2pProtocol. ## ## It will populate the protocol's fields such as: - ## * handshake ## * requests ## * notifications ## * onPeerConnected @@ -803,16 +754,6 @@ proc processProtocolBody*(p: P2PProtocol, protocolBody: NimNode) = p.requests.add Request(queries: queries, response: responseMsg) - elif eqIdent(n[0], "handshake"): - let procs = expectBlockWithProcs(n) - if procs.len != 1: - error "handshake expects a block with a single proc definition", n - - if p.handshake != nil: - error "The handshake for the protocol is already defined", n - - p.handshake = p.newMsg(msgHandshake, procs[0]) - elif eqIdent(n[0], "onPeerConnected"): p.onPeerConnected = p.eventHandlerToProc(n[1], "PeerConnected")