Documentation

Overview

    Package les implements the Light Ethereum Subprotocol.

    Package light implements on-demand retrieval capable state and chain objects for the Ethereum Light Client.

    Package les implements the Light Ethereum Subprotocol.

    Package les implements the Light Ethereum Subprotocol.

    Package light implements on-demand retrieval capable state and chain objects for the Ethereum Light Client.

    Package les implements the Light Ethereum Subprotocol.

    Package les implements the Light Ethereum Subprotocol.

    Package les implements the Light Ethereum Subprotocol.

    Package les implements the Light Ethereum Subprotocol.

    Package les implements the Light Ethereum Subprotocol.

    Index

    Constants

    View Source
    const (
    	MaxHeaderFetch       = 192 // Amount of block headers to be fetched per retrieval request
    	MaxBodyFetch         = 32  // Amount of block bodies to be fetched per retrieval request
    	MaxReceiptFetch      = 128 // Amount of transaction receipts to allow fetching per request
    	MaxCodeFetch         = 64  // Amount of contract codes to allow fetching per request
    	MaxProofsFetch       = 64  // Amount of merkle proofs to be fetched per retrieval request
    	MaxHeaderProofsFetch = 64  // Amount of merkle proofs to be fetched per retrieval request
    	MaxTxSend            = 64  // Amount of transactions to be send per request
    
    )
    View Source
    const (
    	MsgBlockBodies = iota
    	MsgCode
    	MsgReceipts
    	MsgProofs
    	MsgHeaderProofs
    )
    View Source
    const (
    	NetworkId          = 1
    	ProtocolMaxMsgSize = 10 * 1024 * 1024 // Maximum cap on the size of a protocol message
    )
    View Source
    const (
    	// Protocol messages belonging to LPV1
    	StatusMsg          = 0x00
    	AnnounceMsg        = 0x01
    	GetBlockHeadersMsg = 0x02
    	BlockHeadersMsg    = 0x03
    	GetBlockBodiesMsg  = 0x04
    	BlockBodiesMsg     = 0x05
    	GetReceiptsMsg     = 0x06
    	ReceiptsMsg        = 0x07
    	GetProofsMsg       = 0x08
    	ProofsMsg          = 0x09
    	GetCodeMsg         = 0x0a
    	CodeMsg            = 0x0b
    	SendTxMsg          = 0x0c
    	GetHeaderProofsMsg = 0x0d
    	HeaderProofsMsg    = 0x0e
    )

      les protocol message codes

      View Source
      const (
      	ErrMsgTooLarge = iota
      	ErrDecode
      	ErrInvalidMsgCode
      	ErrProtocolVersionMismatch
      	ErrNetworkIdMismatch
      	ErrGenesisBlockMismatch
      	ErrNoStatusMsg
      	ErrExtraStatusMsg
      	ErrSuspendedPeer
      	ErrUselessPeer
      	ErrRequestRejected
      	ErrUnexpectedResponse
      	ErrInvalidResponse
      	ErrTooManyTimeouts
      	ErrHandshakeMissingKey
      )

      Variables

      View Source
      var ErrNoPeers = errors.New("no suitable peers available")

        ErrNoPeers is returned if no peers capable of serving a queued request are available

        View Source
        var ProtocolLengths = []uint64{15}

          Number of implemented message corresponding to different protocol versions.

          View Source
          var ProtocolVersions = []uint{lpv1}

            Supported versions of the les protocol (first is primary).

            Functions

            This section is empty.

            Types

            type BlockChain

            type BlockChain interface {
            	HasHeader(hash common.Hash) bool
            	GetHeader(hash common.Hash, number uint64) *types.Header
            	GetHeaderByHash(hash common.Hash) *types.Header
            	CurrentHeader() *types.Header
            	GetTdByHash(hash common.Hash) *big.Int
            	InsertHeaderChain(chain []*types.Header, checkFreq int) (int, error)
            	Rollback(chain []common.Hash)
            	Status() (td *big.Int, currentBlock common.Hash, genesisBlock common.Hash)
            	GetHeaderByNumber(number uint64) *types.Header
            	GetBlockHashesFromHash(hash common.Hash, max uint64) []common.Hash
            	LastBlockHash() common.Hash
            	Genesis() *types.Block
            }

            type BlockRequest

            type BlockRequest light.BlockRequest

              BlockRequest is the ODR request type for block bodies

              func (*BlockRequest) CanSend

              func (r *BlockRequest) CanSend(peer *peer) bool

                CanSend tells if a certain peer is suitable for serving the given request

                func (*BlockRequest) GetCost

                func (r *BlockRequest) GetCost(peer *peer) uint64

                  GetCost returns the cost of the given ODR request according to the serving peer's cost table (implementation of LesOdrRequest)

                  func (*BlockRequest) Request

                  func (r *BlockRequest) Request(reqID uint64, peer *peer) error

                    Request sends an ODR request to the LES network (implementation of LesOdrRequest)

                    func (*BlockRequest) Validate

                    func (r *BlockRequest) Validate(db ethdb.Database, msg *Msg) error

                      Valid processes an ODR request reply message from the LES network returns true and stores results in memory if the message was a valid reply to the request (implementation of LesOdrRequest)

                      type ChtReq

                      type ChtReq struct {
                      	ChtNum, BlockNum, FromLevel uint64
                      }

                      type ChtRequest

                      type ChtRequest light.ChtRequest

                        ODR request type for requesting headers by Canonical Hash Trie, see LesOdrRequest interface

                        func (*ChtRequest) CanSend

                        func (r *ChtRequest) CanSend(peer *peer) bool

                          CanSend tells if a certain peer is suitable for serving the given request

                          func (*ChtRequest) GetCost

                          func (r *ChtRequest) GetCost(peer *peer) uint64

                            GetCost returns the cost of the given ODR request according to the serving peer's cost table (implementation of LesOdrRequest)

                            func (*ChtRequest) Request

                            func (r *ChtRequest) Request(reqID uint64, peer *peer) error

                              Request sends an ODR request to the LES network (implementation of LesOdrRequest)

                              func (*ChtRequest) Validate

                              func (r *ChtRequest) Validate(db ethdb.Database, msg *Msg) error

                                Valid processes an ODR request reply message from the LES network returns true and stores results in memory if the message was a valid reply to the request (implementation of LesOdrRequest)

                                type ChtResp

                                type ChtResp struct {
                                	Header *types.Header
                                	Proof  []rlp.RawValue
                                }

                                type CodeData

                                type CodeData []struct {
                                	Value []byte
                                }

                                  CodeData is the network response packet for a node data retrieval.

                                  type CodeReq

                                  type CodeReq struct {
                                  	BHash  common.Hash
                                  	AccKey []byte
                                  }

                                  type CodeRequest

                                  type CodeRequest light.CodeRequest

                                    ODR request type for node data (used for retrieving contract code), see LesOdrRequest interface

                                    func (*CodeRequest) CanSend

                                    func (r *CodeRequest) CanSend(peer *peer) bool

                                      CanSend tells if a certain peer is suitable for serving the given request

                                      func (*CodeRequest) GetCost

                                      func (r *CodeRequest) GetCost(peer *peer) uint64

                                        GetCost returns the cost of the given ODR request according to the serving peer's cost table (implementation of LesOdrRequest)

                                        func (*CodeRequest) Request

                                        func (r *CodeRequest) Request(reqID uint64, peer *peer) error

                                          Request sends an ODR request to the LES network (implementation of LesOdrRequest)

                                          func (*CodeRequest) Validate

                                          func (r *CodeRequest) Validate(db ethdb.Database, msg *Msg) error

                                            Valid processes an ODR request reply message from the LES network returns true and stores results in memory if the message was a valid reply to the request (implementation of LesOdrRequest)

                                            type LesApiBackend

                                            type LesApiBackend struct {
                                            	// contains filtered or unexported fields
                                            }

                                            func (*LesApiBackend) AccountManager

                                            func (b *LesApiBackend) AccountManager() *accounts.Manager

                                            func (*LesApiBackend) BlockByNumber

                                            func (b *LesApiBackend) BlockByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Block, error)

                                            func (*LesApiBackend) ChainConfig

                                            func (b *LesApiBackend) ChainConfig() *params.ChainConfig

                                            func (*LesApiBackend) ChainDb

                                            func (b *LesApiBackend) ChainDb() ethdb.Database

                                            func (*LesApiBackend) CurrentBlock

                                            func (b *LesApiBackend) CurrentBlock() *types.Block

                                            func (*LesApiBackend) Downloader

                                            func (b *LesApiBackend) Downloader() *downloader.Downloader

                                            func (*LesApiBackend) EventMux

                                            func (b *LesApiBackend) EventMux() *event.TypeMux

                                            func (*LesApiBackend) GetBlock

                                            func (b *LesApiBackend) GetBlock(ctx context.Context, blockHash common.Hash) (*types.Block, error)

                                            func (*LesApiBackend) GetEVM

                                            func (b *LesApiBackend) GetEVM(ctx context.Context, msg core.Message, state ethapi.State, header *types.Header, vmCfg vm.Config) (*vm.EVM, func() error, error)

                                            func (*LesApiBackend) GetPoolNonce

                                            func (b *LesApiBackend) GetPoolNonce(ctx context.Context, addr common.Address) (uint64, error)

                                            func (*LesApiBackend) GetPoolTransaction

                                            func (b *LesApiBackend) GetPoolTransaction(txHash common.Hash) *types.Transaction

                                            func (*LesApiBackend) GetPoolTransactions

                                            func (b *LesApiBackend) GetPoolTransactions() (types.Transactions, error)

                                            func (*LesApiBackend) GetReceipts

                                            func (b *LesApiBackend) GetReceipts(ctx context.Context, blockHash common.Hash) (types.Receipts, error)

                                            func (*LesApiBackend) GetTd

                                            func (b *LesApiBackend) GetTd(blockHash common.Hash) *big.Int

                                            func (*LesApiBackend) HeaderByNumber

                                            func (b *LesApiBackend) HeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Header, error)

                                            func (*LesApiBackend) ProtocolVersion

                                            func (b *LesApiBackend) ProtocolVersion() int

                                            func (*LesApiBackend) RemoveTx

                                            func (b *LesApiBackend) RemoveTx(txHash common.Hash)

                                            func (*LesApiBackend) SendTx

                                            func (b *LesApiBackend) SendTx(ctx context.Context, signedTx *types.Transaction) error

                                            func (*LesApiBackend) SetHead

                                            func (b *LesApiBackend) SetHead(number uint64)

                                            func (*LesApiBackend) StateAndHeaderByNumber

                                            func (b *LesApiBackend) StateAndHeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (ethapi.State, *types.Header, error)

                                            func (*LesApiBackend) Stats

                                            func (b *LesApiBackend) Stats() (pending int, queued int)

                                            func (*LesApiBackend) SuggestPrice

                                            func (b *LesApiBackend) SuggestPrice(ctx context.Context) (*big.Int, error)

                                            func (*LesApiBackend) TxPoolContent

                                            type LesOdr

                                            type LesOdr struct {
                                            	light.OdrBackend
                                            	// contains filtered or unexported fields
                                            }

                                            func NewLesOdr

                                            func NewLesOdr(db ethdb.Database) *LesOdr

                                            func (*LesOdr) Database

                                            func (odr *LesOdr) Database() ethdb.Database

                                            func (*LesOdr) Deliver

                                            func (self *LesOdr) Deliver(peer *peer, msg *Msg) error

                                              Deliver is called by the LES protocol manager to deliver ODR reply messages to waiting requests

                                              func (*LesOdr) Retrieve

                                              func (self *LesOdr) Retrieve(ctx context.Context, req light.OdrRequest) (err error)

                                                Retrieve tries to fetch an object from the LES network. If the network retrieval was successful, it stores the object in local db.

                                                func (*LesOdr) Stop

                                                func (odr *LesOdr) Stop()

                                                type LesOdrRequest

                                                type LesOdrRequest interface {
                                                	GetCost(*peer) uint64
                                                	CanSend(*peer) bool
                                                	Request(uint64, *peer) error
                                                	Validate(ethdb.Database, *Msg) error
                                                }

                                                func LesRequest

                                                func LesRequest(req light.OdrRequest) LesOdrRequest

                                                type LesServer

                                                type LesServer struct {
                                                	// contains filtered or unexported fields
                                                }

                                                func NewLesServer

                                                func NewLesServer(eth *eth.Ethereum, config *eth.Config) (*LesServer, error)

                                                func (*LesServer) Protocols

                                                func (s *LesServer) Protocols() []p2p.Protocol

                                                func (*LesServer) Start

                                                func (s *LesServer) Start(srvr *p2p.Server)

                                                  Start starts the LES server

                                                  func (*LesServer) Stop

                                                  func (s *LesServer) Stop()

                                                    Stop stops the LES service

                                                    type LesTxRelay

                                                    type LesTxRelay struct {
                                                    	// contains filtered or unexported fields
                                                    }

                                                    func NewLesTxRelay

                                                    func NewLesTxRelay() *LesTxRelay

                                                    func (*LesTxRelay) Discard

                                                    func (self *LesTxRelay) Discard(hashes []common.Hash)

                                                    func (*LesTxRelay) NewHead

                                                    func (self *LesTxRelay) NewHead(head common.Hash, mined []common.Hash, rollback []common.Hash)

                                                    func (*LesTxRelay) Send

                                                    func (self *LesTxRelay) Send(txs types.Transactions)

                                                    type LightDummyAPI

                                                    type LightDummyAPI struct{}

                                                    func (*LightDummyAPI) Coinbase

                                                    func (s *LightDummyAPI) Coinbase() (common.Address, error)

                                                      Coinbase is the address that mining rewards will be send to (alias for Etherbase)

                                                      func (*LightDummyAPI) Etherbase

                                                      func (s *LightDummyAPI) Etherbase() (common.Address, error)

                                                        Etherbase is the address that mining rewards will be send to

                                                        func (*LightDummyAPI) Hashrate

                                                        func (s *LightDummyAPI) Hashrate() hexutil.Uint

                                                          Hashrate returns the POW hashrate

                                                          func (*LightDummyAPI) Mining

                                                          func (s *LightDummyAPI) Mining() bool

                                                            Mining returns an indication if this node is currently mining.

                                                            type LightEthereum

                                                            type LightEthereum struct {
                                                            	ApiBackend *LesApiBackend
                                                            	// contains filtered or unexported fields
                                                            }

                                                            func New

                                                            func New(ctx *node.ServiceContext, config *eth.Config) (*LightEthereum, error)

                                                            func (*LightEthereum) APIs

                                                            func (s *LightEthereum) APIs() []rpc.API

                                                              APIs returns the collection of RPC services the ethereum package offers. NOTE, some of these services probably need to be moved to somewhere else.

                                                              func (*LightEthereum) BlockChain

                                                              func (s *LightEthereum) BlockChain() *light.LightChain

                                                              func (*LightEthereum) Downloader

                                                              func (s *LightEthereum) Downloader() *downloader.Downloader

                                                              func (*LightEthereum) Engine

                                                              func (s *LightEthereum) Engine() consensus.Engine

                                                              func (*LightEthereum) EventMux

                                                              func (s *LightEthereum) EventMux() *event.TypeMux

                                                              func (*LightEthereum) LesVersion

                                                              func (s *LightEthereum) LesVersion() int

                                                              func (*LightEthereum) Protocols

                                                              func (s *LightEthereum) Protocols() []p2p.Protocol

                                                                Protocols implements node.Service, returning all the currently configured network protocols to start.

                                                                func (*LightEthereum) ResetWithGenesisBlock

                                                                func (s *LightEthereum) ResetWithGenesisBlock(gb *types.Block)

                                                                func (*LightEthereum) Start

                                                                func (s *LightEthereum) Start(srvr *p2p.Server) error

                                                                  Start implements node.Service, starting all internal goroutines needed by the Ethereum protocol implementation.

                                                                  func (*LightEthereum) Stop

                                                                  func (s *LightEthereum) Stop() error

                                                                    Stop implements node.Service, terminating all internal goroutines used by the Ethereum protocol.

                                                                    func (*LightEthereum) TxPool

                                                                    func (s *LightEthereum) TxPool() *light.TxPool

                                                                    type Msg

                                                                    type Msg struct {
                                                                    	MsgType int
                                                                    	ReqID   uint64
                                                                    	Obj     interface{}
                                                                    }

                                                                      Msg encodes a LES message that delivers reply data for a request

                                                                      type ProofReq

                                                                      type ProofReq struct {
                                                                      	BHash       common.Hash
                                                                      	AccKey, Key []byte
                                                                      	FromLevel   uint
                                                                      }

                                                                      type ProtocolManager

                                                                      type ProtocolManager struct {
                                                                      	SubProtocols []p2p.Protocol
                                                                      	// contains filtered or unexported fields
                                                                      }

                                                                      func NewProtocolManager

                                                                      func NewProtocolManager(chainConfig *params.ChainConfig, lightSync bool, networkId uint64, mux *event.TypeMux, engine consensus.Engine, blockchain BlockChain, txpool txPool, chainDb ethdb.Database, odr *LesOdr, txrelay *LesTxRelay) (*ProtocolManager, error)

                                                                        NewProtocolManager returns a new ethereum sub protocol manager. The Ethereum sub protocol manages peers capable with the ethereum network.

                                                                        func (*ProtocolManager) NodeInfo

                                                                        func (self *ProtocolManager) NodeInfo() *eth.EthNodeInfo

                                                                          NodeInfo retrieves some protocol metadata about the running host node.

                                                                          func (*ProtocolManager) Start

                                                                          func (pm *ProtocolManager) Start(srvr *p2p.Server)

                                                                          func (*ProtocolManager) Stop

                                                                          func (pm *ProtocolManager) Stop()

                                                                          type ReceiptsRequest

                                                                          type ReceiptsRequest light.ReceiptsRequest

                                                                            ReceiptsRequest is the ODR request type for block receipts by block hash

                                                                            func (*ReceiptsRequest) CanSend

                                                                            func (r *ReceiptsRequest) CanSend(peer *peer) bool

                                                                              CanSend tells if a certain peer is suitable for serving the given request

                                                                              func (*ReceiptsRequest) GetCost

                                                                              func (r *ReceiptsRequest) GetCost(peer *peer) uint64

                                                                                GetCost returns the cost of the given ODR request according to the serving peer's cost table (implementation of LesOdrRequest)

                                                                                func (*ReceiptsRequest) Request

                                                                                func (r *ReceiptsRequest) Request(reqID uint64, peer *peer) error

                                                                                  Request sends an ODR request to the LES network (implementation of LesOdrRequest)

                                                                                  func (*ReceiptsRequest) Validate

                                                                                  func (r *ReceiptsRequest) Validate(db ethdb.Database, msg *Msg) error

                                                                                    Valid processes an ODR request reply message from the LES network returns true and stores results in memory if the message was a valid reply to the request (implementation of LesOdrRequest)

                                                                                    type RequestCostList

                                                                                    type RequestCostList []struct {
                                                                                    	MsgCode, BaseCost, ReqCost uint64
                                                                                    }

                                                                                    type TrieRequest

                                                                                    type TrieRequest light.TrieRequest

                                                                                      ODR request type for state/storage trie entries, see LesOdrRequest interface

                                                                                      func (*TrieRequest) CanSend

                                                                                      func (r *TrieRequest) CanSend(peer *peer) bool

                                                                                        CanSend tells if a certain peer is suitable for serving the given request

                                                                                        func (*TrieRequest) GetCost

                                                                                        func (r *TrieRequest) GetCost(peer *peer) uint64

                                                                                          GetCost returns the cost of the given ODR request according to the serving peer's cost table (implementation of LesOdrRequest)

                                                                                          func (*TrieRequest) Request

                                                                                          func (r *TrieRequest) Request(reqID uint64, peer *peer) error

                                                                                            Request sends an ODR request to the LES network (implementation of LesOdrRequest)

                                                                                            func (*TrieRequest) Validate

                                                                                            func (r *TrieRequest) Validate(db ethdb.Database, msg *Msg) error

                                                                                              Valid processes an ODR request reply message from the LES network returns true and stores results in memory if the message was a valid reply to the request (implementation of LesOdrRequest)

                                                                                              Directories

                                                                                              Path Synopsis
                                                                                              Package flowcontrol implements a client side flow control mechanism Package flowcontrol implements a client side flow control mechanism
                                                                                              Package flowcontrol implements a client side flow control mechanism Package flowcontrol implements a client side flow control mechanism