Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
904 changes: 452 additions & 452 deletions ssv/spectest/generate/tests/committee.MultiCommitteeSpecTest_decided.json

Large diffs are not rendered by default.

2,050 changes: 1,025 additions & 1,025 deletions ssv/spectest/generate/tests/committee.MultiCommitteeSpecTest_happy_flow.json

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
"DutySlot": "12",
"Input": "AQIDBAUGBwgJCgECAwQFBgcICQoBAgMEBQYHCAkKAQIAAAAAAAAAAAECAwQFBgcICQoBAgMEBQYHCAkKAQIDBAUGBwgJCgECAQAAAAAAAAABAgMEBQYHCAkKAQIDBAUGBwgJCgECAwQFBgcICQoBAg==",
"SlashableSlots": {
"42409cb09fa945fa6a168cf8b0861045d6e562f211a70c4a1cdbcf0417898763": [
"5f4711a796c1116b5118ec35279fb64d551d9b38813d2939954dd2df5160d3d9": [
"12"
]
},
"omitempty": [
"QkCcsJ+pRfpqFoz4sIYQRdblYvIRpwxKHNvPBBeJh2M=",
"X0cRp5bBEWtRGOw1J5+2TVUdmziBPSk5lU3S31Fg09k=",
"SOTAo46Q+TUtHQlIlEZEPr0XsZBPTwAC/olMLD9iRXo=",
"Zdx8F59oNHzxL4bhxR5U6K7u1XnUxxUIK7igOCwagVM="
"Zdx8F59oNHzxL4bhxR5U6K7u1XnUxxUIK7igOCwagVM=",
"QkCcsJ+pRfpqFoz4sIYQRdblYvIRpwxKHNvPBBeJh2M="
],
"ExpectedError": "slashable attestation",
"AnyError": false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ func MajoritySlashable() tests.SpecTest {
keySet := testingutils.Testing4SharesSet()
sharesPKBytes := make([]types.ShareValidatorPK, 0)
sharesPKString := make([]string, 0)
for _, shareKey := range keySet.Shares {
shareBytes := shareKey.Serialize()
for _, opShare := range testingutils.SortedMapKeys(keySet.Shares) {
shareBytes := opShare.Value.Serialize()
sharesPKBytes = append(sharesPKBytes, shareBytes)
sharesPKString = append(sharesPKString, hex.EncodeToString(shareBytes))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ func MinoritySlashable() tests.SpecTest {
keySet := testingutils.Testing4SharesSet()
sharesPKBytes := make([]types.ShareValidatorPK, 0)
sharesPKString := make([]string, 0)
for _, shareKey := range keySet.Shares {
shareBytes := shareKey.Serialize()
for _, opShare := range testingutils.SortedMapKeys(keySet.Shares) {
shareBytes := opShare.Value.Serialize()
sharesPKBytes = append(sharesPKBytes, shareBytes)
sharesPKString = append(sharesPKString, hex.EncodeToString(shareBytes))
}
Expand Down
12 changes: 8 additions & 4 deletions types/testingutils/beacon_node_attestation.go
Original file line number Diff line number Diff line change
Expand Up @@ -425,7 +425,8 @@ var TestingAttestationResponseBeaconObjectForDuty = func(ks *TestKeySet, version

var TestingSignedAttestationSSZRootForKeyMap = func(ksMap map[phase0.ValidatorIndex]*TestKeySet) []string {
ret := make([]string, 0)
for _, ks := range ksMap {
for _, valKs := range SortedMapKeys(ksMap) {
ks := valKs.Value
duty := TestingAttesterDuty(spec.DataVersionPhase0).ValidatorDuties[0]
aggregationBitfield := bitfield.NewBitlist(duty.CommitteeLength)
aggregationBitfield.SetBitAt(duty.ValidatorCommitteeIndex, true)
Expand All @@ -440,8 +441,9 @@ var TestingSignedAttestationSSZRootForKeyMap = func(ksMap map[phase0.ValidatorIn

var TestingElectraAttestationSSZRootForKeyMap = func(ksMap map[phase0.ValidatorIndex]*TestKeySet) []string {
ret := make([]string, 0)
for valIdx, ks := range ksMap {

for _, valKs := range SortedMapKeys(ksMap) {
ks := valKs.Value
valIdx := valKs.Key
committeeDuty := TestingAttesterDutyForValidator(spec.DataVersionElectra, valIdx)
duty := committeeDuty.ValidatorDuties[0]

Expand All @@ -467,8 +469,10 @@ var TestingElectraAttestationSSZRootForKeyMap = func(ksMap map[phase0.ValidatorI

var TestingElectraSingleAttestationSSZRootForKeyMap = func(ksMap map[phase0.ValidatorIndex]*TestKeySet) []string {
ret := make([]string, 0)
for valIdx, ks := range ksMap {

for _, valKs := range SortedMapKeys(ksMap) {
ks := valKs.Value
valIdx := valKs.Key
committeeDuty := TestingAttesterDutyForValidator(spec.DataVersionElectra, valIdx)
duty := committeeDuty.ValidatorDuties[0]

Expand Down
4 changes: 3 additions & 1 deletion types/testingutils/beacon_node_sync_committee.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@ var TestingSignedSyncCommitteeBlockRootForValidatorIndex = func(ks *TestKeySet,

var TestingSignedSyncCommitteeBlockRootSSZRootForKeyMap = func(ksMap map[phase0.ValidatorIndex]*TestKeySet, version spec.DataVersion) []string {
ret := make([]string, 0)
for valIdx, ks := range ksMap {
for _, valKs := range SortedMapKeys(ksMap) {
ks := valKs.Value
valIdx := valKs.Key
ret = append(ret, GetSSZRootNoError(&altair.SyncCommitteeMessage{
Slot: TestingDutySlotV(version),
BeaconBlockRoot: TestingBlockRoot,
Expand Down
65 changes: 21 additions & 44 deletions types/testingutils/ssv_msgs_committee_duty.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package testingutils

import (
"fmt"
"sort"

"github.com/attestantio/go-eth2-client/spec"
"github.com/attestantio/go-eth2-client/spec/phase0"
Expand Down Expand Up @@ -77,7 +76,9 @@ var PostConsensusAttestationMsgForKeySetWithSlot = func(keySetMap map[phase0.Val

var ret *types.PartialSignatureMessages
// Get post consensus for attestations for each validator in shares
for valIdx, ks := range keySetMap {
for _, valKs := range SortedMapKeys(keySetMap) {
ks := valKs.Value
valIdx := valKs.Key
pSigMsgs := postConsensusAttestationMsg(ks.Shares[id], id, slot, false, false, valIdx)
if ret == nil {
ret = pSigMsgs
Expand All @@ -103,19 +104,9 @@ var PostConsensusPartiallyWrongAttestationMsgForKeySet = func(keySetMap map[phas

var ret *types.PartialSignatureMessages

validatorIndexes := make([]phase0.ValidatorIndex, 0)
for valIdx := range keySetMap {
validatorIndexes = append(validatorIndexes, valIdx)
}
sort.Slice(validatorIndexes, func(i, j int) bool {
return validatorIndexes[i] < validatorIndexes[j]
})

for _, valIdx := range validatorIndexes {
ks, ok := keySetMap[valIdx]
if !ok {
panic("validator index not in key set map")
}
for _, valKs := range SortedMapKeys(keySetMap) {
ks := valKs.Value
valIdx := valKs.Key

invalidMsgFlag := (msgIndex < numValid)

Expand Down Expand Up @@ -279,7 +270,9 @@ var PostConsensusAttestationAndSyncCommitteeMsgForKeySetWithSlot = func(keySetMa

var ret *types.PartialSignatureMessages
// Get post consensus for attestations for each validator in shares
for valIdx, ks := range keySetMap {
for _, valKs := range SortedMapKeys(keySetMap) {
ks := valKs.Value
valIdx := valKs.Key
pSigMsgs := postConsensusAttestationMsg(ks.Shares[id], id, slot, false, false, valIdx)
if ret == nil {
ret = pSigMsgs
Expand All @@ -288,7 +281,9 @@ var PostConsensusAttestationAndSyncCommitteeMsgForKeySetWithSlot = func(keySetMa
}
}
// Get post consensus for sync committees for each validator in shares
for valIdx, ks := range keySetMap {
for _, valKs := range SortedMapKeys(keySetMap) {
ks := valKs.Value
valIdx := valKs.Key
pSigMsgs := postConsensusSyncCommitteeMsg(ks.Shares[id], id, slot, false, false, valIdx)
if ret == nil {
ret = pSigMsgs
Expand All @@ -314,19 +309,9 @@ var PostConsensusPartiallyWrongAttestationAndSyncCommitteeMsgForKeySet = func(ke

var ret *types.PartialSignatureMessages

validatorIndexes := make([]phase0.ValidatorIndex, 0)
for valIdx := range keySetMap {
validatorIndexes = append(validatorIndexes, valIdx)
}
sort.Slice(validatorIndexes, func(i, j int) bool {
return validatorIndexes[i] < validatorIndexes[j]
})

for _, valIdx := range validatorIndexes {
ks, ok := keySetMap[valIdx]
if !ok {
panic("validator index not in key set map")
}
for _, valKs := range SortedMapKeys(keySetMap) {
ks := valKs.Value
valIdx := valKs.Key

invalidMsgFlag := (msgIndex < numValid)

Expand Down Expand Up @@ -454,7 +439,9 @@ var PostConsensusSyncCommitteeMsgForKeySetWithSlot = func(keySetMap map[phase0.V

var ret *types.PartialSignatureMessages
// Get post consensus for sync committees for each validator in shares
for valIdx, ks := range keySetMap {
for _, valKs := range SortedMapKeys(keySetMap) {
ks := valKs.Value
valIdx := valKs.Key
pSigMsgs := postConsensusSyncCommitteeMsg(ks.Shares[id], id, slot, false, false, valIdx)
if ret == nil {
ret = pSigMsgs
Expand All @@ -480,19 +467,9 @@ var PostConsensusPartiallyWrongSyncCommitteeMsgForKeySet = func(keySetMap map[ph

var ret *types.PartialSignatureMessages

validatorIndexes := make([]phase0.ValidatorIndex, 0)
for valIdx := range keySetMap {
validatorIndexes = append(validatorIndexes, valIdx)
}
sort.Slice(validatorIndexes, func(i, j int) bool {
return validatorIndexes[i] < validatorIndexes[j]
})

for _, valIdx := range validatorIndexes {
ks, ok := keySetMap[valIdx]
if !ok {
panic("validator index not in key set map")
}
for _, valKs := range SortedMapKeys(keySetMap) {
ks := valKs.Value
valIdx := valKs.Key

invalidMsgFlag := (msgIndex < numValid)

Expand Down
35 changes: 35 additions & 0 deletions types/testingutils/utils.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package testingutils

import (
"sort"

"golang.org/x/exp/constraints"
)

// SortMapByKey sorts a map by its keys and returns a sorted slice of key-value pairs.
func SortedMapKeys[K constraints.Ordered, V any](m map[K]V) []struct {
Key K
Value V
} {
// Extract and sort keys
keys := make([]K, 0, len(m))
for k := range m {
keys = append(keys, k)
}
sort.Slice(keys, func(i, j int) bool { return keys[i] < keys[j] })

// Create sorted key-value pairs
pairs := make([]struct {
Key K
Value V
}, len(keys))

for i, k := range keys {
pairs[i] = struct {
Key K
Value V
}{k, m[k]}
}

return pairs
}