github.com/0chain/gosdk@v1.17.11/core/conf/network.go (about)

     1  package conf
     2  
     3  import (
     4  	"errors"
     5  	"os"
     6  
     7  	thrown "github.com/0chain/errors"
     8  	"github.com/0chain/gosdk/core/sys"
     9  	"github.com/spf13/viper"
    10  )
    11  
    12  // Network settings from ~/.zcn/network.yaml
    13  type Network struct {
    14  	// Sharders sharder list of blockchain
    15  	Sharders []string
    16  	// Miners miner list of blockchain
    17  	Miners []string
    18  }
    19  
    20  // IsValid check network if it has miners and sharders
    21  func (n *Network) IsValid() bool {
    22  	return n != nil && len(n.Miners) > 0 && len(n.Sharders) > 0
    23  }
    24  
    25  // LoadNetworkFile load and parse Network from file
    26  //   - file is the path of the file (full path)
    27  func LoadNetworkFile(file string) (Network, error) {
    28  
    29  	var network Network
    30  	var err error
    31  
    32  	_, err = sys.Files.Stat(file)
    33  
    34  	if err != nil {
    35  		if errors.Is(err, os.ErrNotExist) {
    36  			return network, thrown.Throw(ErrMssingConfig, file)
    37  		}
    38  		return network, err
    39  	}
    40  
    41  	v := viper.New()
    42  
    43  	v.SetConfigFile(file)
    44  
    45  	if err := v.ReadInConfig(); err != nil {
    46  		return network, thrown.Throw(ErrBadParsing, err.Error())
    47  	}
    48  
    49  	return LoadNetwork(v), nil
    50  }
    51  
    52  // LoadNetwork load and parse network
    53  func LoadNetwork(v Reader) Network {
    54  	return Network{
    55  		Sharders: v.GetStringSlice("sharders"),
    56  		Miners:   v.GetStringSlice("miners"),
    57  	}
    58  }