Documentation ¶
Overview ¶
Package les implements the Light Abeychain Subprotocol.
Index ¶
- Constants
- Variables
- func GenesisNumber() uint64
- func LesEpochFromHeight(height uint64) (begin, end, id uint64)
- func LesEpochToHeight(id uint64) (begin, end uint64)
- func LesFirstEpoch() (begin, end, id uint64)
- type BlockChain
- type BlockRequest
- type BloomReq
- type BloomRequest
- type ChtReq
- type ChtRequest
- type ChtResp
- type CodeData
- type CodeReq
- type CodeRequest
- type Election
- func (e *Election) FinalizeCommittee(block *types.Block) error
- func (e *Election) GenerateFakeSigns(fb *types.Block) ([]*types.PbftSign, error)
- func (e *Election) GetCommittee(fastNumber *big.Int) []*types.CommitteeMember
- func (e *Election) GetCommitteeFromFullnode(id *big.Int) *types.ElectionCommittee
- func (e *Election) GetCommitteeFromFullnodeByNumber(height *big.Int) *types.ElectionCommittee
- func (e *Election) GetMemberByPubkey(members []*types.CommitteeMember, publickey []byte) *types.CommitteeMember
- func (e *Election) GetMemberFlag(members []*types.CommitteeMember, publickey []byte) uint32
- func (e *Election) IsCommitteeMember(members []*types.CommitteeMember, publickey []byte) bool
- func (e *Election) Start()
- func (e *Election) VerifyPublicKey(fastHeight *big.Int, pubKeyByte []byte) (*types.CommitteeMember, error)
- func (e *Election) VerifySign(sign *types.PbftSign) (*types.CommitteeMember, error)
- func (e *Election) VerifySigns(signs []*types.PbftSign) ([]*types.CommitteeMember, []error)
- func (e *Election) VerifySwitchInfo(fastNumber *big.Int, info []*types.CommitteeMember) error
- type HeaderWithSigns
- type HelperTrieReq
- type HelperTrieResps
- type IncompleteBlock
- type IncompleteBlocks
- type LesApiBackend
- func (b *LesApiBackend) AccountManager() *accounts.Manager
- func (b *LesApiBackend) BlockByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Block, error)
- func (b *LesApiBackend) BloomStatus() (uint64, uint64)
- func (b *LesApiBackend) ChainConfig() *params.ChainConfig
- func (b *LesApiBackend) ChainDb() abeydb.Database
- func (b *LesApiBackend) CurrentBlock() *types.Block
- func (b *LesApiBackend) CurrentSnailBlock() *types.SnailBlock
- func (b *LesApiBackend) Downloader() *downloader.Downloader
- func (b *LesApiBackend) EventMux() *event.TypeMux
- func (b *LesApiBackend) FastDownloader() *fastdownloader.Downloader
- func (b *LesApiBackend) GetBalanceChangeBySnailNumber(snailNumber rpc.BlockNumber) *types.BalanceChangeContent
- func (b *LesApiBackend) GetBlock(ctx context.Context, blockHash common.Hash) (*types.Block, error)
- func (b *LesApiBackend) GetChainRewardContent(blockNr rpc.BlockNumber) *types.ChainReward
- func (b *LesApiBackend) GetCommittee(id rpc.BlockNumber) (map[string]interface{}, error)
- func (b *LesApiBackend) GetCurrentCommitteeNumber() *big.Int
- func (b *LesApiBackend) GetEVM(ctx context.Context, msg core.Message, state *state.StateDB, ...) (*vm.EVM, func() error, error)
- func (b *LesApiBackend) GetFruit(ctx context.Context, fastblockHash common.Hash) (*types.SnailBlock, error)
- func (b *LesApiBackend) GetLogs(ctx context.Context, hash common.Hash) ([][]*types.Log, error)
- func (b *LesApiBackend) GetPoolNonce(ctx context.Context, addr common.Address) (uint64, error)
- func (b *LesApiBackend) GetPoolTransaction(txHash common.Hash) *types.Transaction
- func (b *LesApiBackend) GetPoolTransactions() (types.Transactions, error)
- func (b *LesApiBackend) GetReceipts(ctx context.Context, hash common.Hash) (types.Receipts, error)
- func (b *LesApiBackend) GetReward(number int64) *types.BlockReward
- func (b *LesApiBackend) GetSnailBlock(ctx context.Context, blockHash common.Hash) (*types.SnailBlock, error)
- func (b *LesApiBackend) GetSnailRewardContent(blockNr rpc.BlockNumber) *types.SnailRewardContenet
- func (b *LesApiBackend) GetStateChangeByFastNumber(fastNumber rpc.BlockNumber) *types.BlockBalance
- func (b *LesApiBackend) GetTd(hash common.Hash) *big.Int
- func (b *LesApiBackend) HeaderByHash(ctx context.Context, hash common.Hash) (*types.Header, error)
- func (b *LesApiBackend) HeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.Header, error)
- func (b *LesApiBackend) ProtocolVersion() int
- func (b *LesApiBackend) RemoveTx(txHash common.Hash)
- func (b *LesApiBackend) SendTx(ctx context.Context, signedTx *types.Transaction) error
- func (b *LesApiBackend) ServiceFilter(ctx context.Context, session *bloombits.MatcherSession)
- func (b *LesApiBackend) SetHead(number uint64)
- func (b *LesApiBackend) SetSnailHead(number uint64)
- func (b *LesApiBackend) SnailBlockByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.SnailBlock, error)
- func (b *LesApiBackend) SnailHeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.SnailHeader, error)
- func (b *LesApiBackend) SnailPoolContent() []*types.SnailBlock
- func (b *LesApiBackend) SnailPoolInspect() []*types.SnailBlock
- func (b *LesApiBackend) SnailPoolStats() (pending int, unVerified int)
- func (b *LesApiBackend) StateAndHeaderByHash(ctx context.Context, hash common.Hash) (*state.StateDB, *types.Header, error)
- func (b *LesApiBackend) StateAndHeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*state.StateDB, *types.Header, error)
- func (b *LesApiBackend) StateAndHeaderByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*state.StateDB, *types.Header, error)
- func (b *LesApiBackend) Stats() (pending int, queued int)
- func (b *LesApiBackend) SubscribeChainEvent(ch chan<- types.FastChainEvent) event.Subscription
- func (b *LesApiBackend) SubscribeChainHeadEvent(ch chan<- types.FastChainHeadEvent) event.Subscription
- func (b *LesApiBackend) SubscribeChainSideEvent(ch chan<- types.FastChainSideEvent) event.Subscription
- func (b *LesApiBackend) SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscription
- func (b *LesApiBackend) SubscribeNewTxsEvent(ch chan<- types.NewTxsEvent) event.Subscription
- func (b *LesApiBackend) SubscribeRemovedLogsEvent(ch chan<- types.RemovedLogsEvent) event.Subscription
- func (b *LesApiBackend) SuggestPrice(ctx context.Context) (*big.Int, error)
- func (b *LesApiBackend) TxPoolContent() (map[common.Address]types.Transactions, map[common.Address]types.Transactions)
- type LesOdr
- func (odr *LesOdr) BloomIndexer() *core.ChainIndexer
- func (odr *LesOdr) BloomTrieIndexer() *core.ChainIndexer
- func (odr *LesOdr) ChtIndexer() *core.ChainIndexer
- func (odr *LesOdr) Database() abeydb.Database
- func (odr *LesOdr) IndexerConfig() *light.IndexerConfig
- func (odr *LesOdr) Retrieve(ctx context.Context, req light.OdrRequest) (err error)
- func (odr *LesOdr) SetIndexers(chtIndexer, bloomTrieIndexer, bloomIndexer *core.ChainIndexer)
- func (odr *LesOdr) Stop()
- type LesOdrRequest
- type LesServer
- type LesTxRelay
- type LightAbey
- func (s *LightAbey) APIs() []rpc.API
- func (s *LightAbey) BlockChain() *light.LightChain
- func (s *LightAbey) Downloader() *fastdownloader.Downloader
- func (s *LightAbey) Engine() consensus.Engine
- func (s *LightAbey) EventMux() *event.TypeMux
- func (s *LightAbey) GenesisHash() common.Hash
- func (s *LightAbey) LesVersion() int
- func (s *LightAbey) Protocols() []p2p.Protocol
- func (s *LightAbey) ResetWithGenesisBlock(gb *types.Block)
- func (s *LightAbey) Start(srvr *p2p.Server) error
- func (s *LightAbey) Stop() error
- func (s *LightAbey) TxPool() *light.TxPool
- type LightDummyAPI
- type Msg
- type NodeInfo
- type ProofReq
- type ProtocolManager
- type ReceiptsRequest
- type RequestCostList
- type TrieRequest
Constants ¶
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 merkle proofs 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 )
const ( MsgBlockBodies = iota MsgCode MsgReceipts MsgProofsV1 MsgProofsV2 MsgHeaderProofs MsgHelperTrieProofs )
const ( NetworkId = 1 ProtocolMaxMsgSize = 10 * 1024 * 1024 // Maximum cap on the size of a protocol message )
const ( // Protocol messages belonging to LPV1 StatusMsg = 0x00 AnnounceMsg = 0x01 GetBlockHeadersMsg = 0x02 BlockHeadersMsg = 0x03 GetBlockBodiesMsg = 0x04 BlockBodiesMsg = 0x05 GetReceiptsMsg = 0x06 ReceiptsMsg = 0x07 GetProofsV1Msg = 0x08 ProofsV1Msg = 0x09 GetCodeMsg = 0x0a CodeMsg = 0x0b SendTxMsg = 0x0c GetHeaderProofsMsg = 0x0d HeaderProofsMsg = 0x0e // Protocol messages belonging to LPV2 GetProofsV2Msg = 0x0f ProofsV2Msg = 0x10 GetHelperTrieProofsMsg = 0x11 HelperTrieProofsMsg = 0x12 SendTxV2Msg = 0x13 GetTxStatusMsg = 0x14 TxStatusMsg = 0x15 )
les protocol message codes
const ( ErrMsgTooLarge = iota ErrDecode ErrInvalidMsgCode ErrProtocolVersionMismatch ErrNetworkIdMismatch ErrGenesisBlockMismatch ErrNoStatusMsg ErrExtraStatusMsg ErrSuspendedPeer ErrUselessPeer ErrRequestRejected ErrUnexpectedResponse ErrInvalidResponse ErrTooManyTimeouts ErrMissingKey )
Variables ¶
var ( // 361 epoch begin=9000001,end=9025000 LesFirstBlock = uint64(9000001) LesFirstEpochID = uint64(361) )
var ( ErrCommittee = errors.New("get committee failed") ErrInvalidMember = errors.New("invalid committee member") ErrInvalidSwitch = errors.New("invalid switch block info") )
var ( ClientProtocolVersions = []uint{lpv2, lpv1} ServerProtocolVersions = []uint{lpv2, lpv1} AdvertiseProtocolVersions = []uint{lpv2} // clients are searching for the first advertised protocol in the list )
Supported versions of the les protocol (first is primary)
var (
NotSupportOnLes = errors.New("not support on les protocol")
)
var ProtocolLengths = map[uint]uint64{/* contains filtered or unexported fields */}
Number of implemented message corresponding to different protocol versions.
Functions ¶
func GenesisNumber ¶
func GenesisNumber() uint64
func LesEpochFromHeight ¶
func LesEpochToHeight ¶
func LesFirstEpoch ¶
func LesFirstEpoch() (begin, end, id uint64)
Types ¶
type BlockChain ¶
type BlockChain interface { Config() *params.ChainConfig HasHeader(hash common.Hash, number uint64) bool GetHeader(hash common.Hash, number uint64) *types.Header GetHeaderByHash(hash common.Hash) *types.Header CurrentHeader() *types.Header //GetTd(hash common.Hash, number uint64) *big.Int State() (*state.StateDB, error) InsertHeaderChain(chain []*types.Header, checkFreq int) (int, error) Rollback(chain []common.Hash) GetHeaderByNumber(number uint64) *types.Header GetAncestor(hash common.Hash, number, ancestor uint64, maxNonCanonical *uint64) (common.Hash, uint64) Genesis() *types.Block SubscribeChainHeadEvent(ch chan<- types.FastChainHeadEvent) event.Subscription SetCommitteeInfo(hash common.Hash, number uint64, infos []*types.CommitteeMember) }
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)
type BloomRequest ¶
type BloomRequest light.BloomRequest
ODR request type for requesting headers by Canonical Hash Trie, see LesOdrRequest interface
func (*BloomRequest) CanSend ¶
func (r *BloomRequest) CanSend(peer *peer) bool
CanSend tells if a certain peer is suitable for serving the given request
func (*BloomRequest) GetCost ¶
func (r *BloomRequest) 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 (*BloomRequest) Request ¶
func (r *BloomRequest) Request(reqID uint64, peer *peer) error
Request sends an ODR request to the LES network (implementation of LesOdrRequest)
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)
type CodeData ¶
type CodeData []struct { Value []byte }
CodeData is the network response packet for a node data retrieval.
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)
type Election ¶
type Election struct {
// contains filtered or unexported fields
}
func NewLightElection ¶
func NewLightElection(fastBlockChain *light.LightChain) *Election
NewLightElection create the instance of committee electioin
func (*Election) FinalizeCommittee ¶
FinalizeCommittee upddate current committee state
func (*Election) GenerateFakeSigns ¶
func (*Election) GetCommittee ¶
func (e *Election) GetCommittee(fastNumber *big.Int) []*types.CommitteeMember
GetCommittee gets committee members which propose the fast block
func (*Election) GetCommitteeFromFullnode ¶
func (e *Election) GetCommitteeFromFullnode(id *big.Int) *types.ElectionCommittee
func (*Election) GetCommitteeFromFullnodeByNumber ¶
func (e *Election) GetCommitteeFromFullnodeByNumber(height *big.Int) *types.ElectionCommittee
func (*Election) GetMemberByPubkey ¶
func (e *Election) GetMemberByPubkey(members []*types.CommitteeMember, publickey []byte) *types.CommitteeMember
GetMemberByPubkey returns committeeMember specified by public key bytes
func (*Election) GetMemberFlag ¶
func (e *Election) GetMemberFlag(members []*types.CommitteeMember, publickey []byte) uint32
func (*Election) IsCommitteeMember ¶
func (e *Election) IsCommitteeMember(members []*types.CommitteeMember, publickey []byte) bool
IsCommitteeMember reports whether the provided public key is in committee
func (*Election) VerifyPublicKey ¶
func (e *Election) VerifyPublicKey(fastHeight *big.Int, pubKeyByte []byte) (*types.CommitteeMember, error)
VerifyPublicKey get the committee member by public key
func (*Election) VerifySign ¶
VerifySign lookup the pbft sign and return the committee member who signs it
func (*Election) VerifySigns ¶
VerifySigns verify signatures of bft committee in batches
func (*Election) VerifySwitchInfo ¶
VerifySwitchInfo verify committee members and it's state
type HeaderWithSigns ¶
type HelperTrieReq ¶
type HelperTrieResps ¶
type IncompleteBlock ¶
type IncompleteBlocks ¶
type IncompleteBlocks struct {
Blocks []*IncompleteBlock
}
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) BloomStatus ¶
func (b *LesApiBackend) BloomStatus() (uint64, uint64)
func (*LesApiBackend) ChainConfig ¶
func (b *LesApiBackend) ChainConfig() *params.ChainConfig
////////////////////////////////////////////////////////////
func (*LesApiBackend) ChainDb ¶
func (b *LesApiBackend) ChainDb() abeydb.Database
func (*LesApiBackend) CurrentBlock ¶
func (b *LesApiBackend) CurrentBlock() *types.Block
func (*LesApiBackend) CurrentSnailBlock ¶
func (b *LesApiBackend) CurrentSnailBlock() *types.SnailBlock
func (*LesApiBackend) Downloader ¶
func (b *LesApiBackend) Downloader() *downloader.Downloader
func (*LesApiBackend) EventMux ¶
func (b *LesApiBackend) EventMux() *event.TypeMux
func (*LesApiBackend) FastDownloader ¶
func (b *LesApiBackend) FastDownloader() *fastdownloader.Downloader
func (*LesApiBackend) GetBalanceChangeBySnailNumber ¶
func (b *LesApiBackend) GetBalanceChangeBySnailNumber(snailNumber rpc.BlockNumber) *types.BalanceChangeContent
func (*LesApiBackend) GetChainRewardContent ¶
func (b *LesApiBackend) GetChainRewardContent(blockNr rpc.BlockNumber) *types.ChainReward
func (*LesApiBackend) GetCommittee ¶
func (b *LesApiBackend) GetCommittee(id rpc.BlockNumber) (map[string]interface{}, error)
func (*LesApiBackend) GetCurrentCommitteeNumber ¶
func (b *LesApiBackend) GetCurrentCommitteeNumber() *big.Int
func (*LesApiBackend) GetFruit ¶
func (b *LesApiBackend) GetFruit(ctx context.Context, fastblockHash common.Hash) (*types.SnailBlock, error)
func (*LesApiBackend) GetPoolNonce ¶
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 (*LesApiBackend) GetReward ¶
func (b *LesApiBackend) GetReward(number int64) *types.BlockReward
func (*LesApiBackend) GetSnailBlock ¶
func (b *LesApiBackend) GetSnailBlock(ctx context.Context, blockHash common.Hash) (*types.SnailBlock, error)
func (*LesApiBackend) GetSnailRewardContent ¶
func (b *LesApiBackend) GetSnailRewardContent(blockNr rpc.BlockNumber) *types.SnailRewardContenet
func (*LesApiBackend) GetStateChangeByFastNumber ¶
func (b *LesApiBackend) GetStateChangeByFastNumber(fastNumber rpc.BlockNumber) *types.BlockBalance
func (*LesApiBackend) HeaderByHash ¶
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) ServiceFilter ¶
func (b *LesApiBackend) ServiceFilter(ctx context.Context, session *bloombits.MatcherSession)
func (*LesApiBackend) SetHead ¶
func (b *LesApiBackend) SetHead(number uint64)
func (*LesApiBackend) SetSnailHead ¶
func (b *LesApiBackend) SetSnailHead(number uint64)
////////////////////////////////////////////////////////////
func (*LesApiBackend) SnailBlockByNumber ¶
func (b *LesApiBackend) SnailBlockByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.SnailBlock, error)
func (*LesApiBackend) SnailHeaderByNumber ¶
func (b *LesApiBackend) SnailHeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*types.SnailHeader, error)
func (*LesApiBackend) SnailPoolContent ¶
func (b *LesApiBackend) SnailPoolContent() []*types.SnailBlock
func (*LesApiBackend) SnailPoolInspect ¶
func (b *LesApiBackend) SnailPoolInspect() []*types.SnailBlock
func (*LesApiBackend) SnailPoolStats ¶
func (b *LesApiBackend) SnailPoolStats() (pending int, unVerified int)
func (*LesApiBackend) StateAndHeaderByHash ¶
func (*LesApiBackend) StateAndHeaderByNumber ¶
func (b *LesApiBackend) StateAndHeaderByNumber(ctx context.Context, blockNr rpc.BlockNumber) (*state.StateDB, *types.Header, error)
func (*LesApiBackend) StateAndHeaderByNumberOrHash ¶
func (b *LesApiBackend) StateAndHeaderByNumberOrHash(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) (*state.StateDB, *types.Header, error)
func (*LesApiBackend) Stats ¶
func (b *LesApiBackend) Stats() (pending int, queued int)
func (*LesApiBackend) SubscribeChainEvent ¶
func (b *LesApiBackend) SubscribeChainEvent(ch chan<- types.FastChainEvent) event.Subscription
func (*LesApiBackend) SubscribeChainHeadEvent ¶
func (b *LesApiBackend) SubscribeChainHeadEvent(ch chan<- types.FastChainHeadEvent) event.Subscription
func (*LesApiBackend) SubscribeChainSideEvent ¶
func (b *LesApiBackend) SubscribeChainSideEvent(ch chan<- types.FastChainSideEvent) event.Subscription
func (*LesApiBackend) SubscribeLogsEvent ¶
func (b *LesApiBackend) SubscribeLogsEvent(ch chan<- []*types.Log) event.Subscription
func (*LesApiBackend) SubscribeNewTxsEvent ¶
func (b *LesApiBackend) SubscribeNewTxsEvent(ch chan<- types.NewTxsEvent) event.Subscription
func (*LesApiBackend) SubscribeRemovedLogsEvent ¶
func (b *LesApiBackend) SubscribeRemovedLogsEvent(ch chan<- types.RemovedLogsEvent) event.Subscription
func (*LesApiBackend) SuggestPrice ¶
func (*LesApiBackend) TxPoolContent ¶
func (b *LesApiBackend) TxPoolContent() (map[common.Address]types.Transactions, map[common.Address]types.Transactions)
type LesOdr ¶
type LesOdr struct {
// contains filtered or unexported fields
}
LesOdr implements light.OdrBackend
func NewLesOdr ¶
func NewLesOdr(db abeydb.Database, config *light.IndexerConfig, retriever *retrieveManager) *LesOdr
func (*LesOdr) BloomIndexer ¶
func (odr *LesOdr) BloomIndexer() *core.ChainIndexer
BloomIndexer returns the bloombits chain indexer
func (*LesOdr) BloomTrieIndexer ¶
func (odr *LesOdr) BloomTrieIndexer() *core.ChainIndexer
BloomTrieIndexer returns the bloom trie chain indexer
func (*LesOdr) ChtIndexer ¶
func (odr *LesOdr) ChtIndexer() *core.ChainIndexer
ChtIndexer returns the CHT chain indexer
func (*LesOdr) IndexerConfig ¶
func (odr *LesOdr) IndexerConfig() *light.IndexerConfig
IndexerConfig returns the indexer config.
func (*LesOdr) Retrieve ¶
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) SetIndexers ¶
func (odr *LesOdr) SetIndexers(chtIndexer, bloomTrieIndexer, bloomIndexer *core.ChainIndexer)
SetIndexers adds the necessary chain indexers to the ODR backend
type LesOdrRequest ¶
type LesOdrRequest interface { GetCost(*peer) uint64 CanSend(*peer) bool Request(uint64, *peer) error Validate(abeydb.Database, *Msg) error }
func LesRequest ¶
func LesRequest(req light.OdrRequest) LesOdrRequest
type LesServer ¶
type LesServer struct {
// contains filtered or unexported fields
}
func NewLesServer ¶
func (*LesServer) SetBloomBitsIndexer ¶
func (s *LesServer) SetBloomBitsIndexer(bloomIndexer *core.ChainIndexer)
type LesTxRelay ¶
type LesTxRelay struct {
// contains filtered or unexported fields
}
func NewLesTxRelay ¶
func NewLesTxRelay(ps *peerSet, reqDist *requestDistributor) *LesTxRelay
func (*LesTxRelay) Discard ¶
func (self *LesTxRelay) Discard(hashes []common.Hash)
func (*LesTxRelay) Send ¶
func (self *LesTxRelay) Send(txs types.Transactions)
type LightAbey ¶
type LightAbey struct { ApiBackend *LesApiBackend // contains filtered or unexported fields }
func (*LightAbey) APIs ¶
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 (*LightAbey) BlockChain ¶
func (s *LightAbey) BlockChain() *light.LightChain
func (*LightAbey) Downloader ¶
func (s *LightAbey) Downloader() *fastdownloader.Downloader
func (*LightAbey) GenesisHash ¶
func (*LightAbey) LesVersion ¶
func (*LightAbey) Protocols ¶
Protocols implements node.Service, returning all the currently configured network protocols to start.
func (*LightAbey) ResetWithGenesisBlock ¶
func (*LightAbey) Start ¶
Start implements node.Service, starting all internal goroutines needed by the Abeychain protocol implementation.
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 NodeInfo ¶
type NodeInfo struct { Network uint64 `json:"network"` // Ethereum network ID (1=Frontier, 2=Morden, Ropsten=3, Rinkeby=4) 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 CHT params.TrustedCheckpoint `json:"cht"` // Trused CHT checkpoint for fast catchup }
NodeInfo represents a short summary of the Ethereum sub-protocol metadata known about the host peer.
type ProtocolManager ¶
type ProtocolManager struct {
// contains filtered or unexported fields
}
func NewProtocolManager ¶
func NewProtocolManager(chainConfig *params.ChainConfig, indexerConfig *light.IndexerConfig, lightSync bool, networkId uint64, mux *event.TypeMux, engine consensus.Engine, peers *peerSet, blockchain BlockChain, txpool txPool, chainDb abeydb.Database, odr *LesOdr, txrelay *LesTxRelay, serverPool *serverPool, quitSync chan struct{}, wg *sync.WaitGroup, genesisHash common.Hash) (*ProtocolManager, error)
NewProtocolManager returns a new abeychain sub protocol manager. The abeychain sub protocol manages peers capable with the abeychain network.
func (*ProtocolManager) Start ¶
func (pm *ProtocolManager) Start(maxPeers int)
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)
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)
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package flowcontrol implements a client side flow control mechanism
|
Package flowcontrol implements a client side flow control mechanism |