github.com/0xPolygon/supernets2-node@v0.0.0-20230711153321-2fe574524eaa/etherman/datacommittee.go (about) 1 package etherman 2 3 import ( 4 "fmt" 5 "math/big" 6 7 "github.com/ethereum/go-ethereum/accounts/abi/bind" 8 "github.com/ethereum/go-ethereum/common" 9 ) 10 11 // DataCommitteeMember represents a member of the Data Committee 12 type DataCommitteeMember struct { 13 Addr common.Address 14 URL string 15 } 16 17 // DataCommittee represents a specific committee 18 type DataCommittee struct { 19 AddressesHash common.Hash 20 Members []DataCommitteeMember 21 RequiredSignatures uint64 22 } 23 24 // GetCurrentDataCommittee return the currently registered data committee 25 func (etherMan *Client) GetCurrentDataCommittee() (*DataCommittee, error) { 26 addrsHash, err := etherMan.DataCommittee.CommitteeHash(&bind.CallOpts{Pending: false}) 27 if err != nil { 28 return nil, fmt.Errorf("error getting CommitteeHash from L1 SC: %w", err) 29 } 30 reqSign, err := etherMan.DataCommittee.RequiredAmountOfSignatures(&bind.CallOpts{Pending: false}) 31 if err != nil { 32 return nil, fmt.Errorf("error getting RequiredAmountOfSignatures from L1 SC: %w", err) 33 } 34 members, err := etherMan.GetCurrentDataCommitteeMembers() 35 if err != nil { 36 return nil, err 37 } 38 39 return &DataCommittee{ 40 AddressesHash: common.Hash(addrsHash), 41 RequiredSignatures: reqSign.Uint64(), 42 Members: members, 43 }, nil 44 } 45 46 // GetCurrentDataCommitteeMembers return the currently registered data committee members 47 func (etherMan *Client) GetCurrentDataCommitteeMembers() ([]DataCommitteeMember, error) { 48 members := []DataCommitteeMember{} 49 nMembers, err := etherMan.DataCommittee.GetAmountOfMembers(&bind.CallOpts{Pending: false}) 50 if err != nil { 51 return nil, fmt.Errorf("error getting GetAmountOfMembers from L1 SC: %w", err) 52 } 53 for i := int64(0); i < nMembers.Int64(); i++ { 54 member, err := etherMan.DataCommittee.Members(&bind.CallOpts{Pending: false}, big.NewInt(i)) 55 if err != nil { 56 return nil, fmt.Errorf("error getting Members %d from L1 SC: %w", i, err) 57 } 58 members = append(members, DataCommitteeMember{ 59 Addr: member.Addr, 60 URL: member.Url, 61 }) 62 } 63 return members, nil 64 }