From b1ae3691f8140f9477ffc68c081fc7a039464819 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Wed, 13 Mar 2024 23:55:06 +0100 Subject: [PATCH] beacon/light/api: fix version decoding --- beacon/light/api/light_api.go | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/beacon/light/api/light_api.go b/beacon/light/api/light_api.go index 93d4db1230..4dde2e9f6b 100755 --- a/beacon/light/api/light_api.go +++ b/beacon/light/api/light_api.go @@ -241,18 +241,28 @@ func (api *BeaconLightApi) GetFinalityUpdate() (types.FinalityUpdate, error) { func decodeFinalityUpdate(enc []byte) (types.FinalityUpdate, error) { var data struct { - Data struct { - Version string `json:"version"` + Version string + Data struct { Attested jsonHeaderWithExecProof `json:"attested_header"` Finalized jsonHeaderWithExecProof `json:"finalized_header"` FinalityBranch merkle.Values `json:"finality_branch"` Aggregate types.SyncAggregate `json:"sync_aggregate"` SignatureSlot common.Decimal `json:"signature_slot"` - } `json:"data"` + } } if err := json.Unmarshal(enc, &data); err != nil { return types.FinalityUpdate{}, err } + // Decode the execution payload headers. + attestedExecHeader, err := types.ExecutionHeaderFromJSON(data.Version, data.Data.Attested.Execution) + if err != nil { + return types.FinalityUpdate{}, fmt.Errorf("invalid attested header: %v", err) + } + finalizedExecHeader, err := types.ExecutionHeaderFromJSON(data.Version, data.Data.Finalized.Execution) + if err != nil { + return types.FinalityUpdate{}, fmt.Errorf("invalid finalized header: %v", err) + } + // Perform sanity checks. if len(data.Data.Aggregate.Signers) != params.SyncCommitteeBitmaskSize { return types.FinalityUpdate{}, errors.New("invalid sync_committee_bits length") } @@ -260,17 +270,6 @@ func decodeFinalityUpdate(enc []byte) (types.FinalityUpdate, error) { return types.FinalityUpdate{}, errors.New("invalid sync_committee_signature length") } - // Decode the execution payload headers. - fork := data.Data.Version - attestedExecHeader, err := types.ExecutionHeaderFromJSON(fork, data.Data.Attested.Execution) - if err != nil { - return types.FinalityUpdate{}, fmt.Errorf("invalid attested header: %v", err) - } - finalizedExecHeader, err := types.ExecutionHeaderFromJSON(fork, data.Data.Finalized.Execution) - if err != nil { - return types.FinalityUpdate{}, fmt.Errorf("invalid finalized header: %v", err) - } - return types.FinalityUpdate{ Attested: types.HeaderWithExecProof{ Header: data.Data.Attested.Beacon,