Documentation ¶
Overview ¶
Package fetch contains mechanism to fetch Data from remote peers
nolint
Index ¶
- type AtxValidator
- type BallotValidator
- type BlockValidator
- type Config
- type EpochData
- type Fetch
- func (f *Fetch) GetAtxs(ctx context.Context, ids []types.ATXID) error
- func (f *Fetch) GetBallots(ctx context.Context, ids []types.BallotID) error
- func (f *Fetch) GetBlockTxs(ctx context.Context, ids []types.TransactionID) error
- func (f *Fetch) GetBlocks(ctx context.Context, ids []types.BlockID) error
- func (f *Fetch) GetLayerData(ctx context.Context, peers []p2p.Peer, lid types.LayerID, ...) error
- func (f *Fetch) GetLayerOpinions(ctx context.Context, peers []p2p.Peer, lid types.LayerID, ...) error
- func (f *Fetch) GetMalfeasanceProofs(ctx context.Context, ids []types.NodeID) error
- func (f *Fetch) GetMaliciousIDs(ctx context.Context, peers []p2p.Peer, okCB func([]byte, p2p.Peer), ...) error
- func (f *Fetch) GetPeers() []p2p.Peer
- func (f *Fetch) GetPoetProof(ctx context.Context, id types.Hash32) error
- func (f *Fetch) GetProposalTxs(ctx context.Context, ids []types.TransactionID) error
- func (f *Fetch) GetProposals(ctx context.Context, ids []types.ProposalID) error
- func (f *Fetch) PeerEpochInfo(ctx context.Context, peer p2p.Peer, epoch types.EpochID) (*EpochData, error)
- func (f *Fetch) PeerMeshHashes(ctx context.Context, peer p2p.Peer, req *MeshHashRequest) (*MeshHashes, error)
- func (f *Fetch) RegisterPeerHashes(peer p2p.Peer, hashes []types.Hash32)
- func (f *Fetch) SetValidators(atx AtxValidator, poet PoetValidator, ballot BallotValidator, ...)
- func (f *Fetch) Start() error
- func (f *Fetch) Stop()
- type HashPeers
- type HashPeersCache
- type LayerData
- type LayerOpinion
- func (t *LayerOpinion) DecodeScale(dec *scale.Decoder) (total int, err error)
- func (t *LayerOpinion) EncodeScale(enc *scale.Encoder) (total int, err error)
- func (lo *LayerOpinion) MarshalLogObject(encoder log.ObjectEncoder) error
- func (lo *LayerOpinion) Peer() p2p.Peer
- func (lo *LayerOpinion) SetPeer(p p2p.Peer)
- type MalfeasanceValidator
- type MaliciousIDs
- type MeshHashRequest
- type MeshHashes
- type Option
- type PoetValidator
- type ProposalValidator
- type RequestBatch
- type RequestMessage
- type ResponseBatch
- type ResponseMessage
- type TxValidator
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AtxValidator ¶
type BallotValidator ¶
type BlockValidator ¶
type Config ¶
type Config struct { BatchTimeout time.Duration // in milliseconds MaxRetriesForPeer int BatchSize, QueueSize int RequestTimeout time.Duration // in seconds MaxRetriesForRequest int }
Config is the configuration file of the Fetch component.
func DefaultConfig ¶ added in v1.0.0
func DefaultConfig() Config
DefaultConfig is the default config for the fetch component.
type EpochData ¶ added in v1.0.0
type EpochData struct {
AtxIDs []types.ATXID `scale:"max=100000"` // max. expected number of ATXs per epoch is 100_000
}
func (*EpochData) DecodeScale ¶ added in v1.0.0
func (*EpochData) EncodeScale ¶ added in v1.0.0
type Fetch ¶
type Fetch struct {
// contains filtered or unexported fields
}
Fetch is the main struct that contains network peers and logic to batch and dispatch hash fetch requests.
func NewFetch ¶
func NewFetch(cdb *datastore.CachedDB, msh meshProvider, b system.BeaconGetter, host *p2p.Host, opts ...Option) *Fetch
NewFetch creates a new Fetch struct.
func (*Fetch) GetAtxs ¶ added in v1.0.0
GetAtxs gets the data for given atx IDs and validates them. returns an error if at least one ATX cannot be fetched.
func (*Fetch) GetBallots ¶ added in v1.0.0
GetBallots gets data for the specified BallotIDs and validates them.
func (*Fetch) GetBlockTxs ¶ added in v1.0.0
GetBlockTxs fetches the txs provided as IDs and saves them, they will be validated before block is applied.
func (*Fetch) GetLayerData ¶ added in v1.0.0
func (f *Fetch) GetLayerData(ctx context.Context, peers []p2p.Peer, lid types.LayerID, okCB func([]byte, p2p.Peer), errCB func(error, p2p.Peer)) error
GetLayerData get layer data from peers.
func (*Fetch) GetLayerOpinions ¶ added in v1.0.0
func (f *Fetch) GetLayerOpinions(ctx context.Context, peers []p2p.Peer, lid types.LayerID, okCB func([]byte, p2p.Peer), errCB func(error, p2p.Peer)) error
GetLayerOpinions get opinions on data in the specified layer from peers.
func (*Fetch) GetMalfeasanceProofs ¶ added in v1.0.0
GetMalfeasanceProofs gets malfeasance proofs for the specified NodeIDs and validates them.
func (*Fetch) GetMaliciousIDs ¶ added in v1.0.0
func (*Fetch) GetPoetProof ¶ added in v1.0.0
GetPoetProof gets poet proof from remote peer.
func (*Fetch) GetProposalTxs ¶ added in v1.0.0
GetProposalTxs fetches the txs provided as IDs and validates them, returns an error if one TX failed to be fetched.
func (*Fetch) GetProposals ¶ added in v1.0.0
GetProposals gets the data for given proposal IDs from peers.
func (*Fetch) PeerEpochInfo ¶ added in v1.0.0
func (f *Fetch) PeerEpochInfo(ctx context.Context, peer p2p.Peer, epoch types.EpochID) (*EpochData, error)
PeerEpochInfo get the epoch info published in the given epoch from the specified peer.
func (*Fetch) PeerMeshHashes ¶ added in v1.0.0
func (f *Fetch) PeerMeshHashes(ctx context.Context, peer p2p.Peer, req *MeshHashRequest) (*MeshHashes, error)
func (*Fetch) RegisterPeerHashes ¶ added in v1.0.0
RegisterPeerHashes registers provided peer for a list of hashes.
func (*Fetch) SetValidators ¶ added in v1.0.0
func (f *Fetch) SetValidators( atx AtxValidator, poet PoetValidator, ballot BallotValidator, block BlockValidator, prop ProposalValidator, tx TxValidator, mal MalfeasanceValidator, )
SetValidators sets the handlers to validate various mesh data fetched from peers.
type HashPeersCache ¶ added in v1.0.0
HashPeersCache holds lru cache of peers to pull hash from.
func NewHashPeersCache ¶ added in v1.0.0
func NewHashPeersCache(size int) *HashPeersCache
NewHashPeersCache creates a new hash-to-peers cache.
func (*HashPeersCache) Add ¶ added in v1.0.0
func (hpc *HashPeersCache) Add(hash types.Hash32, peer p2p.Peer)
Add is a thread-safe version of add.
func (*HashPeersCache) GetRandom ¶ added in v1.0.0
func (hpc *HashPeersCache) GetRandom(hash types.Hash32, hint datastore.Hint, rng *rand.Rand) (p2p.Peer, bool)
GetRandom returns a random peer for a given hash.
func (*HashPeersCache) RegisterPeerHashes ¶ added in v1.0.0
func (hpc *HashPeersCache) RegisterPeerHashes(peer p2p.Peer, hashes []types.Hash32)
RegisterPeerHashes registers provided peer for a list of hashes.
type LayerData ¶ added in v1.0.0
type LayerData struct { Ballots []types.BallotID `scale:"max=500"` // expected are 50 proposals per layer + safety margin Blocks []types.BlockID `scale:"max=100"` // only expected to have 1 block per layer, 100 is a safe upper bound }
LayerData is the data response for a given layer ID.
func (*LayerData) DecodeScale ¶ added in v1.0.0
func (*LayerData) EncodeScale ¶ added in v1.0.0
type LayerOpinion ¶ added in v1.0.0
type LayerOpinion struct { PrevAggHash types.Hash32 Cert *types.Certificate // contains filtered or unexported fields }
LayerOpinion is the response for opinion for a given layer.
func (*LayerOpinion) DecodeScale ¶ added in v1.0.0
func (t *LayerOpinion) DecodeScale(dec *scale.Decoder) (total int, err error)
func (*LayerOpinion) EncodeScale ¶ added in v1.0.0
func (t *LayerOpinion) EncodeScale(enc *scale.Encoder) (total int, err error)
func (*LayerOpinion) MarshalLogObject ¶ added in v1.0.0
func (lo *LayerOpinion) MarshalLogObject(encoder log.ObjectEncoder) error
MarshalLogObject implements logging encoder for LayerOpinion.
func (*LayerOpinion) SetPeer ¶ added in v1.0.0
func (lo *LayerOpinion) SetPeer(p p2p.Peer)
SetPeer ...
type MalfeasanceValidator ¶
type MaliciousIDs ¶ added in v1.0.0
type MaliciousIDs struct {
NodeIDs []types.NodeID `scale:"max=100000"` // max. expected number of ATXs per epoch is 100_000
}
func (*MaliciousIDs) DecodeScale ¶ added in v1.0.0
func (t *MaliciousIDs) DecodeScale(dec *scale.Decoder) (total int, err error)
func (*MaliciousIDs) EncodeScale ¶ added in v1.0.0
func (t *MaliciousIDs) EncodeScale(enc *scale.Encoder) (total int, err error)
type MeshHashRequest ¶ added in v1.0.0
func (*MeshHashRequest) DecodeScale ¶ added in v1.0.0
func (t *MeshHashRequest) DecodeScale(dec *scale.Decoder) (total int, err error)
func (*MeshHashRequest) EncodeScale ¶ added in v1.0.0
func (t *MeshHashRequest) EncodeScale(enc *scale.Encoder) (total int, err error)
func (*MeshHashRequest) MarshalLogObject ¶ added in v1.0.0
func (r *MeshHashRequest) MarshalLogObject(encoder log.ObjectEncoder) error
type MeshHashes ¶ added in v1.0.0
type MeshHashes struct { Layers []types.LayerID `scale:"max=1000"` // depends on syncer Config `MaxHashesInReq`, defaults to 100, 1000 is a safe upper bound Hashes []types.Hash32 `scale:"max=1000"` // depends on syncer Config `MaxHashesInReq`, defaults to 100, 1000 is a safe upper bound }
func (*MeshHashes) DecodeScale ¶ added in v1.0.0
func (t *MeshHashes) DecodeScale(dec *scale.Decoder) (total int, err error)
func (*MeshHashes) EncodeScale ¶ added in v1.0.0
func (t *MeshHashes) EncodeScale(enc *scale.Encoder) (total int, err error)
type Option ¶ added in v1.0.0
type Option func(*Fetch)
Option is a type to configure a fetcher.
func WithConfig ¶ added in v1.0.0
WithConfig configures the config for the fetcher.
func WithContext ¶ added in v1.0.0
WithContext configures the shutdown context for the fetcher.
func WithLogger ¶ added in v1.0.0
WithLogger configures logger for the fetcher.
type PoetValidator ¶ added in v1.0.0
type ProposalValidator ¶
type RequestBatch ¶ added in v1.0.0
type RequestBatch struct { ID types.Hash32 Requests []RequestMessage `scale:"max=1000"` // depends on fetch config `BatchSize` which defaults to 20, more than 1000 seems unlikely }
RequestBatch is a batch of requests and a hash of all requests as ID.
func (*RequestBatch) DecodeScale ¶ added in v1.0.0
func (t *RequestBatch) DecodeScale(dec *scale.Decoder) (total int, err error)
func (*RequestBatch) EncodeScale ¶ added in v1.0.0
func (t *RequestBatch) EncodeScale(enc *scale.Encoder) (total int, err error)
type RequestMessage ¶ added in v1.0.0
type RequestMessage struct { Hint datastore.Hint `scale:"max=256"` // TODO(mafa): covert to an enum Hash types.Hash32 }
RequestMessage is sent to the peer for hash query.
func (*RequestMessage) DecodeScale ¶ added in v1.0.0
func (t *RequestMessage) DecodeScale(dec *scale.Decoder) (total int, err error)
func (*RequestMessage) EncodeScale ¶ added in v1.0.0
func (t *RequestMessage) EncodeScale(enc *scale.Encoder) (total int, err error)
type ResponseBatch ¶ added in v1.0.0
type ResponseBatch struct { ID types.Hash32 Responses []ResponseMessage `scale:"max=1000"` // depends on fetch config `BatchSize` which defaults to 20, more than 1000 seems unlikely }
ResponseBatch is the response struct send for a RequestBatch. the ResponseBatch ID must be the same as stated in RequestBatch even if not all Data is present.
func (*ResponseBatch) DecodeScale ¶ added in v1.0.0
func (t *ResponseBatch) DecodeScale(dec *scale.Decoder) (total int, err error)
func (*ResponseBatch) EncodeScale ¶ added in v1.0.0
func (t *ResponseBatch) EncodeScale(enc *scale.Encoder) (total int, err error)
type ResponseMessage ¶ added in v1.0.0
type ResponseMessage struct { Hash types.Hash32 Data []byte `scale:"max=3200000"` // 100_000 ATXIDs at 32 bytes each is the expected maximum size }
ResponseMessage is sent to the node as a response.
func (*ResponseMessage) DecodeScale ¶ added in v1.0.0
func (t *ResponseMessage) DecodeScale(dec *scale.Decoder) (total int, err error)
func (*ResponseMessage) EncodeScale ¶ added in v1.0.0
func (t *ResponseMessage) EncodeScale(enc *scale.Encoder) (total int, err error)