@@ -129,6 +129,21 @@ proc toString*(kind: ValidatorFilterKind): string =
129129 of ValidatorFilterKind .WithdrawalDone :
130130 " withdrawal_done"
131131
132+ func checkRestBlockBlobsValid (
133+ forkyBlck: deneb.SignedBeaconBlock | electra.SignedBeaconBlock ,
134+ kzg_proofs: KzgProofs ,
135+ blobs: Blobs ): Result [void , string ] =
136+ if kzg_proofs.len != blobs.len:
137+ return err (" Invalid block publish: " & $ kzg_proofs.len & " KZG proofs and " &
138+ $ blobs.len & " blobs" )
139+
140+ if kzg_proofs.len != forkyBlck.message.body.blob_kzg_commitments.len:
141+ return err (" Invalid block publish: " & $ kzg_proofs.len &
142+ " KZG proofs and " & $ forkyBlck.message.body.blob_kzg_commitments.len &
143+ " KZG commitments" )
144+
145+ ok ()
146+
132147proc installBeaconApiHandlers * (router: var RestRouter , node: BeaconNode ) =
133148 # https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4881.md
134149 router.api2 (MethodGet , " /eth/v1/beacon/deposit_snapshot" ) do (
@@ -920,6 +935,12 @@ proc installBeaconApiHandlers*(router: var RestRouter, node: BeaconNode) =
920935 of ConsensusFork .Deneb :
921936 var blck = restBlock.denebData.signed_block
922937 blck.root = hash_tree_root (blck.message)
938+
939+ let validity = checkRestBlockBlobsValid (
940+ blck, restBlock.denebData.kzg_proofs, restBlock.denebData.blobs)
941+ if validity.isErr:
942+ return RestApiResponse .jsonError (Http400 , validity.error)
943+
923944 await node.router.routeSignedBeaconBlock (
924945 blck, Opt .some (blck.create_blob_sidecars (
925946 restBlock.denebData.kzg_proofs, restBlock.denebData.blobs)))
@@ -996,6 +1017,12 @@ proc installBeaconApiHandlers*(router: var RestRouter, node: BeaconNode) =
9961017 of ConsensusFork .Deneb :
9971018 var blck = restBlock.denebData.signed_block
9981019 blck.root = hash_tree_root (blck.message)
1020+
1021+ let validity = checkRestBlockBlobsValid (
1022+ blck, restBlock.denebData.kzg_proofs, restBlock.denebData.blobs)
1023+ if validity.isErr:
1024+ return RestApiResponse .jsonError (Http400 , validity.error)
1025+
9991026 await node.router.routeSignedBeaconBlock (
10001027 blck, Opt .some (blck.create_blob_sidecars (
10011028 restBlock.denebData.kzg_proofs, restBlock.denebData.blobs)))
0 commit comments