les

package
v1.13.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 14, 2023 License: GPL-3.0 Imports: 65 Imported by: 0

Documentation

Overview

Package les implements the Light Ethereum Subprotocol.

Index

Constants

View Source
const (
	MsgBlockHeaders = iota
	MsgBlockBodies
	MsgCode
	MsgReceipts
	MsgProofsV2
	MsgHelperTrieProofs
	MsgTxStatus
)
View Source
const (
	NetworkId          = 1
	ProtocolMaxMsgSize = 10 * 1024 * 1024 // Maximum cap on the size of a protocol message

)
View Source
const (
	// Protocol messages inherited from LPV1
	StatusMsg          = 0x00
	AnnounceMsg        = 0x01
	GetBlockHeadersMsg = 0x02
	BlockHeadersMsg    = 0x03
	GetBlockBodiesMsg  = 0x04
	BlockBodiesMsg     = 0x05
	GetReceiptsMsg     = 0x06
	ReceiptsMsg        = 0x07
	GetCodeMsg         = 0x0a
	CodeMsg            = 0x0b
	// Protocol messages introduced in LPV2
	GetProofsV2Msg         = 0x0f
	ProofsV2Msg            = 0x10
	GetHelperTrieProofsMsg = 0x11
	HelperTrieProofsMsg    = 0x12
	SendTxV2Msg            = 0x13
	GetTxStatusMsg         = 0x14
	TxStatusMsg            = 0x15
	// Protocol messages introduced in LPV3
	StopMsg   = 0x16
	ResumeMsg = 0x17
)

les protocol message codes

View Source
const (
	ErrMsgTooLarge = iota
	ErrDecode
	ErrInvalidMsgCode
	ErrProtocolVersionMismatch
	ErrNetworkIdMismatch
	ErrGenesisBlockMismatch
	ErrNoStatusMsg
	ErrExtraStatusMsg
	ErrSuspendedPeer
	ErrUselessPeer
	ErrRequestRejected
	ErrUnexpectedResponse
	ErrInvalidResponse
	ErrTooManyTimeouts
	ErrMissingKey
	ErrForkIDRejected
)
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
	MaxHelperTrieProofsFetch = 64  // Amount of helper tries to be fetched per retrieval request
	MaxTxSend                = 64  // Amount of transactions to be send per request
	MaxTxStatus              = 256 // Amount of transactions to queried per request
)

Variables

View Source
var (
	ClientProtocolVersions = []uint{lpv2, lpv3, lpv4}
	ServerProtocolVersions = []uint{lpv2, lpv3, lpv4}
)

Supported versions of the les protocol (first is primary)

