diff --git a/mod/primitives/pkg/ssz/v2/lib/helpers.go b/mod/primitives/pkg/ssz/v2/lib/helpers.go index 4775cafc4d..6b97243c36 100644 --- a/mod/primitives/pkg/ssz/v2/lib/helpers.go +++ b/mod/primitives/pkg/ssz/v2/lib/helpers.go @@ -182,17 +182,20 @@ func InterleaveOffsets( ) } - // Interleave offsets of variable-size parts with fixed-size parts. - // variable_offsets = [serialize(uint32(sum(fixed_lengths + - // variable_lengths[:i]))) for i in range(len(value))]. + // Compute the offsets for the variable-size parts by summing up the fixed + // lengthsand the variable lengths up to each index. The offsets are then + // serialized as uint32 values and stored in the variableOffsets slice. offsetSum := sumIntArr(fixedLengths) variableOffsets := make([][]byte, len(variableParts)) + for i := range len(variableParts) { - offsetSum += variableLengths[i] // #nosec:G701 // converting an int of max is 4294967295 to uint64 max // of 2147483647. // Wont realisticially overflow. variableOffsets[i] = ssz.MarshalU32(uint32(offsetSum)) + + // Increment offsetSum by the length of the current variable part. + offsetSum += variableLengths[i] } fixedPartsWithOffsets := make([][]byte, len(fixedParts)) diff --git a/mod/primitives/pkg/ssz/v2/lib/spec_test.go b/mod/primitives/pkg/ssz/v2/lib/spec_test.go index 860641ccb3..3b7edb75f1 100644 --- a/mod/primitives/pkg/ssz/v2/lib/spec_test.go +++ b/mod/primitives/pkg/ssz/v2/lib/spec_test.go @@ -166,10 +166,7 @@ func TestParityBellatrix(t *testing.T) { res, err4 := sszState.MarshalSSZ() require.NoError(t, err4) - // TODO: Fixme - doesnt match fastssz 100% - // debugDiff(res, o2) - // require.Equal(t, o2, res, defaultErrMsg) - + require.Equal(t, o2, res, defaultErrMsg) require.Equal(t, len(o2), len(res), defaultErrMsg) }