Documentation ¶
Index ¶
- func ErrNoData() error
- func GetCertifiedCommit(h int64, client rpcclient.Client, cert lite.Verifier) (types.SignedHeader, 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]*rpc.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 KeyProof
- type Wrapper
- func (w Wrapper) ABCIQuery(path string, data cmn.HexBytes) (*ctypes.ResultABCIQuery, error)
- func (w Wrapper) ABCIQueryWithOptions(path string, data cmn.HexBytes, opts rpcclient.ABCIQueryOptions) (*ctypes.ResultABCIQuery, error)
- func (w Wrapper) Block(height *int64) (*ctypes.ResultBlock, error)
- func (w Wrapper) BlockchainInfo(minHeight, maxHeight int64) (*ctypes.ResultBlockchainInfo, error)
- func (w Wrapper) Commit(height *int64) (*ctypes.ResultCommit, error)
- func (w Wrapper) Tx(hash []byte, prove bool) (*ctypes.ResultTx, 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 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) (*lite.DynamicVerifier, error)
func RPCRoutes ¶
RPCRoutes just routes everything to the given client, as if it were a tendermint fullnode.
if we want security, the client must implement it as a secure client
func StartProxy ¶
StartProxy will start the websocket manager on the client, set up the rpc routes to proxy via the given client, and start up an http/rpc server on the location given by bind (eg. :1234)
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 KeyProof ¶ added in v0.16.0
type KeyProof interface { // Verify verfies the proof is valid. To verify absence, // the value should be nil. Verify(key, value, root []byte) error // Root returns the root hash of the proof. Root() []byte // Serialize itself Bytes() []byte }
KeyProof represents a proof of existence or absence of a single key. Copied from iavl repo. TODO
func GetWithProof ¶
func GetWithProof(key []byte, reqHeight int64, node rpcclient.Client, cert lite.Verifier) ( val cmn.HexBytes, height int64, proof KeyProof, 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. If val is non-empty, proof should be KeyExistsProof If val is empty, proof should be KeyMissingProof
func GetWithProofOptions ¶
func GetWithProofOptions(path string, key []byte, opts rpcclient.ABCIQueryOptions, node rpcclient.Client, cert lite.Verifier) ( *ctypes.ResultABCIQuery, KeyProof, error)
GetWithProofOptions is useful if you want full access to the ABCIQueryOptions
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 client.
If it is wrapping an HTTP rpcclient, it will also wrap the websocket interface
func (Wrapper) ABCIQuery ¶
ABCIQuery uses default options for the ABCI query and verifies the returned proof
func (Wrapper) ABCIQueryWithOptions ¶
func (w Wrapper) ABCIQueryWithOptions(path string, data cmn.HexBytes, opts rpcclient.ABCIQueryOptions) (*ctypes.ResultABCIQuery, error)
ABCIQueryWithOptions exposes all options for the ABCI query and verifies the returned proof
func (Wrapper) Block ¶
func (w Wrapper) Block(height *int64) (*ctypes.ResultBlock, error)
Block returns an entire block and verifies all signatures
func (Wrapper) BlockchainInfo ¶
func (w Wrapper) BlockchainInfo(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