Documentation ¶
Index ¶
- Variables
- type AppResponseCallback
- type Client
- func (c *Client) AppGossip(ctx context.Context, appGossipBytes []byte) error
- func (c *Client) AppGossipSpecific(ctx context.Context, nodeIDs set.Set[ids.NodeID], appGossipBytes []byte) error
- func (c *Client) AppRequest(ctx context.Context, nodeIDs set.Set[ids.NodeID], appRequestBytes []byte, ...) error
- func (c *Client) AppRequestAny(ctx context.Context, appRequestBytes []byte, onResponse AppResponseCallback) error
- func (c *Client) CrossChainAppRequest(ctx context.Context, chainID ids.ID, appRequestBytes []byte, ...) error
- type ClientOption
- type CrossChainAppResponseCallback
- type Handler
- type Network
- func (n *Network) AddHandler(handlerID uint64, handler Handler) error
- func (n *Network) AppGossip(ctx context.Context, nodeID ids.NodeID, msg []byte) error
- func (n *Network) AppRequest(ctx context.Context, nodeID ids.NodeID, requestID uint32, deadline time.Time, ...) error
- func (n *Network) AppRequestFailed(ctx context.Context, nodeID ids.NodeID, requestID uint32, ...) error
- func (n *Network) AppResponse(ctx context.Context, nodeID ids.NodeID, requestID uint32, response []byte) error
- func (n *Network) Connected(_ context.Context, nodeID ids.NodeID, _ *version.Application) error
- func (n *Network) CrossChainAppRequest(ctx context.Context, chainID ids.ID, requestID uint32, deadline time.Time, ...) error
- func (n *Network) CrossChainAppRequestFailed(ctx context.Context, chainID ids.ID, requestID uint32, appErr *common.AppError) error
- func (n *Network) CrossChainAppResponse(ctx context.Context, chainID ids.ID, requestID uint32, response []byte) error
- func (n *Network) Disconnected(_ context.Context, nodeID ids.NodeID) error
- func (n *Network) NewClient(handlerID uint64, options ...ClientOption) *Client
- type NoOpHandler
- type NodeSampler
- type PeerTracker
- func (p *PeerTracker) Connected(nodeID ids.NodeID, nodeVersion *version.Application)
- func (p *PeerTracker) Disconnected(nodeID ids.NodeID)
- func (p *PeerTracker) GetAnyPeer(minVersion *version.Application) (ids.NodeID, bool)
- func (p *PeerTracker) Size() int
- func (p *PeerTracker) TrackBandwidth(nodeID ids.NodeID, bandwidth float64)
- func (p *PeerTracker) TrackPeer(nodeID ids.NodeID)
- type Peers
- type SlidingWindowThrottler
- type Throttler
- type ThrottlerHandler
- func (t ThrottlerHandler) AppGossip(ctx context.Context, nodeID ids.NodeID, gossipBytes []byte)
- func (t ThrottlerHandler) AppRequest(ctx context.Context, nodeID ids.NodeID, deadline time.Time, ...) ([]byte, error)
- func (t ThrottlerHandler) CrossChainAppRequest(ctx context.Context, chainID ids.ID, deadline time.Time, requestBytes []byte) ([]byte, error)
- type ValidatorHandler
- func (v ValidatorHandler) AppGossip(ctx context.Context, nodeID ids.NodeID, gossipBytes []byte)
- func (v ValidatorHandler) AppRequest(ctx context.Context, nodeID ids.NodeID, deadline time.Time, ...) ([]byte, error)
- func (v ValidatorHandler) CrossChainAppRequest(ctx context.Context, chainID ids.ID, deadline time.Time, requestBytes []byte) ([]byte, error)
- type ValidatorSet
- type Validators
Constants ¶
This section is empty.
Variables ¶
var ( ErrRequestPending = errors.New("request pending") ErrNoPeers = errors.New("no peers") )
var ( ErrExistingAppProtocol = errors.New("existing app protocol") ErrUnrequestedResponse = errors.New("unrequested response") )
var (
ErrNotValidator = errors.New("not a validator")
)
var (
ErrThrottled = errors.New("throttled")
)
Functions ¶
This section is empty.
Types ¶
type AppResponseCallback ¶
type AppResponseCallback func( ctx context.Context, nodeID ids.NodeID, responseBytes []byte, err error, )
AppResponseCallback is called upon receiving an AppResponse for an AppRequest issued by Client. Callers should check [err] to see whether the AppRequest failed or not.
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
func (*Client) AppGossipSpecific ¶
func (c *Client) AppGossipSpecific( ctx context.Context, nodeIDs set.Set[ids.NodeID], appGossipBytes []byte, ) error
AppGossipSpecific sends a gossip message to a predetermined set of peers.
func (*Client) AppRequest ¶
func (c *Client) AppRequest( ctx context.Context, nodeIDs set.Set[ids.NodeID], appRequestBytes []byte, onResponse AppResponseCallback, ) error
AppRequest issues an arbitrary request to a node. [onResponse] is invoked upon an error or a response.
func (*Client) AppRequestAny ¶
func (c *Client) AppRequestAny( ctx context.Context, appRequestBytes []byte, onResponse AppResponseCallback, ) error
AppRequestAny issues an AppRequest to an arbitrary node decided by Client. If a specific node needs to be requested, use AppRequest instead. See AppRequest for more docs.
func (*Client) CrossChainAppRequest ¶
func (c *Client) CrossChainAppRequest( ctx context.Context, chainID ids.ID, appRequestBytes []byte, onResponse CrossChainAppResponseCallback, ) error
CrossChainAppRequest sends a cross chain app request to another vm. [onResponse] is invoked upon an error or a response.
type ClientOption ¶ added in v1.10.17
type ClientOption interface {
// contains filtered or unexported methods
}
ClientOption configures Client
func WithValidatorSampling ¶ added in v1.10.17
func WithValidatorSampling(validators *Validators) ClientOption
WithValidatorSampling configures Client.AppRequestAny to sample validators
type CrossChainAppResponseCallback ¶
type CrossChainAppResponseCallback func( ctx context.Context, chainID ids.ID, responseBytes []byte, err error, )
CrossChainAppResponseCallback is called upon receiving an CrossChainAppResponse for a CrossChainAppRequest issued by Client. Callers should check [err] to see whether the AppRequest failed or not.
type Handler ¶
type Handler interface { // AppGossip is called when handling an AppGossip message. AppGossip( ctx context.Context, nodeID ids.NodeID, gossipBytes []byte, ) // AppRequest is called when handling an AppRequest message. // Returns the bytes for the response corresponding to [requestBytes] AppRequest( ctx context.Context, nodeID ids.NodeID, deadline time.Time, requestBytes []byte, ) ([]byte, error) // CrossChainAppRequest is called when handling a CrossChainAppRequest // message. // Returns the bytes for the response corresponding to [requestBytes] CrossChainAppRequest( ctx context.Context, chainID ids.ID, deadline time.Time, requestBytes []byte, ) ([]byte, error) }
Handler is the server-side logic for virtual machine application protocols.
type Network ¶ added in v1.10.17
type Network struct { Peers *Peers // contains filtered or unexported fields }
Network exposes networking state and supports building p2p application protocols
func NewNetwork ¶ added in v1.10.17
func NewNetwork( log logging.Logger, sender common.AppSender, registerer prometheus.Registerer, namespace string, ) (*Network, error)
NewNetwork returns an instance of Network
func (*Network) AddHandler ¶ added in v1.10.18
AddHandler reserves an identifier for an application protocol
func (*Network) AppRequest ¶ added in v1.10.17
func (*Network) AppRequestFailed ¶ added in v1.10.17
func (*Network) AppResponse ¶ added in v1.10.17
func (*Network) CrossChainAppRequest ¶ added in v1.10.17
func (*Network) CrossChainAppRequestFailed ¶ added in v1.10.17
func (*Network) CrossChainAppResponse ¶ added in v1.10.17
func (*Network) Disconnected ¶ added in v1.10.17
type NoOpHandler ¶ added in v1.10.9
type NoOpHandler struct{}
NoOpHandler drops all messages
func (NoOpHandler) AppRequest ¶ added in v1.10.9
type NodeSampler ¶ added in v1.10.9
type NodeSampler interface { // Sample returns at most [limit] nodes. This may return fewer nodes if // fewer than [limit] are available. Sample(ctx context.Context, limit int) []ids.NodeID }
NodeSampler samples nodes in network
type PeerTracker ¶ added in v1.10.17
type PeerTracker struct {
// contains filtered or unexported fields
}
Tracks the bandwidth of responses coming from peers, preferring to contact peers with known good bandwidth, connecting to new peers with an exponentially decaying probability.
func NewPeerTracker ¶ added in v1.10.17
func NewPeerTracker( log logging.Logger, metricsNamespace string, registerer prometheus.Registerer, ) (*PeerTracker, error)
func (*PeerTracker) Connected ¶ added in v1.10.17
func (p *PeerTracker) Connected(nodeID ids.NodeID, nodeVersion *version.Application)
Connected should be called when [nodeID] connects to this node
func (*PeerTracker) Disconnected ¶ added in v1.10.17
func (p *PeerTracker) Disconnected(nodeID ids.NodeID)
Disconnected should be called when [nodeID] disconnects from this node
func (*PeerTracker) GetAnyPeer ¶ added in v1.10.17
func (p *PeerTracker) GetAnyPeer(minVersion *version.Application) (ids.NodeID, bool)
TODO get rid of minVersion Returns a peer that we're connected to. If we should track more peers, returns a random peer with version >= [minVersion], if any exist. Otherwise, with probability [randomPeerProbability] returns a random peer from [p.responsivePeers]. With probability [1-randomPeerProbability] returns the peer in [p.bandwidthHeap] with the highest bandwidth.
func (*PeerTracker) Size ¶ added in v1.10.17
func (p *PeerTracker) Size() int
Returns the number of peers the node is connected to.
func (*PeerTracker) TrackBandwidth ¶ added in v1.10.17
func (p *PeerTracker) TrackBandwidth(nodeID ids.NodeID, bandwidth float64)
Record that we observed that [nodeID]'s bandwidth is [bandwidth]. Adds the peer's bandwidth averager to the bandwidth heap.
func (*PeerTracker) TrackPeer ¶ added in v1.10.17
func (p *PeerTracker) TrackPeer(nodeID ids.NodeID)
Record that we sent a request to [nodeID].
type Peers ¶ added in v1.10.9
type Peers struct {
// contains filtered or unexported fields
}
Peers contains metadata about the current set of connected peers
type SlidingWindowThrottler ¶ added in v1.10.10
type SlidingWindowThrottler struct {
// contains filtered or unexported fields
}
SlidingWindowThrottler is an implementation of the sliding window throttling algorithm.
func NewSlidingWindowThrottler ¶ added in v1.10.10
func NewSlidingWindowThrottler(period time.Duration, limit int) *SlidingWindowThrottler
NewSlidingWindowThrottler returns a new instance of SlidingWindowThrottler. Nodes are throttled if they exceed [limit] messages during an interval of time over [period]. [period] and [limit] should both be > 0.
func (*SlidingWindowThrottler) Handle ¶ added in v1.10.10
func (s *SlidingWindowThrottler) Handle(nodeID ids.NodeID) bool
Handle returns true if the amount of calls received in the last [s.period] time is less than [s.limit]
This is calculated by adding the current period's count to a weighted count of the previous period.
type ThrottlerHandler ¶ added in v1.10.10
type ThrottlerHandler struct {
// contains filtered or unexported fields
}
func NewThrottlerHandler ¶ added in v1.10.18
func NewThrottlerHandler(handler Handler, throttler Throttler, log logging.Logger) *ThrottlerHandler
func (ThrottlerHandler) AppRequest ¶ added in v1.10.10
type ValidatorHandler ¶ added in v1.10.10
type ValidatorHandler struct {
// contains filtered or unexported fields
}
ValidatorHandler drops messages from non-validators
func NewValidatorHandler ¶ added in v1.10.18
func NewValidatorHandler( handler Handler, validatorSet ValidatorSet, log logging.Logger, ) *ValidatorHandler
func (ValidatorHandler) AppRequest ¶ added in v1.10.10
type ValidatorSet ¶ added in v1.10.10
type Validators ¶ added in v1.10.9
type Validators struct {
// contains filtered or unexported fields
}
Validators contains a set of nodes that are staking.
func NewValidators ¶ added in v1.10.9
func NewValidators( peers *Peers, log logging.Logger, subnetID ids.ID, validators validators.State, maxValidatorSetStaleness time.Duration, ) *Validators