View Source
var Les3 = map[uint64]RequestType{
	GetBlockHeadersMsg: {
		Name:             "block header request",
		MaxCount:         MaxHeaderFetch,
		InPacketsMeter:   miscInHeaderPacketsMeter,
		InTrafficMeter:   miscInHeaderTrafficMeter,
		OutPacketsMeter:  miscOutHeaderPacketsMeter,
		OutTrafficMeter:  miscOutHeaderTrafficMeter,
		ServingTimeMeter: miscServingTimeHeaderTimer,
		Handle:           handleGetBlockHeaders,
	},
	GetBlockBodiesMsg: {
		Name:             "block bodies request",
		MaxCount:         MaxBodyFetch,
		InPacketsMeter:   miscInBodyPacketsMeter,
		InTrafficMeter:   miscInBodyTrafficMeter,
		OutPacketsMeter:  miscOutBodyPacketsMeter,
		OutTrafficMeter:  miscOutBodyTrafficMeter,
		ServingTimeMeter: miscServingTimeBodyTimer,
		Handle:           handleGetBlockBodies,
	},
	GetCodeMsg: {
		Name:             "code request",
		MaxCount:         MaxCodeFetch,
		InPacketsMeter:   miscInCodePacketsMeter,
		InTrafficMeter:   miscInCodeTrafficMeter,
		OutPacketsMeter:  miscOutCodePacketsMeter,
		OutTrafficMeter:  miscOutCodeTrafficMeter,
		ServingTimeMeter: miscServingTimeCodeTimer,
		Handle:           handleGetCode,
	},
	GetReceiptsMsg: {
		Name:             "receipts request",
		MaxCount:         MaxReceiptFetch,
		InPacketsMeter:   miscInReceiptPacketsMeter,
		InTrafficMeter:   miscInReceiptTrafficMeter,
		OutPacketsMeter:  miscOutReceiptPacketsMeter,
		OutTrafficMeter:  miscOutReceiptTrafficMeter,
		ServingTimeMeter: miscServingTimeReceiptTimer,
		Handle:           handleGetReceipts,
	},
	GetProofsV2Msg: {
		Name:             "les/2 proofs request",
		MaxCount:         MaxProofsFetch,
		InPacketsMeter:   miscInTrieProofPacketsMeter,
		InTrafficMeter:   miscInTrieProofTrafficMeter,
		OutPacketsMeter:  miscOutTrieProofPacketsMeter,
		OutTrafficMeter:  miscOutTrieProofTrafficMeter,
		ServingTimeMeter: miscServingTimeTrieProofTimer,
		Handle:           handleGetProofs,
	},
	GetHelperTrieProofsMsg: {
		Name:             "helper trie proof request",
		MaxCount:         MaxHelperTrieProofsFetch,
		InPacketsMeter:   miscInHelperTriePacketsMeter,
		InTrafficMeter:   miscInHelperTrieTrafficMeter,
		OutPacketsMeter:  miscOutHelperTriePacketsMeter,
		OutTrafficMeter:  miscOutHelperTrieTrafficMeter,
		ServingTimeMeter: miscServingTimeHelperTrieTimer,
		Handle:           handleGetHelperTrieProofs,
	},
	SendTxV2Msg: {
		Name:             "new transactions",
		MaxCount:         MaxTxSend,
		InPacketsMeter:   miscInTxsPacketsMeter,
		InTrafficMeter:   miscInTxsTrafficMeter,
		OutPacketsMeter:  miscOutTxsPacketsMeter,
		OutTrafficMeter:  miscOutTxsTrafficMeter,
		ServingTimeMeter: miscServingTimeTxTimer,
		Handle:           handleSendTx,
	},
	GetTxStatusMsg: {
		Name:             "transaction status query request",
		MaxCount:         MaxTxStatus,
		InPacketsMeter:   miscInTxStatusPacketsMeter,
		InTrafficMeter:   miscInTxStatusTrafficMeter,
		OutPacketsMeter:  miscOutTxStatusPacketsMeter,
		OutTrafficMeter:  miscOutTxStatusTrafficMeter,
		ServingTimeMeter: miscServingTimeTxStatusTimer,
		Handle:           handleGetTxStatus,
	},
}

Les3 contains the request types supported by les/2 and les/3

View Source
var ProtocolLengths = map[uint]uint64{/* contains filtered or unexported fields */}

ProtocolLengths is the number of implemented message corresponding to different protocol versions.

Functions

func NewFuzzerPeer added in v1.10.0

func NewFuzzerPeer(version int) (p *clientPeer, closer func())

NewFuzzerPeer creates a client peer for test purposes, and also returns a function to close the peer: this is needed to avoid goroutine leaks in the exec queue.

Types

type BlockRequest

type BlockRequest light.BlockRequest

BlockRequest is the ODR request type for block bodies

func (*BlockRequest) CanSend added in v1.5.5

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

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

func (*BlockRequest) GetCost

func (r *BlockRequest) GetCost(peer *serverPeer) 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 *serverPeer) error

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

func (*BlockRequest) Validate added in v1.6.0

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

Validate 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 BloomReq added in v1.7.3

type BloomReq struct {
	BloomTrieNum, BitIdx, SectionIndex, FromLevel uint64
}

type BloomRequest added in v1.7.3

type BloomRequest light.BloomRequest

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

func (*BloomRequest) CanSend added in v1.7.3

func (r *BloomRequest) CanSend(peer *serverPeer) bool

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

func (*BloomRequest) GetCost added in v1.7.3

func (r *BloomRequest) GetCost(peer *serverPeer) uint64

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

