diff --git a/beacon/types/committee.go b/beacon/types/committee.go index 5f89c27554..9d3b9ff9e9 100644 --- a/beacon/types/committee.go +++ b/beacon/types/committee.go @@ -164,21 +164,44 @@ func (sc *SyncCommittee) VerifySignature(signingRoot common.Hash, signature *Syn return bls.FastAggregateVerify(keys, signingRoot[:], &sig) } -//go:generate go run github.com/fjl/gencodec -type SyncAggregate -field-override syncAggregateMarshaling -out gen_syncaggregate_json.go - // SyncAggregate represents an aggregated BLS signature with Signers referring // to a subset of the corresponding sync committee. // // See data structure definition here: // https://github.com/ethereum/consensus-specs/blob/dev/specs/altair/beacon-chain.md#syncaggregate type SyncAggregate struct { - Signers [params.SyncCommitteeBitmaskSize]byte `gencodec:"required" json:"sync_committee_bits"` - Signature [params.BLSSignatureSize]byte `gencodec:"required" json:"sync_committee_signature"` + Signers [params.SyncCommitteeBitmaskSize]byte + Signature [params.BLSSignatureSize]byte } -type syncAggregateMarshaling struct { - Signers hexutil.Bytes - Signature hexutil.Bytes +type jsonSyncAggregate struct { + Signers hexutil.Bytes `json:"sync_committee_bits"` + Signature hexutil.Bytes `json:"sync_committee_signature"` +} + +// MarshalJSON implements json.Marshaler. +func (s *SyncAggregate) MarshalJSON() ([]byte, error) { + return json.Marshal(&jsonSyncAggregate{ + Signers: s.Signers[:], + Signature: s.Signature[:], + }) +} + +// UnmarshalJSON implements json.Marshaler. +func (s *SyncAggregate) UnmarshalJSON(input []byte) error { + var sc jsonSyncAggregate + if err := json.Unmarshal(input, &sc); err != nil { + return err + } + if len(sc.Signers) != params.SyncCommitteeBitmaskSize { + return fmt.Errorf("invalid signature bitmask size %d", len(sc.Signers)) + } + if len(sc.Signature) != params.BLSSignatureSize { + return fmt.Errorf("invalid signature size %d", len(sc.Signature)) + } + copy(s.Signers[:], sc.Signers) + copy(s.Signature[:], sc.Signature) + return nil } // SignerCount returns the number of signers in the aggregate signature. diff --git a/beacon/types/gen_syncaggregate_json.go b/beacon/types/gen_syncaggregate_json.go deleted file mode 100644 index 1547ec5f01..0000000000 --- a/beacon/types/gen_syncaggregate_json.go +++ /dev/null @@ -1,51 +0,0 @@ -// Code generated by github.com/fjl/gencodec. DO NOT EDIT. - -package types - -import ( - "encoding/json" - "errors" - - "github.com/ethereum/go-ethereum/common/hexutil" -) - -var _ = (*syncAggregateMarshaling)(nil) - -// MarshalJSON marshals as JSON. -func (s SyncAggregate) MarshalJSON() ([]byte, error) { - type SyncAggregate struct { - Signers hexutil.Bytes `gencodec:"required" json:"sync_committee_bits"` - Signature hexutil.Bytes `gencodec:"required" json:"sync_committee_signature"` - } - var enc SyncAggregate - enc.Signers = s.Signers[:] - enc.Signature = s.Signature[:] - return json.Marshal(&enc) -} - -// UnmarshalJSON unmarshals from JSON. -func (s *SyncAggregate) UnmarshalJSON(input []byte) error { - type SyncAggregate struct { - Signers *hexutil.Bytes `gencodec:"required" json:"sync_committee_bits"` - Signature *hexutil.Bytes `gencodec:"required" json:"sync_committee_signature"` - } - var dec SyncAggregate - if err := json.Unmarshal(input, &dec); err != nil { - return err - } - if dec.Signers == nil { - return errors.New("missing required field 'sync_committee_bits' for SyncAggregate") - } - if len(*dec.Signers) != len(s.Signers) { - return errors.New("field 'sync_committee_bits' has wrong length, need 64 items") - } - copy(s.Signers[:], *dec.Signers) - if dec.Signature == nil { - return errors.New("missing required field 'sync_committee_signature' for SyncAggregate") - } - if len(*dec.Signature) != len(s.Signature) { - return errors.New("field 'sync_committee_signature' has wrong length, need 96 items") - } - copy(s.Signature[:], *dec.Signature) - return nil -}