github.com/status-im/status-go@v1.1.0/services/connector/chainutils/utils.go (about)

     1  package chainutils
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"strconv"
     7  
     8  	"github.com/status-im/status-go/params"
     9  )
    10  
    11  type NetworkManagerInterface interface {
    12  	GetActiveNetworks() ([]*params.Network, error)
    13  }
    14  
    15  var (
    16  	ErrNoActiveNetworks   = errors.New("no active networks available")
    17  	ErrUnsupportedNetwork = errors.New("unsupported network")
    18  )
    19  
    20  // GetSupportedChainIDs retrieves the chain IDs from the provided NetworkManager.
    21  func GetSupportedChainIDs(networkManager NetworkManagerInterface) ([]uint64, error) {
    22  	activeNetworks, err := networkManager.GetActiveNetworks()
    23  	if err != nil {
    24  		return nil, err
    25  	}
    26  
    27  	if len(activeNetworks) < 1 {
    28  		return nil, ErrNoActiveNetworks
    29  	}
    30  
    31  	chainIDs := make([]uint64, len(activeNetworks))
    32  	for i, network := range activeNetworks {
    33  		chainIDs[i] = network.ChainID
    34  	}
    35  
    36  	return chainIDs, nil
    37  }
    38  
    39  func GetDefaultChainID(networkManager NetworkManagerInterface) (uint64, error) {
    40  	chainIDs, err := GetSupportedChainIDs(networkManager)
    41  	if err != nil {
    42  		return 0, err
    43  	}
    44  
    45  	return chainIDs[0], nil
    46  }
    47  
    48  func GetHexChainID(decimalStr string) (string, error) {
    49  	decimalValue, err := strconv.ParseInt(decimalStr, 10, 64)
    50  	if err != nil {
    51  		return "", ErrUnsupportedNetwork
    52  	}
    53  
    54  	hexStr := fmt.Sprintf(`0x%s`, strconv.FormatInt(decimalValue, 16))
    55  
    56  	return hexStr, nil
    57  }