func (*BloomRequest) Request added in v1.7.3

func (r *BloomRequest) Request(reqID uint64, peer *serverPeer) error

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

func (*BloomRequest) Validate added in v1.7.3

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

Validate 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 ChtRequest

type ChtRequest light.ChtRequest

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

func (*ChtRequest) CanSend added in v1.5.5

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

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

func (*ChtRequest) GetCost

func (r *ChtRequest) GetCost(peer *serverPeer) 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 *serverPeer) error

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

func (*ChtRequest) Validate added in v1.6.0

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

Validate 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 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
	AccountAddress []byte
}

type CodeRequest

type CodeRequest light.CodeRequest

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

func (*CodeRequest) CanSend added in v1.5.5

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

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

func (*CodeRequest) GetCost

func (r *CodeRequest) GetCost(peer *serverPeer) 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 *serverPeer) error

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

func (*CodeRequest) Validate added in v1.6.0

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

Validate 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 DebugAPI added in v1.10.20

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

DebugAPI provides an API to debug LES light server functionality.

func NewDebugAPI added in v1.10.20

func NewDebugAPI(server *LesServer) *DebugAPI

NewDebugAPI creates a new LES light server debug API.

func (*DebugAPI) FreezeClient added in v1.10.20

func (api *DebugAPI) FreezeClient(node string) error

FreezeClient forces a temporary client freeze which normally happens when the server is overloaded

type Decoder added in v1.10.0

type Decoder interface {
	Decode(val interface{}) error
}

Decoder is implemented by the messages passed to the handler functions

type GetBlockBodiesPacket added in v1.10.0

type GetBlockBodiesPacket struct {
	ReqID  uint64
	Hashes []common.Hash
}

GetBlockBodiesPacket represents a block body request

type GetBlockHeadersData added in v1.10.0

type GetBlockHeadersData struct {
	Origin  hashOrNumber // Block from which to retrieve headers
	Amount  uint64       // Maximum number of headers to retrieve
	Skip    uint64       // Blocks to skip between consecutive headers
	Reverse bool         // Query direction (false = rising towards latest, true = falling towards genesis)
}

GetBlockHeadersData represents a block header query (the request ID is not included)

type GetBlockHeadersPacket added in v1.10.0

type GetBlockHeadersPacket struct {
	ReqID uint64
	Query GetBlockHeadersData
}

GetBlockHeadersPacket represents a block header request

type GetCodePacket added in v1.10.0

type GetCodePacket struct {
	ReqID uint64
	Reqs  []CodeReq
}

GetCodePacket represents a contract code request

type GetHelperTrieProofsPacket added in v1.10.0

type GetHelperTrieProofsPacket struct {
	ReqID uint64
	Reqs  []HelperTrieReq
}

GetHelperTrieProofsPacket represents a helper trie proof request

type GetProofsPacket added in v1.10.0

type GetProofsPacket struct {
	ReqID uint64
	Reqs  []ProofReq
}

GetProofsPacket represents a proof request

type GetReceiptsPacket added in v1.10.0

type GetReceiptsPacket struct {
	ReqID  uint64
	Hashes []common.Hash
}

GetReceiptsPacket represents a block receipts request

type GetTxStatusPacket added in v1.10.0

type GetTxStatusPacket struct {
	ReqID  uint64
	Hashes []common.Hash
}

GetTxStatusPacket represents a transaction status query

type HelperTrieReq added in v1.7.3

type HelperTrieReq struct {
	Type              uint
	TrieIdx           uint64
	Key               []byte
	FromLevel, AuxReq uint
}

type HelperTrieResps added in v1.7.3

type HelperTrieResps struct {
	Proofs  trienode.ProofList
	AuxData [][]byte
}

type LesApiBackend

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

func (*LesApiBackend) AccountManager

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

func (*LesApiBackend) BlockByHash added in v1.9.2

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

func (*LesApiBackend) BlockByNumber

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

func (*LesApiBackend) BlockByNumberOrHash added in v1.9.6

func (b *LesApiBackend) BlockByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*types.Block, error)

