github.com/soomindae/tendermint@v0.0.5-0.20210528140126-84a0c70c8162/light/setup.go (about)

     1  package light
     2  
     3  import (
     4  	"context"
     5  	"time"
     6  
     7  	"github.com/soomindae/tendermint/light/provider"
     8  	"github.com/soomindae/tendermint/light/provider/http"
     9  	"github.com/soomindae/tendermint/light/store"
    10  )
    11  
    12  // NewHTTPClient initiates an instance of a light client using HTTP addresses
    13  // for both the primary provider and witnesses of the light client. A trusted
    14  // header and hash must be passed to initialize the client.
    15  //
    16  // See all Option(s) for the additional configuration.
    17  // See NewClient.
    18  func NewHTTPClient(
    19  	ctx context.Context,
    20  	chainID string,
    21  	trustOptions TrustOptions,
    22  	primaryAddress string,
    23  	witnessesAddresses []string,
    24  	trustedStore store.Store,
    25  	options ...Option) (*Client, error) {
    26  
    27  	providers, err := providersFromAddresses(append(witnessesAddresses, primaryAddress), chainID)
    28  	if err != nil {
    29  		return nil, err
    30  	}
    31  
    32  	return NewClient(
    33  		ctx,
    34  		chainID,
    35  		trustOptions,
    36  		providers[len(providers)-1],
    37  		providers[:len(providers)-1],
    38  		trustedStore,
    39  		options...)
    40  }
    41  
    42  // NewHTTPClientFromTrustedStore initiates an instance of a light client using
    43  // HTTP addresses for both the primary provider and witnesses and uses a
    44  // trusted store as the root of trust.
    45  //
    46  // See all Option(s) for the additional configuration.
    47  // See NewClientFromTrustedStore.
    48  func NewHTTPClientFromTrustedStore(
    49  	chainID string,
    50  	trustingPeriod time.Duration,
    51  	primaryAddress string,
    52  	witnessesAddresses []string,
    53  	trustedStore store.Store,
    54  	options ...Option) (*Client, error) {
    55  
    56  	providers, err := providersFromAddresses(append(witnessesAddresses, primaryAddress), chainID)
    57  	if err != nil {
    58  		return nil, err
    59  	}
    60  
    61  	return NewClientFromTrustedStore(
    62  		chainID,
    63  		trustingPeriod,
    64  		providers[len(providers)-1],
    65  		providers[:len(providers)-1],
    66  		trustedStore,
    67  		options...)
    68  }
    69  
    70  func providersFromAddresses(addrs []string, chainID string) ([]provider.Provider, error) {
    71  	providers := make([]provider.Provider, len(addrs))
    72  	for idx, address := range addrs {
    73  		p, err := http.New(chainID, address)
    74  		if err != nil {
    75  			return nil, err
    76  		}
    77  		providers[idx] = p
    78  	}
    79  	return providers, nil
    80  }