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  }