func (*LesApiBackend) BloomStatus added in v1.7.0

func (b *LesApiBackend) BloomStatus() (uint64, uint64)

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.Header

func (*LesApiBackend) CurrentHeader added in v1.9.19

func (b *LesApiBackend) CurrentHeader() *types.Header

func (*LesApiBackend) Engine added in v1.9.19

func (b *LesApiBackend) Engine() consensus.Engine

func (*LesApiBackend) ExtRPCEnabled added in v1.9.0

func (b *LesApiBackend) ExtRPCEnabled() bool

func (*LesApiBackend) FeeHistory added in v1.10.5

func (b *LesApiBackend) FeeHistory(ctx context.Context, blockCount uint64, lastBlock rpc.BlockNumber, rewardPercentiles []float64) (firstBlock *big.Int, reward [][]*big.Int, baseFee []*big.Int, gasUsedRatio []float64, err error)

func (*LesApiBackend) GetBody added in v1.11.0

func (b *LesApiBackend) GetBody(ctx context.Context, hash common.Hash, number rpc.BlockNumber) (*types.Body, error)

func (*LesApiBackend) GetEVM added in v1.6.0

func (b *LesApiBackend) GetEVM(ctx context.Context, msg *core.Message, state *state.StateDB, header *types.Header, vmConfig *vm.Config, blockCtx *vm.BlockContext) (*vm.EVM, func() error)

func (*LesApiBackend) GetLogs added in v1.8.2

func (b *LesApiBackend) GetLogs(ctx context.Context, hash common.Hash, number uint64) ([][]*types.Log, 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, hash common.Hash) (types.Receipts, error)

func (*LesApiBackend) GetTd

func (b *LesApiBackend) GetTd(ctx context.Context, hash common.Hash) *big.Int

func (*LesApiBackend) GetTransaction added in v1.9.0

func (b *LesApiBackend) GetTransaction(ctx context.Context, txHash common.Hash) (*types.Transaction, common.Hash, uint64, uint64, error)

func (*LesApiBackend) HeaderByHash added in v1.8.13

func (b *LesApiBackend) HeaderByHash(ctx context.Context, hash common.Hash) (*types.Header, error)

func (*LesApiBackend) HeaderByNumber

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

func (*LesApiBackend) HeaderByNumberOrHash added in v1.9.6

func (b *LesApiBackend) HeaderByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*types.Header, error)

func (*LesApiBackend) PendingBlockAndReceipts added in v1.10.5

func (b *LesApiBackend) PendingBlockAndReceipts() (*types.Block, types.Receipts)

func (*LesApiBackend) ProtocolVersion

func (b *LesApiBackend) ProtocolVersion() int

func (*LesApiBackend) RPCEVMTimeout added in v1.10.10

func (b *LesApiBackend) RPCEVMTimeout() time.Duration

func (*LesApiBackend) RPCGasCap added in v1.8.24

func (b *LesApiBackend) RPCGasCap() uint64

func (*LesApiBackend) RPCTxFeeCap added in v1.9.16

func (b *LesApiBackend) RPCTxFeeCap() float64

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) ServiceFilter added in v1.7.0

func (b *LesApiBackend) ServiceFilter(ctx context.Context, session *bloombits.MatcherSession)

func (*LesApiBackend) SetHead

func (b *LesApiBackend) SetHead(number uint64)

func (*LesApiBackend) StateAndHeaderByNumber

func (b *LesApiBackend) StateAndHeaderByNumber(ctx context.Context, number rpc.BlockNumber) (*state.StateDB, *types.Header, error)

func (*LesApiBackend) StateAndHeaderByNumberOrHash added in v1.9.6

func (b *LesApiBackend) StateAndHeaderByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*state.StateDB, *types.Header, error)

func (*LesApiBackend) StateAtBlock added in v1.10.0

func (b *LesApiBackend) StateAtBlock(ctx context.Context, block *types.Block, reexec uint64, base *state.StateDB, readOnly bool, preferDisk bool) (*state.StateDB, tracers.StateReleaseFunc, error)

func (*LesApiBackend) StateAtTransaction added in v1.10.0

