@@ -26,8 +26,8 @@ export type AttDataCommitteeBitsBase64 = string;
26
26
// class Attestation(Container):
27
27
// aggregation_bits: BitList[MAX_VALIDATORS_PER_COMMITTEE * MAX_COMMITTEES_PER_SLOT] - offset 4
28
28
// data: AttestationData - target data - 128
29
- // committee_bits: BitVector[MAX_COMMITTEES_PER_SLOT]
30
29
// signature: BLSSignature - 96
30
+ // committee_bits: BitVector[MAX_COMMITTEES_PER_SLOT]
31
31
//
32
32
// for all forks
33
33
// class AttestationData(Container): 128 bytes fixed size
@@ -82,14 +82,19 @@ export function getSeenAttDataKey(forkSeq: ForkSeq, data: Uint8Array): SeenAttDa
82
82
* Return null if data is not long enough to extract attestation data.
83
83
*/
84
84
export 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 ) ;
87
86
88
- if ( electraAttestationBytes . length < startIndex + seenKeyLength ) {
87
+ if ( attestationData === null ) {
89
88
return null ;
90
89
}
91
90
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 ) ;
93
98
}
94
99
95
100
/**
@@ -112,7 +117,7 @@ export function getSeenAttDataKeyPhase0(data: Uint8Array): AttDataBase64 | null
112
117
export function getAggregationBitsFromAttestationSerialized ( fork : ForkName , data : Uint8Array ) : BitArray | null {
113
118
const aggregationBitsStartIndex =
114
119
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
116
121
: VARIABLE_FIELD_OFFSET + ATTESTATION_DATA_SIZE + SIGNATURE_SIZE ;
117
122
118
123
if ( data . length < aggregationBitsStartIndex ) {
@@ -127,11 +132,8 @@ export function getAggregationBitsFromAttestationSerialized(fork: ForkName, data
127
132
* Extract signature from attestation serialized bytes.
128
133
* Return null if data is not long enough to extract signature.
129
134
*/
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 ;
135
137
136
138
if ( data . length < signatureStartIndex + SIGNATURE_SIZE ) {
137
139
return null ;
@@ -145,7 +147,7 @@ export function getSignatureFromAttestationSerialized(fork: ForkName, data: Uint
145
147
* Return null if data is not long enough to extract committee bits.
146
148
*/
147
149
export 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 ;
149
151
150
152
if ( data . length < committeeBitsStartIndex + COMMITTEE_BITS_SIZE ) {
151
153
return null ;
0 commit comments