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) 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) 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) NewAppProtocol(handlerID uint64, handler Handler, options ...ClientOption) (*Client, error)
- 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
- type ValidatorHandler
- type ValidatorSet
- type Validators
Constants ¶
This section is empty.
Variables ¶
var ( ErrAppRequestFailed = errors.New("app request failed") 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 ¶
type ClientOption interface {
// contains filtered or unexported methods
}
ClientOption configures Client
func WithValidatorSampling ¶
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 ¶
type Network struct { Peers *Peers // contains filtered or unexported fields }
Network exposes networking state and supports building p2p application protocols
func NewNetwork ¶
func NewNetwork( log logging.Logger, sender common.AppSender, metrics prometheus.Registerer, namespace string, ) *Network
NewNetwork returns an instance of Network
func (*Network) AppRequest ¶
func (*Network) AppRequestFailed ¶
func (*Network) AppResponse ¶
func (*Network) CrossChainAppRequest ¶
func (*Network) CrossChainAppRequestFailed ¶
func (*Network) CrossChainAppResponse ¶
func (*Network) Disconnected ¶
func (*Network) NewAppProtocol ¶
func (n *Network) NewAppProtocol(handlerID uint64, handler Handler, options ...ClientOption) (*Client, error)
NewAppProtocol reserves an identifier for an application protocol handler and returns a Client that can be used to send messages for the corresponding protocol.
type NoOpHandler ¶
type NoOpHandler struct{}
NoOpHandler drops all messages
func (NoOpHandler) AppRequest ¶
type NodeSampler ¶
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 ¶
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 ¶
func NewPeerTracker( log logging.Logger, metricsNamespace string, registerer prometheus.Registerer, ) (*PeerTracker, error)
func (*PeerTracker) Connected ¶
func (p *PeerTracker) Connected(nodeID ids.NodeID, nodeVersion *version.Application)
Connected should be called when [nodeID] connects to this node
func (*PeerTracker) Disconnected ¶
func (p *PeerTracker) Disconnected(nodeID ids.NodeID)
Disconnected should be called when [nodeID] disconnects from this node
func (*PeerTracker) GetAnyPeer ¶
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 ¶
func (p *PeerTracker) Size() int
Returns the number of peers the node is connected to.
func (*PeerTracker) TrackBandwidth ¶
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 ¶
func (p *PeerTracker) TrackPeer(nodeID ids.NodeID)
Record that we sent a request to [nodeID].
type Peers ¶
type Peers struct {
// contains filtered or unexported fields
}
Peers contains metadata about the current set of connected peers
type SlidingWindowThrottler ¶
type SlidingWindowThrottler struct {
// contains filtered or unexported fields
}
SlidingWindowThrottler is an implementation of the sliding window throttling algorithm.
func NewSlidingWindowThrottler ¶
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 ¶
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 ¶
type ValidatorHandler ¶
type ValidatorHandler struct { Handler ValidatorSet ValidatorSet Log logging.Logger }
ValidatorHandler drops messages from non-validators
type ValidatorSet ¶
type Validators ¶
type Validators struct {
// contains filtered or unexported fields
}
Validators contains a set of nodes that are staking.
func NewValidators ¶
func NewValidators( peers *Peers, log logging.Logger, subnetID ids.ID, validators validators.State, maxValidatorSetStaleness time.Duration, ) *Validators