func (b *LesApiBackend) StateAtTransaction(ctx context.Context, block *types.Block, txIndex int, reexec uint64) (*core.Message, vm.BlockContext, *state.StateDB, tracers.StateReleaseFunc, error)

func (*LesApiBackend) Stats

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

func (*LesApiBackend) SubscribeChainEvent added in v1.7.0

func (b *LesApiBackend) SubscribeChainEvent(ch chan<- core.ChainEvent) event.Subscription

func (*LesApiBackend) SubscribeChainHeadEvent added in v1.7.0

func (b *LesApiBackend) SubscribeChainHeadEvent(ch chan<- core.ChainHeadEvent) event.Subscription

func (*LesApiBackend) SubscribeChainSideEvent added in v1.7.0

func (b *LesApiBackend) SubscribeChainSideEvent(ch chan<- core.ChainSideEvent) event.Subscription

func (*LesApiBackend) SubscribeLogsEvent added in v1.7.0

func (b *LesApiBackend) SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscription

func (*LesApiBackend) SubscribeNewTxsEvent added in v1.8.9

func (b *LesApiBackend) SubscribeNewTxsEvent(ch chan<- core.NewTxsEvent) event.Subscription

func (*LesApiBackend) SubscribePendingLogsEvent added in v1.9.10

func (b *LesApiBackend) SubscribePendingLogsEvent(ch chan<- []*types.Log) event.Subscription

func (*LesApiBackend) SubscribeRemovedLogsEvent added in v1.7.0

func (b *LesApiBackend) SubscribeRemovedLogsEvent(ch chan<- core.RemovedLogsEvent) event.Subscription

func (*LesApiBackend) SuggestGasTipCap added in v1.10.4

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

func (*LesApiBackend) SyncProgress added in v1.10.9

func (b *LesApiBackend) SyncProgress() ethereum.SyncProgress

func (*LesApiBackend) TxPoolContent

func (b *LesApiBackend) TxPoolContent() (map[common.Address][]*types.Transaction, map[common.Address][]*types.Transaction)

func (*LesApiBackend) TxPoolContentFrom added in v1.10.5

func (b *LesApiBackend) TxPoolContentFrom(addr common.Address) ([]*types.Transaction, []*types.Transaction)

func (*LesApiBackend) UnprotectedAllowed added in v1.10.0

func (b *LesApiBackend) UnprotectedAllowed() bool

type LesOdr

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

LesOdr implements light.OdrBackend

func NewLesOdr

func NewLesOdr(db ethdb.Database, config *light.IndexerConfig, peers *serverPeerSet, retriever *retrieveManager) *LesOdr

func (*LesOdr) BloomIndexer added in v1.7.3

func (odr *LesOdr) BloomIndexer() *core.ChainIndexer

BloomIndexer returns the bloombits chain indexer

func (*LesOdr) BloomTrieIndexer added in v1.7.3

func (odr *LesOdr) BloomTrieIndexer() *core.ChainIndexer

BloomTrieIndexer returns the bloom trie chain indexer

func (*LesOdr) ChtIndexer added in v1.7.3

func (odr *LesOdr) ChtIndexer() *core.ChainIndexer

ChtIndexer returns the CHT chain indexer

func (*LesOdr) Database

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

Database returns the backing database

func (*LesOdr) IndexerConfig added in v1.8.15

func (odr *LesOdr) IndexerConfig() *light.IndexerConfig

IndexerConfig returns the indexer config.

func (*LesOdr) Retrieve

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

Retrieve tries to fetch an object from the LES network. It's a common API for most of the LES requests except for the TxStatusRequest which needs the additional retry mechanism. If the network retrieval was successful, it stores the object in local db.

func (*LesOdr) RetrieveTxStatus added in v1.10.0

func (odr *LesOdr) RetrieveTxStatus(ctx context.Context, req *light.TxStatusRequest) error

