// +build ignore package main import ( "fmt" "math/big" "github.com/bnb-chain/tss-lib/v2/tss" ) type Participant struct { PartyID string PartyIndex int } func main() { participants := []Participant{ {PartyID: "party-0", PartyIndex: 0}, {PartyID: "party-1", PartyIndex: 1}, {PartyID: "party-2", PartyIndex: 2}, } tssPartyIDs := make([]*tss.PartyID, len(participants)) for i, p := range participants { tssPartyIDs[i] = tss.NewPartyID( p.PartyID, fmt.Sprintf("party-%d", p.PartyIndex), big.NewInt(int64(p.PartyIndex+1)), ) } fmt.Println("Before sorting:") for i, p := range tssPartyIDs { fmt.Printf(" [%d] ID=%s, Key=%v\n", i, p.Id, p.Key) } sortedPartyIDs := tss.SortPartyIDs(tssPartyIDs) fmt.Println("\nAfter sorting:") for i, p := range sortedPartyIDs { fmt.Printf(" [%d] ID=%s, Key=%v\n", i, p.Id, p.Key) } // Build the buggy map partyIndexMap := make(map[int]*tss.PartyID) for _, p := range sortedPartyIDs { for _, orig := range participants { if orig.PartyID == p.Id { partyIndexMap[orig.PartyIndex] = p break } } } fmt.Println("\nParty index map (current buggy logic):") for idx, p := range partyIndexMap { fmt.Printf(" FromPartyIndex %d -> PartyID %s (Key=%v)\n", idx, p.Id, p.Key) } }