Documentation ¶
Index ¶
- func ErrNoData() error
- func GetCertifiedCommit(h int64, client rpcclient.Client, cert lite.Verifier) (types.SignedHeader, error)
- func GetWithProof(prt *merkle.ProofRuntime, key []byte, reqHeight int64, node rpcclient.Client, ...) (val bytes.HexBytes, height int64, proof *merkle.Proof, err error)
- func GetWithProofOptions(prt *merkle.ProofRuntime, path string, key []byte, ...) (*ctypes.ResultABCIQuery, error)
- func IsErrNoData(err error) bool
- func NewVerifier(chainID, rootDir string, client lclient.SignStatusClient, logger log.Logger, ...) (*lite.DynamicVerifier, error)
- func RPCRoutes(c rpcclient.Client) map[string]*rpcserver.RPCFunc
- func StartProxy(c rpcclient.Client, listenAddr string, logger log.Logger, ...) error
- func ValidateBlock(meta *types.Block, sh types.SignedHeader) error
- func ValidateBlockMeta(meta *types.BlockMeta, sh types.SignedHeader) error
- func ValidateHeader(head *types.Header, sh types.SignedHeader) error
- type Wrapper
- func (w Wrapper) ABCIQuery(ctx context.Context, path string, data bytes.HexBytes) (*ctypes.ResultABCIQuery, error)
- func (w Wrapper) ABCIQueryWithOptions(ctx context.Context, path string, data bytes.HexBytes, ...) (*ctypes.ResultABCIQuery, error)
- func (w Wrapper) Block(ctx context.Context, height *int64) (*ctypes.ResultBlock, error)
- func (w Wrapper) BlockchainInfo(ctx context.Context, minHeight, maxHeight int64) (*ctypes.ResultBlockchainInfo, error)
- func (w Wrapper) Commit(ctx context.Context, height *int64) (*ctypes.ResultCommit, error)
- func (w Wrapper) RegisterOpDecoder(typ string, dec merkle.OpDecoder)
- func (w Wrapper) SubscribeWS(ctx *rpctypes.Context, query string) (*ctypes.ResultSubscribe, error)
- func (w Wrapper) Tx(ctx context.Context, hash []byte, prove bool) (*ctypes.ResultTx, error)
- func (w Wrapper) UnsubscribeAllWS(ctx *rpctypes.Context) (*ctypes.ResultUnsubscribe, error)
- func (w Wrapper) UnsubscribeWS(ctx *rpctypes.Context, query string) (*ctypes.ResultUnsubscribe, error)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GetCertifiedCommit ¶
func GetCertifiedCommit(h int64, client rpcclient.Client, cert lite.Verifier) (types.SignedHeader, error)
GetCertifiedCommit gets the signed header for a given height and certifies it. Returns error if unable to get a proven header.
func GetWithProof ¶
func GetWithProof(prt *merkle.ProofRuntime, key []byte, reqHeight int64, node rpcclient.Client, cert lite.Verifier) ( val bytes.HexBytes, height int64, proof *merkle.Proof, err error)
GetWithProof will query the key on the given node, and verify it has a valid proof, as defined by the Verifier.
If there is any error in checking, returns an error.
func GetWithProofOptions ¶
func GetWithProofOptions(prt *merkle.ProofRuntime, path string, key []byte, opts rpcclient.ABCIQueryOptions, node rpcclient.Client, cert lite.Verifier) ( *ctypes.ResultABCIQuery, error)
GetWithProofOptions is useful if you want full access to the ABCIQueryOptions. XXX Usage of path? It's not used, and sometimes it's /, sometimes /key, sometimes /store.
func IsErrNoData ¶
IsErrNoData checks whether an error is due to a query returning empty data
func NewVerifier ¶
func NewVerifier(chainID, rootDir string, client lclient.SignStatusClient, logger log.Logger, cacheSize int) (*lite.DynamicVerifier, error)
func RPCRoutes ¶
RPCRoutes just routes everything to the given clients, as if it were a tendermint fullnode.
if we want security, the clients must implement it as a secure clients
func StartProxy ¶
func StartProxy(c rpcclient.Client, listenAddr string, logger log.Logger, maxOpenConnections int) error
StartProxy will start the websocket manager on the clients, set up the rpc routes to proxy via the given clients, and start up an http/rpc server on the location given by bind (eg. :1234) NOTE: This function blocks - you may want to call it in a go-routine.
func ValidateBlock ¶
func ValidateBlock(meta *types.Block, sh types.SignedHeader) error
func ValidateBlockMeta ¶
func ValidateBlockMeta(meta *types.BlockMeta, sh types.SignedHeader) error
func ValidateHeader ¶
func ValidateHeader(head *types.Header, sh types.SignedHeader) error
Types ¶
type Wrapper ¶
Wrapper wraps a rpcclient with a Verifier and double-checks any input that is provable before passing it along. Allows you to make any rpcclient fully secure.
func SecureClient ¶
func SecureClient(c rpcclient.Client, cert *lite.DynamicVerifier) Wrapper
SecureClient uses a given Verifier to wrap an connection to an untrusted host and return a cryptographically secure rpc clients.
If it is wrapping an HTTP rpcclient, it will also wrap the websocket interface
func (Wrapper) ABCIQuery ¶
func (w Wrapper) ABCIQuery(ctx context.Context, path string, data bytes.HexBytes) (*ctypes.ResultABCIQuery, error)
ABCIQuery uses default options for the ABCI query and verifies the returned proof
func (Wrapper) ABCIQueryWithOptions ¶
func (w Wrapper) ABCIQueryWithOptions(ctx context.Context, path string, data bytes.HexBytes, opts rpcclient.ABCIQueryOptions) (*ctypes.ResultABCIQuery, error)
ABCIQueryWithOptions exposes all options for the ABCI query and verifies the returned proof
func (Wrapper) BlockchainInfo ¶
func (w Wrapper) BlockchainInfo(ctx context.Context, minHeight, maxHeight int64) (*ctypes.ResultBlockchainInfo, error)
BlockchainInfo requests a list of headers and verifies them all... Rather expensive.
TODO: optimize this if used for anything needing performance
func (Wrapper) Commit ¶
Commit downloads the Commit and certifies it with the lite.
This is the foundation for all other verification in this module
func (Wrapper) RegisterOpDecoder ¶
func (Wrapper) SubscribeWS ¶
SubscribeWS subscribes for events using the given query and remote address as a subscriber, but does not verify responses (UNSAFE)!
func (Wrapper) UnsubscribeAllWS ¶
UnsubscribeAllWS calls original clients's UnsubscribeAll using remote address as a subscriber.
func (Wrapper) UnsubscribeWS ¶
func (w Wrapper) UnsubscribeWS(ctx *rpctypes.Context, query string) (*ctypes.ResultUnsubscribe, error)
UnsubscribeWS calls original clients's Unsubscribe using remote address as a subscriber.