RetrieveTxStatus retrieves the transaction status from the LES network. There is no guarantee in the LES protocol that the mined transaction will be retrieved back for sure because of different reasons(the transaction is unindexed, the malicious server doesn't reply it deliberately, etc). Therefore, unretrieved transactions(UNKNOWN) will receive a certain number of retries, thus giving a weak guarantee.

func (*LesOdr) SetIndexers added in v1.8.14

func (odr *LesOdr) SetIndexers(chtIndexer, bloomTrieIndexer, bloomIndexer *core.ChainIndexer)

SetIndexers adds the necessary chain indexers to the ODR backend

func (*LesOdr) Stop

func (odr *LesOdr) Stop()

Stop cancels all pending retrievals

type LesOdrRequest

type LesOdrRequest interface {
	GetCost(*serverPeer) uint64
	CanSend(*serverPeer) bool
	Request(uint64, *serverPeer) 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(node *node.Node, e ethBackend, config *ethconfig.Config) (*LesServer, error)

func (*LesServer) APIs added in v1.9.0

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

func (*LesServer) Protocols

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

func (*LesServer) Start

func (s *LesServer) Start() error

Start starts the LES server

func (*LesServer) Stop

func (s *LesServer) Stop() error

Stop stops the LES service

type LightDummyAPI

type LightDummyAPI struct{}

func (*LightDummyAPI) Coinbase

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

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

func (*LightDummyAPI) Etherbase

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

Etherbase is the address that mining rewards will be sent 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(stack *node.Node, config *ethconfig.Config) (*LightEthereum, error)

New creates an instance of the light client.

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) Engine added in v1.6.0

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

func (*LightEthereum) EventMux added in v1.5.4

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

func (*LightEthereum) LesVersion

func (s *LightEthereum) LesVersion() int

func (*LightEthereum) Merger added in v1.10.14

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

func (*LightEthereum) Protocols

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

Protocols returns 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() error

Start implements node.Lifecycle, starting all internal goroutines needed by the light ethereum protocol implementation.

func (*LightEthereum) Stop

func (s *LightEthereum) Stop() error

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

func (*LightEthereum) TxPool

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

func (*LightEthereum) VfluxRequest added in v1.10.0

func (s *LightEthereum) VfluxRequest(n *enode.Node, reqs vflux.Requests) vflux.Replies

VfluxRequest sends a batch of requests to the given node through discv5 UDP TalkRequest and returns the responses

type LightServerAPI added in v1.10.20

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

LightServerAPI provides an API to access the LES light server.

func NewLightServerAPI added in v1.10.20

func NewLightServerAPI(server *LesServer) *LightServerAPI

NewLightServerAPI creates a new LES light server API.

func (*LightServerAPI) AddBalance added in v1.10.20

func (api *LightServerAPI) AddBalance(node string, amount int64) (balance [2]uint64, err error)

AddBalance adds the given amount to the balance of a client if possible and returns the balance before and after the operation

func (*LightServerAPI) Benchmark added in v1.10.20

func (api *LightServerAPI) Benchmark(setups []map[string]interface{}, passCount, length int) ([]map[string]interface{}, error)

Benchmark runs a request performance benchmark with a given set of measurement setups in multiple passes specified by passCount. The measurement time for each setup in each pass is specified in milliseconds by length.

Note: measurement time is adjusted for each pass depending on the previous ones. Therefore a controlled total measurement time is achievable in multiple passes.

func (*LightServerAPI) ClientInfo added in v1.10.20

func (api *LightServerAPI) ClientInfo(nodes []string) map[enode.ID]map[string]interface{}

ClientInfo returns information about clients listed in the ids list or matching the given tags

func (*LightServerAPI) PriorityClientInfo added in v1.10.20

func (api *LightServerAPI) PriorityClientInfo(start, stop enode.ID, maxCount int) map[enode.ID]map[string]interface{}

PriorityClientInfo returns information about clients with a positive balance in the given ID range (stop excluded). If stop is null then the iterator stops only at the end of the ID space. MaxCount limits the number of results returned. If maxCount limit is applied but there are more potential results then the ID of the next potential result is included in the map with an empty structure assigned to it.

func (*LightServerAPI) ServerInfo added in v1.10.20

func (api *LightServerAPI) ServerInfo() map[string]interface{}

ServerInfo returns global server parameters

func (*LightServerAPI) SetClientParams added in v1.10.20

func (api *LightServerAPI) SetClientParams(nodes []string, params map[string]interface{}) error

SetClientParams sets client parameters for all clients listed in the ids list or all connected clients if the list is empty

func (*LightServerAPI) SetConnectedBias added in v1.10.20

func (api *LightServerAPI) SetConnectedBias(bias time.Duration) error

SetConnectedBias set the connection bias, which is applied to already connected clients So that already connected client won't be kicked out very soon and we can ensure all connected clients can have enough time to request or sync some data. When the input parameter `bias` < 0 (illegal), return error.

func (*LightServerAPI) SetDefaultParams added in v1.10.20

func (api *LightServerAPI) SetDefaultParams(params map[string]interface{}) error

SetDefaultParams sets the default parameters applicable to clients connected in the future

type Msg

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

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

type NodeInfo added in v1.8.0

type NodeInfo struct {
	Network    uint64              `json:"network"`    // Ethereum network ID (1=Mainnet, Goerli=5)
	Difficulty *big.Int            `json:"difficulty"` // Total difficulty of the host's blockchain
	Genesis    common.Hash         `json:"genesis"`    // SHA3 hash of the host's genesis block
	Config     *params.ChainConfig `json:"config"`     // Chain configuration for the fork rules
	Head       common.Hash         `json:"head"`       // SHA3 hash of the host's best owned block
}

NodeInfo represents a short summary of the Ethereum sub-protocol metadata known about the host peer.

type PeerInfo added in v1.10.0

type PeerInfo struct {
	Version    int      `json:"version"`    // Ethereum protocol version negotiated
	Difficulty *big.Int `json:"difficulty"` // Total difficulty of the peer's blockchain
	Head       string   `json:"head"`       // SHA3 hash of the peer's best owned block
}

PeerInfo represents a short summary of the `eth` sub-protocol metadata known about a connected peer.

type ProofReq

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

type ReceiptsRequest

type ReceiptsRequest light.ReceiptsRequest

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

func (*ReceiptsRequest) CanSend added in v1.5.5

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

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

func (*ReceiptsRequest) GetCost

func (r *ReceiptsRequest) GetCost(peer *serverPeer) 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 *serverPeer) error

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

