package light
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/tendermint/tendermint/light/provider"
|
|
"github.com/tendermint/tendermint/light/provider/http"
|
|
"github.com/tendermint/tendermint/light/store"
|
|
)
|
|
|
|
// NewHTTPClient initiates an instance of a light client using HTTP addresses
|
|
// for both the primary provider and witnesses of the light client. A trusted
|
|
// header and hash must be passed to initialize the client.
|
|
//
|
|
// See all Option(s) for the additional configuration.
|
|
// See NewClient.
|
|
func NewHTTPClient(
|
|
ctx context.Context,
|
|
chainID string,
|
|
trustOptions TrustOptions,
|
|
primaryAddress string,
|
|
witnessesAddresses []string,
|
|
trustedStore store.Store,
|
|
options ...Option) (*Client, error) {
|
|
|
|
providers, err := providersFromAddresses(append(witnessesAddresses, primaryAddress), chainID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return NewClient(
|
|
ctx,
|
|
chainID,
|
|
trustOptions,
|
|
providers[len(providers)-1],
|
|
providers[:len(providers)-1],
|
|
trustedStore,
|
|
options...)
|
|
}
|
|
|
|
// NewHTTPClientFromTrustedStore initiates an instance of a light client using
|
|
// HTTP addresses for both the primary provider and witnesses and uses a
|
|
// trusted store as the root of trust.
|
|
//
|
|
// See all Option(s) for the additional configuration.
|
|
// See NewClientFromTrustedStore.
|
|
func NewHTTPClientFromTrustedStore(
|
|
chainID string,
|
|
trustingPeriod time.Duration,
|
|
primaryAddress string,
|
|
witnessesAddresses []string,
|
|
trustedStore store.Store,
|
|
options ...Option) (*Client, error) {
|
|
|
|
providers, err := providersFromAddresses(append(witnessesAddresses, primaryAddress), chainID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return NewClientFromTrustedStore(
|
|
chainID,
|
|
trustingPeriod,
|
|
providers[len(providers)-1],
|
|
providers[:len(providers)-1],
|
|
trustedStore,
|
|
options...)
|
|
}
|
|
|
|
func providersFromAddresses(addrs []string, chainID string) ([]provider.Provider, error) {
|
|
providers := make([]provider.Provider, len(addrs))
|
|
for idx, address := range addrs {
|
|
p, err := http.New(chainID, address)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
providers[idx] = p
|
|
}
|
|
return providers, nil
|
|
}
|