Skip to content

Commit 17279f2

Browse files
committed
detect invalid REST blocks (#6152)
1 parent 33e34ee commit 17279f2

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

beacon_chain/rpc/rest_beacon_api.nim

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
132147
proc 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

Comments
 (0)