func (*ReceiptsRequest) Validate added in v1.6.0

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

Validate 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 []requestCostListItem

RequestCostList is a list representation of request costs which is used for database storage and communication through the network

type RequestType added in v1.10.0

type RequestType struct {
	Name                                                             string
	MaxCount                                                         uint64
	InPacketsMeter, InTrafficMeter, OutPacketsMeter, OutTrafficMeter metrics.Meter
	ServingTimeMeter                                                 metrics.Timer
	Handle                                                           func(msg Decoder) (serve serveRequestFn, reqID, amount uint64, err error)
}

RequestType is a static struct that describes an LES request type and references its handler function.

type SendTxPacket added in v1.10.0

type SendTxPacket struct {
	ReqID uint64
	Txs   []*types.Transaction
}

SendTxPacket represents a transaction propagation request

type TrieRequest

type TrieRequest light.TrieRequest

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

func (*TrieRequest) CanSend added in v1.5.5

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

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

func (*TrieRequest) GetCost

func (r *TrieRequest) GetCost(peer *serverPeer) 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 *serverPeer) error

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

func (*TrieRequest) Validate added in v1.6.0

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

Validate 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 TxStatusRequest added in v1.9.0

type TxStatusRequest light.TxStatusRequest

TxStatusRequest is the ODR request type for transaction status

func (*TxStatusRequest) CanSend added in v1.9.0

func (r *TxStatusRequest) CanSend(peer *serverPeer) bool

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

func (*TxStatusRequest) GetCost added in v1.9.0

func (r *TxStatusRequest) GetCost(peer *serverPeer) uint64

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

func (*TxStatusRequest) Request added in v1.9.0

func (r *TxStatusRequest) Request(reqID uint64, peer *serverPeer) error

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

func (*TxStatusRequest) Validate added in v1.9.0

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

Validate 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

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL