@@ -26,8 +26,8 @@ export type AttDataCommitteeBitsBase64 = string;
2626// class Attestation(Container):
2727// aggregation_bits: BitList[MAX_VALIDATORS_PER_COMMITTEE * MAX_COMMITTEES_PER_SLOT] - offset 4
2828// data: AttestationData - target data - 128
29- // committee_bits: BitVector[MAX_COMMITTEES_PER_SLOT]
3029// signature: BLSSignature - 96
30+ // committee_bits: BitVector[MAX_COMMITTEES_PER_SLOT]
3131//
3232// for all forks
3333// class AttestationData(Container): 128 bytes fixed size
@@ -82,14 +82,19 @@ export function getSeenAttDataKey(forkSeq: ForkSeq, data: Uint8Array): SeenAttDa
8282 * Return null if data is not long enough to extract attestation data.
8383 */
8484export function getSeenAttDataKeyElectra ( electraAttestationBytes : Uint8Array ) : AttDataCommitteeBitsBase64 | null {
85- const startIndex = VARIABLE_FIELD_OFFSET ;
86- const seenKeyLength = ATTESTATION_DATA_SIZE + COMMITTEE_BITS_SIZE ;
85+ const attestationData = getSeenAttDataKeyPhase0 ( electraAttestationBytes ) ;
8786
88- if ( electraAttestationBytes . length < startIndex + seenKeyLength ) {
87+ if ( attestationData === null ) {
8988 return null ;
9089 }
9190
92- return toBase64 ( electraAttestationBytes . subarray ( startIndex , startIndex + seenKeyLength ) ) ;
91+ const committeeBits = getCommitteeBitsFromAttestationSerialized ( electraAttestationBytes ) ;
92+
93+ if ( committeeBits === null ) {
94+ return null ;
95+ }
96+
97+ return attestationData + toBase64 ( committeeBits . uint8Array ) ;
9398}
9499
95100/**
@@ -112,7 +117,7 @@ export function getSeenAttDataKeyPhase0(data: Uint8Array): AttDataBase64 | null
112117export function getAggregationBitsFromAttestationSerialized ( fork : ForkName , data : Uint8Array ) : BitArray | null {
113118 const aggregationBitsStartIndex =
114119 ForkSeq [ fork ] >= ForkSeq . electra
115- ? VARIABLE_FIELD_OFFSET + ATTESTATION_DATA_SIZE + COMMITTEE_BITS_SIZE + SIGNATURE_SIZE
120+ ? VARIABLE_FIELD_OFFSET + ATTESTATION_DATA_SIZE + SIGNATURE_SIZE + COMMITTEE_BITS_SIZE
116121 : VARIABLE_FIELD_OFFSET + ATTESTATION_DATA_SIZE + SIGNATURE_SIZE ;
117122
118123 if ( data . length < aggregationBitsStartIndex ) {
@@ -127,11 +132,8 @@ export function getAggregationBitsFromAttestationSerialized(fork: ForkName, data
127132 * Extract signature from attestation serialized bytes.
128133 * Return null if data is not long enough to extract signature.
129134 */
130- export function getSignatureFromAttestationSerialized ( fork : ForkName , data : Uint8Array ) : BLSSignature | null {
131- const signatureStartIndex =
132- ForkSeq [ fork ] >= ForkSeq . electra
133- ? VARIABLE_FIELD_OFFSET + ATTESTATION_DATA_SIZE + COMMITTEE_BITS_SIZE
134- : VARIABLE_FIELD_OFFSET + ATTESTATION_DATA_SIZE ;
135+ export function getSignatureFromAttestationSerialized ( data : Uint8Array ) : BLSSignature | null {
136+ const signatureStartIndex = VARIABLE_FIELD_OFFSET + ATTESTATION_DATA_SIZE ;
135137
136138 if ( data . length < signatureStartIndex + SIGNATURE_SIZE ) {
137139 return null ;
@@ -145,7 +147,7 @@ export function getSignatureFromAttestationSerialized(fork: ForkName, data: Uint
145147 * Return null if data is not long enough to extract committee bits.
146148 */
147149export function getCommitteeBitsFromAttestationSerialized ( data : Uint8Array ) : BitArray | null {
148- const committeeBitsStartIndex = VARIABLE_FIELD_OFFSET + ATTESTATION_DATA_SIZE ;
150+ const committeeBitsStartIndex = VARIABLE_FIELD_OFFSET + ATTESTATION_DATA_SIZE + SIGNATURE_SIZE ;
149151
150152 if ( data . length < committeeBitsStartIndex + COMMITTEE_BITS_SIZE ) {
151153 return null ;
0 commit comments