common

package
v1.10.15 Latest Latest
Warning

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

Go to latest
Published: Nov 2, 2023 License: BSD-3-Clause Imports: 28 Imported by: 260

Documentation

Overview

Package common is a generated GoMock package.

Index

Constants

View Source
const (
	// StatusUpdateFrequency is how many containers should be processed between
	// logs
	StatusUpdateFrequency = 5000

	// MaxOutstandingGetAncestorsRequests is the maximum number of GetAncestors
	// sent but not responded to/failed
	MaxOutstandingGetAncestorsRequests = 10

	// MaxOutstandingBroadcastRequests is the maximum number of requests to have
	// outstanding when broadcasting.
	MaxOutstandingBroadcastRequests = 50
)

Variables

This section is empty.

Functions

This section is empty.

Types

type AcceptedFrontierHandler added in v1.7.4

type AcceptedFrontierHandler interface {
	// Notify this engine of the response to a previously sent
	// GetAcceptedFrontier message with the same requestID.
	AcceptedFrontier(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
		containerID ids.ID,
	) error

	// Notify this engine that a GetAcceptedFrontier request it issued has
	// failed.
	//
	// This function will be called if a GetAcceptedFrontier message with
	// nodeID and requestID was previously sent by this engine and will not
	// receive a response.
	GetAcceptedFrontierFailed(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
	) error
}

func NewNoOpAcceptedFrontierHandler added in v1.7.4

func NewNoOpAcceptedFrontierHandler(log logging.Logger) AcceptedFrontierHandler

type AcceptedHandler

type AcceptedHandler interface {
	// Notify this engine of the response to a previously sent GetAccepted
	// message with the same requestID.
	//
	// It is not guaranteed that the containerIDs are a subset of the
	// containerIDs provided in the request.
	Accepted(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
		containerIDs []ids.ID,
	) error

	// Notify this engine that a GetAccepted request it issued has failed.
	//
	// This function will be called if a GetAccepted message with nodeID and
	// requestID was previously sent by this engine and will not receive a
	// response.
	GetAcceptedFailed(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
	) error
}

func NewNoOpAcceptedHandler added in v1.7.4

func NewNoOpAcceptedHandler(log logging.Logger) AcceptedHandler

type AcceptedSender

type AcceptedSender interface {
	// SendGetAccepted requests that every node in [nodeIDs] sends an Accepted
	// message with all the IDs in [containerIDs] that the node thinks are
	// accepted.
	SendGetAccepted(
		ctx context.Context,
		nodeIDs set.Set[ids.NodeID],
		requestID uint32,
		containerIDs []ids.ID,
	)

	// SendAccepted responds to a GetAccepted message with a set of IDs of
	// containers that are accepted.
	SendAccepted(ctx context.Context, nodeID ids.NodeID, requestID uint32, containerIDs []ids.ID)
}

AcceptedSender defines how a consensus engine sends messages pertaining to accepted containers

type AcceptedStateSummaryHandler added in v1.7.11

type AcceptedStateSummaryHandler interface {
	// Notify this engine of the response to a previously sent
	// GetAcceptedStateSummary message with the same requestID.
	//
	// It is not guaranteed that the summaryIDs have heights corresponding to
	// the heights in the request.
	AcceptedStateSummary(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
		summaryIDs []ids.ID,
	) error

	// Notify this engine that a GetAcceptedStateSummary request it issued has
	// failed.
	//
	// This function will be called if a GetAcceptedStateSummary message with
	// nodeID and requestID was previously sent by this engine and will not
	// receive a response.
	GetAcceptedStateSummaryFailed(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
	) error
}

func NewNoOpAcceptedStateSummaryHandler added in v1.7.11

func NewNoOpAcceptedStateSummaryHandler(log logging.Logger) AcceptedStateSummaryHandler

type AcceptedStateSummarySender added in v1.7.11

type AcceptedStateSummarySender interface {
	// SendGetAcceptedStateSummary requests that every node in [nodeIDs] sends an
	// AcceptedStateSummary message with all the state summary IDs referenced by [heights]
	// that the node thinks are accepted.
	SendGetAcceptedStateSummary(ctx context.Context, nodeIDs set.Set[ids.NodeID], requestID uint32, heights []uint64)

	// SendAcceptedStateSummary responds to a AcceptedStateSummary message with a
	// set of summary ids that are accepted.
	SendAcceptedStateSummary(ctx context.Context, nodeID ids.NodeID, requestID uint32, summaryIDs []ids.ID)
}

type AncestorsHandler added in v1.7.4

type AncestorsHandler interface {
	// Notify this engine of the response to a previously sent GetAncestors
	// message with the same requestID.
	//
	// It is expected, but not guaranteed, that the first element in containers
	// should be the container referenced in the request and that the rest of
	// the containers should be referenced by a prior container in the list.
	Ancestors(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
		containers [][]byte,
	) error

	// Notify this engine that a GetAncestors request it issued has failed.
	//
	// This function will be called if a GetAncestors message with nodeID and
	// requestID was previously sent by this engine and will not receive a
	// response.
	GetAncestorsFailed(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
	) error
}

func NewNoOpAncestorsHandler added in v1.7.4

func NewNoOpAncestorsHandler(log logging.Logger) AncestorsHandler

type AppGossipHandler added in v1.10.12

type AppGossipHandler interface {
	// Notify this engine of a gossip message from nodeID.
	//
	// The meaning of msg is application (VM) specific, and the VM defines how
	// to react to this message.
	//
	// This message is not expected in response to any event, and it does not
	// need to be responded to.
	AppGossip(
		ctx context.Context,
		nodeID ids.NodeID,
		msg []byte,
	) error
}

type AppHandler added in v1.5.3

type AppHandler interface {
	NetworkAppHandler
	CrossChainAppHandler
}

func NewNoOpAppHandler added in v1.7.4

func NewNoOpAppHandler(log logging.Logger) AppHandler

type AppRequestHandler added in v1.10.12

type AppRequestHandler interface {
	// Notify this engine of a request for an AppResponse with the same
	// requestID.
	//
	// The meaning of request, and what should be sent in response to it, is
	// application (VM) specific.
	//
	// It is not guaranteed that request is well-formed or valid.
	//
	// This function can be called by any node at any time.
	AppRequest(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
		deadline time.Time,
		request []byte,
	) error
}

type AppResponseHandler added in v1.10.12

type AppResponseHandler interface {
	// Notify this engine of the response to a previously sent AppRequest with
	// the same requestID.
	//
	// The meaning of response is application (VM) specifc.
	//
	// It is not guaranteed that response is well-formed or valid.
	AppResponse(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
		response []byte,
	) error

	// Notify this engine that an AppRequest it issued has failed.
	//
	// This function will be called if an AppRequest message with nodeID and
	// requestID was previously sent by this engine and will not receive a
	// response.
	AppRequestFailed(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
	) error
}

type AppSender added in v1.5.3

type AppSender interface {
	NetworkAppSender
	CrossChainAppSender
}

AppSender sends application (VM) level messages. See also common.AppHandler.

type BootstrapTracker added in v1.9.9

type BootstrapTracker interface {
	// Returns true iff done bootstrapping
	IsBootstrapped() bool

	// Bootstrapped marks the named chain as being bootstrapped
	Bootstrapped(chainID ids.ID)

	OnBootstrapCompleted() chan struct{}
}

BootstrapTracker describes the standard interface for tracking the status of a subnet bootstrapping

type BootstrapTrackerTest added in v1.9.9

type BootstrapTrackerTest struct {
	T *testing.T

	CantIsBootstrapped, CantBootstrapped, CantOnBootstrapCompleted bool

	IsBootstrappedF func() bool
	BootstrappedF   func(ids.ID)

	OnBootstrapCompletedF func() chan struct{}
}

BootstrapTrackerTest is a test subnet

func (*BootstrapTrackerTest) Bootstrapped added in v1.9.9

func (s *BootstrapTrackerTest) Bootstrapped(chainID ids.ID)

Bootstrapped calls BootstrappedF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*BootstrapTrackerTest) Default added in v1.9.9

func (s *BootstrapTrackerTest) Default(cant bool)

Default set the default callable value to [cant]

func (*BootstrapTrackerTest) IsBootstrapped added in v1.9.9

func (s *BootstrapTrackerTest) IsBootstrapped() bool

IsBootstrapped calls IsBootstrappedF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail. Defaults to returning false.

func (*BootstrapTrackerTest) OnBootstrapCompleted added in v1.9.9

func (s *BootstrapTrackerTest) OnBootstrapCompleted() chan struct{}

type Bootstrapable

type Bootstrapable interface {
	// Force the provided containers to be accepted. Only returns fatal errors
	// if they occur.
	ForceAccepted(ctx context.Context, acceptedContainerIDs []ids.ID) error

	// Clear removes all containers to be processed upon bootstrapping
	Clear(ctx context.Context) error
}

Bootstrapable defines the functionality required to support bootstrapping

type BootstrapableEngine added in v1.7.4

type BootstrapableEngine interface {
	Bootstrapable
	Engine
}

func TraceBootstrapableEngine added in v1.9.1

func TraceBootstrapableEngine(bootstrapableEngine BootstrapableEngine, tracer trace.Tracer) BootstrapableEngine

type BootstrapableTest

type BootstrapableTest struct {
	T *testing.T

	CantForceAccepted, CantClear bool

	ClearF         func(ctx context.Context) error
	ForceAcceptedF func(ctx context.Context, acceptedContainerIDs []ids.ID) error
}

BootstrapableTest is a test engine that supports bootstrapping

func (*BootstrapableTest) Clear added in v1.7.5

func (b *BootstrapableTest) Clear(ctx context.Context) error

func (*BootstrapableTest) Default

func (b *BootstrapableTest) Default(cant bool)

Default sets the default on call handling

func (*BootstrapableTest) ForceAccepted

func (b *BootstrapableTest) ForceAccepted(ctx context.Context, containerIDs []ids.ID) error

type Bootstrapper

type Bootstrapper interface {
	AcceptedFrontierHandler
	AcceptedHandler
	Haltable
	Startup(context.Context) error
	Restart(ctx context.Context, reset bool) error
}

func NewCommonBootstrapper added in v1.7.4

func NewCommonBootstrapper(config Config) Bootstrapper

type BootstrapperTest added in v1.7.4

type BootstrapperTest struct {
	BootstrapableTest
	EngineTest
}

EngineTest is a test engine

func (*BootstrapperTest) Default added in v1.7.4

func (b *BootstrapperTest) Default(cant bool)

type ChitsHandler added in v1.7.4

type ChitsHandler interface {
	// Notify this engine of the response to a previously sent PullQuery or
	// PushQuery message with the same requestID.
	//
	// It is expected, but not guaranteed, that preferredID transitively
	// references preferredIDAtHeight and acceptedID.
	Chits(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
		preferredID ids.ID,
		preferredIDAtHeight ids.ID,
		acceptedID ids.ID,
	) error

	// Notify this engine that a Query request it issued has failed.
	//
	// This function will be called if a PullQuery or PushQuery message with
	// nodeID and requestID was previously sent by this engine and will not
	// receive a response.
	QueryFailed(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
	) error
}

func NewNoOpChitsHandler added in v1.7.4

func NewNoOpChitsHandler(log logging.Logger) ChitsHandler

type Config

type Config struct {
	Ctx     *snow.ConsensusContext
	Beacons validators.Manager

	SampleK          int
	Alpha            uint64
	StartupTracker   tracker.Startup
	Sender           Sender
	Bootstrapable    Bootstrapable
	BootstrapTracker BootstrapTracker
	Timer            Timer

	// Should Bootstrap be retried
	RetryBootstrap bool

	// Max number of times to retry bootstrap before warning the node operator
	RetryBootstrapWarnFrequency int

	// Max time to spend fetching a container and its ancestors when responding
	// to a GetAncestors
	MaxTimeGetAncestors time.Duration

	// Max number of containers in an ancestors message sent by this node.
	AncestorsMaxContainersSent int

	// This node will only consider the first [AncestorsMaxContainersReceived]
	// containers in an ancestors message it receives.
	AncestorsMaxContainersReceived int

	SharedCfg *SharedConfig
}

Config wraps the common configurations that are needed by a Snow consensus engine

func DefaultConfigTest

func DefaultConfigTest() Config

DefaultConfigTest returns a test configuration

func (*Config) Context

func (c *Config) Context() *snow.ConsensusContext

func (*Config) IsBootstrapped added in v0.8.0

func (c *Config) IsBootstrapped() bool

IsBootstrapped returns true iff this chain is done bootstrapping

type CrossChainAppHandler added in v1.9.1

type CrossChainAppHandler interface {
	CrossChainAppRequestHandler
	CrossChainAppResponseHandler
}

type CrossChainAppRequestHandler added in v1.10.12

type CrossChainAppRequestHandler interface {
	// Notify this engine of a request for a CrossChainAppResponse with the same
	// requestID.
	//
	// The meaning of request, and what should be sent in response to it, is
	// application (VM) specific.
	//
	// Guarantees surrounding the request are specific to the implementation of
	// the requesting VM. For example, the request may or may not be guaranteed
	// to be well-formed/valid depending on the implementation of the requesting
	// VM.
	CrossChainAppRequest(
		ctx context.Context,
		chainID ids.ID,
		requestID uint32,
		deadline time.Time,
		request []byte,
	) error
}

type CrossChainAppResponseHandler added in v1.10.12

type CrossChainAppResponseHandler interface {
	// Notify this engine of the response to a previously sent
	// CrossChainAppRequest with the same requestID.
	//
	// The meaning of response is application (VM) specifc.
	//
	// Guarantees surrounding the response are specific to the implementation of
	// the responding VM. For example, the response may or may not be guaranteed
	// to be well-formed/valid depending on the implementation of the requesting
	// VM.
	CrossChainAppResponse(
		ctx context.Context,
		chainID ids.ID,
		requestID uint32,
		response []byte,
	) error

	// Notify this engine that a CrossChainAppRequest it issued has failed.
	//
	// This function will be called if a CrossChainAppRequest message with
	// nodeID and requestID was previously sent by this engine and will not
	// receive a response.
	CrossChainAppRequestFailed(
		ctx context.Context,
		chainID ids.ID,
		requestID uint32,
	) error
}

type CrossChainAppSender added in v1.9.1

type CrossChainAppSender interface {
	// SendCrossChainAppRequest sends an application-level request to a
	// specific chain.
	//
	// A nil return value guarantees that the VM corresponding to this
	// CrossChainAppSender eventually receives either:
	// * A CrossChainAppResponse from [chainID] with ID [requestID]
	// * A CrossChainAppRequestFailed from [chainID] with ID [requestID]
	// Exactly one of the above messages will eventually be received from
	// [chainID].
	// A non-nil error should be considered fatal.
	SendCrossChainAppRequest(ctx context.Context, chainID ids.ID, requestID uint32, appRequestBytes []byte) error
	// SendCrossChainAppResponse sends an application-level response to a
	// specific chain
	//
	// This response must be in response to a CrossChainAppRequest that the VM
	// corresponding to this CrossChainAppSender received from [chainID] with ID
	// [requestID].
	// A non-nil error should be considered fatal.
	SendCrossChainAppResponse(ctx context.Context, chainID ids.ID, requestID uint32, appResponseBytes []byte) error
}

CrossChainAppSender sends local VM-level messages to another VM.

type Engine

type Engine interface {
	Handler

	// Return the context of the chain this engine is working on
	Context() *snow.ConsensusContext

	// Start engine operations from given request ID
	Start(ctx context.Context, startReqID uint32) error

	// Returns nil if the engine is healthy.
	// Periodically called and reported through the health API
	health.Checker

	// GetVM returns this engine's VM
	GetVM() VM
}

Engine describes the standard interface of a consensus engine.

All nodeIDs are assumed to be authenticated.

A consensus engine may recover after returning an error, but it isn't required.

func TraceEngine added in v1.9.1

func TraceEngine(engine Engine, tracer trace.Tracer) Engine

type EngineTest

type EngineTest struct {
	T *testing.T

	CantStart,

	CantIsBootstrapped,
	CantTimeout,
	CantGossip,
	CantHalt,
	CantShutdown,

	CantContext,

	CantNotify,

	CantGetStateSummaryFrontier,
	CantGetStateSummaryFrontierFailed,
	CantStateSummaryFrontier,

	CantGetAcceptedStateSummary,
	CantGetAcceptedStateSummaryFailed,
	CantAcceptedStateSummary,

	CantGetAcceptedFrontier,
	CantGetAcceptedFrontierFailed,
	CantAcceptedFrontier,

	CantGetAccepted,
	CantGetAcceptedFailed,
	CantAccepted,

	CantGet,
	CantGetAncestors,
	CantGetFailed,
	CantGetAncestorsFailed,
	CantPut,
	CantAncestors,

	CantPushQuery,
	CantPullQuery,
	CantQueryFailed,
	CantChits,

	CantConnected,
	CantDisconnected,

	CantHealth,

	CantCrossChainAppRequest,
	CantCrossChainAppRequestFailed,
	CantCrossChainAppResponse,

	CantAppRequest,
	CantAppResponse,
	CantAppGossip,
	CantAppRequestFailed,

	CantGetVM bool

	StartF                       func(ctx context.Context, startReqID uint32) error
	IsBootstrappedF              func() bool
	ContextF                     func() *snow.ConsensusContext
	HaltF                        func(context.Context)
	TimeoutF, GossipF, ShutdownF func(context.Context) error
	NotifyF                      func(context.Context, Message) error
	GetF, GetAncestorsF          func(ctx context.Context, nodeID ids.NodeID, requestID uint32, containerID ids.ID) error
	PullQueryF                   func(ctx context.Context, nodeID ids.NodeID, requestID uint32, containerID ids.ID, requestedHeight uint64) error
	PutF                         func(ctx context.Context, nodeID ids.NodeID, requestID uint32, container []byte) error
	PushQueryF                   func(ctx context.Context, nodeID ids.NodeID, requestID uint32, container []byte, requestedHeight uint64) error
	AncestorsF                   func(ctx context.Context, nodeID ids.NodeID, requestID uint32, containers [][]byte) error
	AcceptedFrontierF            func(ctx context.Context, nodeID ids.NodeID, requestID uint32, containerID ids.ID) error
	GetAcceptedF, AcceptedF      func(ctx context.Context, nodeID ids.NodeID, requestID uint32, preferredIDs []ids.ID) error
	ChitsF                       func(ctx context.Context, nodeID ids.NodeID, requestID uint32, preferredID ids.ID, preferredIDAtHeight ids.ID, acceptedID ids.ID) error
	GetStateSummaryFrontierF, GetStateSummaryFrontierFailedF, GetAcceptedStateSummaryFailedF,
	GetAcceptedFrontierF, GetFailedF, GetAncestorsFailedF,
	QueryFailedF, GetAcceptedFrontierFailedF, GetAcceptedFailedF func(ctx context.Context, nodeID ids.NodeID, requestID uint32) error
	AppRequestFailedF           func(ctx context.Context, nodeID ids.NodeID, requestID uint32) error
	StateSummaryFrontierF       func(ctx context.Context, nodeID ids.NodeID, requestID uint32, summary []byte) error
	GetAcceptedStateSummaryF    func(ctx context.Context, nodeID ids.NodeID, requestID uint32, keys []uint64) error
	AcceptedStateSummaryF       func(ctx context.Context, nodeID ids.NodeID, requestID uint32, summaryIDs []ids.ID) error
	ConnectedF                  func(ctx context.Context, nodeID ids.NodeID, nodeVersion *version.Application) error
	DisconnectedF               func(ctx context.Context, nodeID ids.NodeID) error
	HealthF                     func(context.Context) (interface{}, error)
	GetVMF                      func() VM
	AppRequestF                 func(ctx context.Context, nodeID ids.NodeID, requestID uint32, deadline time.Time, msg []byte) error
	AppResponseF                func(ctx context.Context, nodeID ids.NodeID, requestID uint32, msg []byte) error
	AppGossipF                  func(ctx context.Context, nodeID ids.NodeID, msg []byte) error
	CrossChainAppRequestF       func(ctx context.Context, chainID ids.ID, requestID uint32, deadline time.Time, msg []byte) error
	CrossChainAppResponseF      func(ctx context.Context, chainID ids.ID, requestID uint32, msg []byte) error
	CrossChainAppRequestFailedF func(ctx context.Context, chainID ids.ID, requestID uint32) error
}

EngineTest is a test engine

func (*EngineTest) Accepted

func (e *EngineTest) Accepted(ctx context.Context, nodeID ids.NodeID, requestID uint32, containerIDs []ids.ID) error

func (*EngineTest) AcceptedFrontier

func (e *EngineTest) AcceptedFrontier(ctx context.Context, nodeID ids.NodeID, requestID uint32, containerID ids.ID) error

func (*EngineTest) AcceptedStateSummary added in v1.7.11

func (e *EngineTest) AcceptedStateSummary(ctx context.Context, validatorID ids.NodeID, requestID uint32, summaryIDs []ids.ID) error

func (*EngineTest) Ancestors added in v1.7.4

func (e *EngineTest) Ancestors(ctx context.Context, nodeID ids.NodeID, requestID uint32, containers [][]byte) error

func (*EngineTest) AppGossip added in v1.5.3

func (e *EngineTest) AppGossip(ctx context.Context, nodeID ids.NodeID, msg []byte) error

func (*EngineTest) AppRequest added in v1.5.3

func (e *EngineTest) AppRequest(ctx context.Context, nodeID ids.NodeID, requestID uint32, deadline time.Time, request []byte) error

func (*EngineTest) AppRequestFailed added in v1.5.3

func (e *EngineTest) AppRequestFailed(ctx context.Context, nodeID ids.NodeID, requestID uint32) error

func (*EngineTest) AppResponse added in v1.5.3

func (e *EngineTest) AppResponse(ctx context.Context, nodeID ids.NodeID, requestID uint32, response []byte) error

func (*EngineTest) Chits

func (e *EngineTest) Chits(ctx context.Context, nodeID ids.NodeID, requestID uint32, preferredID ids.ID, preferredIDAtHeight ids.ID, acceptedID ids.ID) error

func (*EngineTest) Connected added in v0.8.2

func (e *EngineTest) Connected(ctx context.Context, nodeID ids.NodeID, nodeVersion *version.Application) error

func (*EngineTest) Context

func (e *EngineTest) Context() *snow.ConsensusContext

func (*EngineTest) CrossChainAppRequest added in v1.9.1

func (e *EngineTest) CrossChainAppRequest(ctx context.Context, chainID ids.ID, requestID uint32, deadline time.Time, request []byte) error

func (*EngineTest) CrossChainAppRequestFailed added in v1.9.1

func (e *EngineTest) CrossChainAppRequestFailed(ctx context.Context, chainID ids.ID, requestID uint32) error

func (*EngineTest) CrossChainAppResponse added in v1.9.1

func (e *EngineTest) CrossChainAppResponse(ctx context.Context, chainID ids.ID, requestID uint32, response []byte) error

func (*EngineTest) Default

func (e *EngineTest) Default(cant bool)

func (*EngineTest) Disconnected added in v0.8.2

func (e *EngineTest) Disconnected(ctx context.Context, nodeID ids.NodeID) error

func (*EngineTest) Get

func (e *EngineTest) Get(ctx context.Context, nodeID ids.NodeID, requestID uint32, containerID ids.ID) error

func (*EngineTest) GetAccepted

func (e *EngineTest) GetAccepted(ctx context.Context, nodeID ids.NodeID, requestID uint32, containerIDs []ids.ID) error

func (*EngineTest) GetAcceptedFailed

func (e *EngineTest) GetAcceptedFailed(ctx context.Context, nodeID ids.NodeID, requestID uint32) error

func (*EngineTest) GetAcceptedFrontier

func (e *EngineTest) GetAcceptedFrontier(ctx context.Context, nodeID ids.NodeID, requestID uint32) error

func (*EngineTest) GetAcceptedFrontierFailed

func (e *EngineTest) GetAcceptedFrontierFailed(ctx context.Context, nodeID ids.NodeID, requestID uint32) error

func (*EngineTest) GetAcceptedStateSummary added in v1.7.11

func (e *EngineTest) GetAcceptedStateSummary(ctx context.Context, validatorID ids.NodeID, requestID uint32, keys []uint64) error

func (*EngineTest) GetAcceptedStateSummaryFailed added in v1.7.11

func (e *EngineTest) GetAcceptedStateSummaryFailed(ctx context.Context, validatorID ids.NodeID, requestID uint32) error

func (*EngineTest) GetAncestors added in v0.8.0

func (e *EngineTest) GetAncestors(ctx context.Context, nodeID ids.NodeID, requestID uint32, containerID ids.ID) error

func (*EngineTest) GetAncestorsFailed added in v0.8.0

func (e *EngineTest) GetAncestorsFailed(ctx context.Context, nodeID ids.NodeID, requestID uint32) error

func (*EngineTest) GetFailed

func (e *EngineTest) GetFailed(ctx context.Context, nodeID ids.NodeID, requestID uint32) error

func (*EngineTest) GetStateSummaryFrontier added in v1.7.11

func (e *EngineTest) GetStateSummaryFrontier(ctx context.Context, validatorID ids.NodeID, requestID uint32) error

func (*EngineTest) GetStateSummaryFrontierFailed added in v1.7.11

func (e *EngineTest) GetStateSummaryFrontierFailed(ctx context.Context, validatorID ids.NodeID, requestID uint32) error

func (*EngineTest) GetVM added in v1.3.2

func (e *EngineTest) GetVM() VM

func (*EngineTest) Gossip added in v0.8.0

func (e *EngineTest) Gossip(ctx context.Context) error

func (*EngineTest) Halt added in v1.4.0

func (e *EngineTest) Halt(ctx context.Context)

func (*EngineTest) HealthCheck added in v1.2.1

func (e *EngineTest) HealthCheck(ctx context.Context) (interface{}, error)

func (*EngineTest) Notify

func (e *EngineTest) Notify(ctx context.Context, msg Message) error

func (*EngineTest) PullQuery

func (e *EngineTest) PullQuery(ctx context.Context, nodeID ids.NodeID, requestID uint32, containerID ids.ID, requestedHeight uint64) error

func (*EngineTest) PushQuery

func (e *EngineTest) PushQuery(ctx context.Context, nodeID ids.NodeID, requestID uint32, container []byte, requestedHeight uint64) error

func (*EngineTest) Put

func (e *EngineTest) Put(ctx context.Context, nodeID ids.NodeID, requestID uint32, container []byte) error

func (*EngineTest) QueryFailed

func (e *EngineTest) QueryFailed(ctx context.Context, nodeID ids.NodeID, requestID uint32) error

func (*EngineTest) Shutdown

func (e *EngineTest) Shutdown(ctx context.Context) error

func (*EngineTest) Start added in v1.7.4

func (e *EngineTest) Start(ctx context.Context, startReqID uint32) error

func (*EngineTest) StateSummaryFrontier added in v1.7.11

func (e *EngineTest) StateSummaryFrontier(ctx context.Context, validatorID ids.NodeID, requestID uint32, summary []byte) error

func (*EngineTest) Timeout added in v1.4.4

func (e *EngineTest) Timeout(ctx context.Context) error

type FetchSender

type FetchSender interface {
	// Request that the specified node send the specified container to this
	// node.
	SendGet(ctx context.Context, nodeID ids.NodeID, requestID uint32, containerID ids.ID)

	// SendGetAncestors requests that node [nodeID] send container [containerID]
	// and its ancestors.
	SendGetAncestors(ctx context.Context, nodeID ids.NodeID, requestID uint32, containerID ids.ID)

	// Tell the specified node about [container].
	SendPut(ctx context.Context, nodeID ids.NodeID, requestID uint32, container []byte)

	// Give the specified node several containers at once. Should be in response
	// to a GetAncestors message with request ID [requestID] from the node.
	SendAncestors(ctx context.Context, nodeID ids.NodeID, requestID uint32, containers [][]byte)
}

FetchSender defines how a consensus engine sends retrieval messages to other nodes.

type Fetcher added in v0.8.0

type Fetcher struct {
	// tracks which validators were asked for which containers in which requests
	OutstandingRequests Requests

	// Called when bootstrapping is done on a specific chain
	OnFinished func(ctx context.Context, lastReqID uint32) error
}

type FrontierSender

type FrontierSender interface {
	// SendGetAcceptedFrontier requests that every node in [nodeIDs] sends an
	// AcceptedFrontier message.
	SendGetAcceptedFrontier(ctx context.Context, nodeIDs set.Set[ids.NodeID], requestID uint32)

	// SendAcceptedFrontier responds to a AcceptedFrontier message with this
	// engine's current accepted frontier.
	SendAcceptedFrontier(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
		containerID ids.ID,
	)
}

FrontierSender defines how a consensus engine sends frontier messages to other nodes.

type Fx

type Fx struct {
	ID ids.ID
	Fx interface{}
}

Fx wraps an instance of a feature extension

type GetAcceptedFrontierHandler added in v1.7.4

type GetAcceptedFrontierHandler interface {
	// Notify this engine of a request for an AcceptedFrontier message with the
	// same requestID and the ID of the most recently accepted container.
	//
	// This function can be called by any node at any time.
	GetAcceptedFrontier(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
	) error
}

type GetAcceptedHandler added in v1.7.4

type GetAcceptedHandler interface {
	// Notify this engine of a request for an Accepted message with the same
	// requestID and the subset of containerIDs that this node has accepted.
	//
	// This function can be called by any node at any time.
	GetAccepted(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
		containerIDs []ids.ID,
	) error
}

type GetAcceptedStateSummaryHandler added in v1.7.11

type GetAcceptedStateSummaryHandler interface {
	// Notify this engine of a request for an AcceptedStateSummary message with
	// the same requestID and the state summary IDs at the requested heights.
	// If this node doesn't have access to a state summary ID at a requested
	// height, that height should be ignored.
	//
	// This function can be called by any node at any time.
	GetAcceptedStateSummary(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
		heights []uint64,
	) error
}

type GetAncestorsHandler added in v1.7.4

type GetAncestorsHandler interface {
	// Notify this engine of a request for an Ancestors message with the same
	// requestID, containerID, and some of its ancestors on a best effort basis.
	//
	// This function can be called by any node at any time.
	GetAncestors(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
		containerID ids.ID,
	) error
}

type GetHandler added in v1.7.4

type GetHandler interface {
	// Notify this engine of a request for a Put message with the same requestID
	// and the container whose ID is containerID.
	//
	// This function can be called by any node at any time.
	Get(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
		containerID ids.ID,
	) error
}

type GetStateSummaryFrontierHandler added in v1.7.11

type GetStateSummaryFrontierHandler interface {
	// Notify this engine of a request for a StateSummaryFrontier message with
	// the same requestID and the engine's most recently accepted state summary.
	//
	// This function can be called by any node at any time.
	GetStateSummaryFrontier(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
	) error
}

type Gossiper added in v0.8.0

type Gossiper interface {
	// Gossip the provided container throughout the network
	SendGossip(ctx context.Context, container []byte)
}

Gossiper defines how a consensus engine gossips a container on the accepted frontier to other nodes

type Haltable added in v1.4.5

type Haltable interface {
	Halt(context.Context)
	Halted() bool
}

type Halter added in v1.4.0

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

func (*Halter) Halt added in v1.4.0

func (h *Halter) Halt(context.Context)

func (*Halter) Halted added in v1.4.0

func (h *Halter) Halted() bool

type InternalHandler

type InternalHandler interface {
	// Notify this engine of peer changes.
	validators.Connector

	// Notify this engine that a registered timeout has fired.
	Timeout(context.Context) error

	// Gossip to the network a container on the accepted frontier
	Gossip(context.Context) error

	// Halt this engine.
	//
	// This function will be called before the environment starts exiting. This
	// function is special, in that it does not expect the chain's context lock
	// to be held before calling this function. This function also does not
	// require the engine to have been started.
	Halt(context.Context)

	// Shutdown this engine.
	//
	// This function will be called when the environment is exiting.
	Shutdown(context.Context) error

	// Notify this engine of a message from the virtual machine.
	Notify(context.Context, Message) error
}

func NewNoOpInternalHandler added in v1.10.1

func NewNoOpInternalHandler(log logging.Logger) InternalHandler

type Message

type Message uint32

Message is an enum of the message types that vms can send to consensus

const (
	// PendingTxs notifies a consensus engine that its VM has pending
	// transactions.
	//
	// The consensus engine must eventually call BuildBlock at least once after
	// receiving this message. If the consensus engine receives multiple
	// PendingTxs messages between calls to BuildBlock, the engine may only call
	// BuildBlock once.
	PendingTxs Message = iota + 1

	// StateSyncDone notifies the state syncer engine that the VM has finishing
	// syncing the requested state summary.
	StateSyncDone
)

func (Message) String

func (msg Message) String() string

type MockSender added in v1.7.11

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

MockSender is a mock of Sender interface.

func NewMockSender added in v1.7.11

func NewMockSender(ctrl *gomock.Controller) *MockSender

NewMockSender creates a new mock instance.

func (*MockSender) Accept added in v1.7.11

func (m *MockSender) Accept(arg0 *snow.ConsensusContext, arg1 ids.ID, arg2 []byte) error

Accept mocks base method.

func (*MockSender) EXPECT added in v1.7.11

func (m *MockSender) EXPECT() *MockSenderMockRecorder

EXPECT returns an object that allows the caller to indicate expected use.

func (*MockSender) SendAccepted added in v1.7.11

func (m *MockSender) SendAccepted(arg0 context.Context, arg1 ids.NodeID, arg2 uint32, arg3 []ids.ID)

SendAccepted mocks base method.

func (*MockSender) SendAcceptedFrontier added in v1.7.11

func (m *MockSender) SendAcceptedFrontier(arg0 context.Context, arg1 ids.NodeID, arg2 uint32, arg3 []ids.ID)

SendAcceptedFrontier mocks base method.

func (*MockSender) SendAcceptedStateSummary added in v1.7.11

func (m *MockSender) SendAcceptedStateSummary(arg0 context.Context, arg1 ids.NodeID, arg2 uint32, arg3 []ids.ID)

SendAcceptedStateSummary mocks base method.

func (*MockSender) SendAncestors added in v1.7.11

func (m *MockSender) SendAncestors(arg0 context.Context, arg1 ids.NodeID, arg2 uint32, arg3 [][]byte)

SendAncestors mocks base method.

func (*MockSender) SendAppGossip added in v1.7.11

func (m *MockSender) SendAppGossip(arg0 context.Context, arg1 []byte) error

SendAppGossip mocks base method.

func (*MockSender) SendAppGossipSpecific added in v1.7.11

func (m *MockSender) SendAppGossipSpecific(arg0 context.Context, arg1 set.Set[ids.NodeID], arg2 []byte) error

SendAppGossipSpecific mocks base method.

func (*MockSender) SendAppRequest added in v1.7.11

func (m *MockSender) SendAppRequest(arg0 context.Context, arg1 set.Set[ids.NodeID], arg2 uint32, arg3 []byte) error

SendAppRequest mocks base method.

func (*MockSender) SendAppResponse added in v1.7.11

func (m *MockSender) SendAppResponse(arg0 context.Context, arg1 ids.NodeID, arg2 uint32, arg3 []byte) error

SendAppResponse mocks base method.

func (*MockSender) SendChits added in v1.7.11

func (m *MockSender) SendChits(arg0 context.Context, arg1 ids.NodeID, arg2 uint32, arg3, arg4 ids.ID)

SendChits mocks base method.

func (*MockSender) SendCrossChainAppRequest added in v1.9.1

func (m *MockSender) SendCrossChainAppRequest(arg0 context.Context, arg1 ids.ID, arg2 uint32, arg3 []byte) error

SendCrossChainAppRequest mocks base method.

func (*MockSender) SendCrossChainAppResponse added in v1.9.1

func (m *MockSender) SendCrossChainAppResponse(arg0 context.Context, arg1 ids.ID, arg2 uint32, arg3 []byte) error

SendCrossChainAppResponse mocks base method.

func (*MockSender) SendGet added in v1.7.11

func (m *MockSender) SendGet(arg0 context.Context, arg1 ids.NodeID, arg2 uint32, arg3 ids.ID)

SendGet mocks base method.

func (*MockSender) SendGetAccepted added in v1.7.11

func (m *MockSender) SendGetAccepted(arg0 context.Context, arg1 set.Set[ids.NodeID], arg2 uint32, arg3 []ids.ID)

SendGetAccepted mocks base method.

func (*MockSender) SendGetAcceptedFrontier added in v1.7.11

func (m *MockSender) SendGetAcceptedFrontier(arg0 context.Context, arg1 set.Set[ids.NodeID], arg2 uint32)

SendGetAcceptedFrontier mocks base method.

func (*MockSender) SendGetAcceptedStateSummary added in v1.7.11

func (m *MockSender) SendGetAcceptedStateSummary(arg0 context.Context, arg1 set.Set[ids.NodeID], arg2 uint32, arg3 []uint64)

SendGetAcceptedStateSummary mocks base method.

func (*MockSender) SendGetAncestors added in v1.7.11

func (m *MockSender) SendGetAncestors(arg0 context.Context, arg1 ids.NodeID, arg2 uint32, arg3 ids.ID)

SendGetAncestors mocks base method.

func (*MockSender) SendGetStateSummaryFrontier added in v1.7.11

func (m *MockSender) SendGetStateSummaryFrontier(arg0 context.Context, arg1 set.Set[ids.NodeID], arg2 uint32)

SendGetStateSummaryFrontier mocks base method.

func (*MockSender) SendGossip added in v1.7.11

func (m *MockSender) SendGossip(arg0 context.Context, arg1 []byte)

SendGossip mocks base method.

func (*MockSender) SendPullQuery added in v1.7.11

func (m *MockSender) SendPullQuery(arg0 context.Context, arg1 set.Set[ids.NodeID], arg2 uint32, arg3 ids.ID)

SendPullQuery mocks base method.

func (*MockSender) SendPushQuery added in v1.7.11

func (m *MockSender) SendPushQuery(arg0 context.Context, arg1 set.Set[ids.NodeID], arg2 uint32, arg3 []byte)

SendPushQuery mocks base method.

func (*MockSender) SendPut added in v1.7.11

func (m *MockSender) SendPut(arg0 context.Context, arg1 ids.NodeID, arg2 uint32, arg3 []byte)

SendPut mocks base method.

func (*MockSender) SendStateSummaryFrontier added in v1.7.11

func (m *MockSender) SendStateSummaryFrontier(arg0 context.Context, arg1 ids.NodeID, arg2 uint32, arg3 []byte)

SendStateSummaryFrontier mocks base method.

type MockSenderMockRecorder added in v1.7.11

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

MockSenderMockRecorder is the mock recorder for MockSender.

func (*MockSenderMockRecorder) Accept added in v1.7.11

func (mr *MockSenderMockRecorder) Accept(arg0, arg1, arg2 interface{}) *gomock.Call

Accept indicates an expected call of Accept.

func (*MockSenderMockRecorder) SendAccepted added in v1.7.11

func (mr *MockSenderMockRecorder) SendAccepted(arg0, arg1, arg2, arg3 interface{}) *gomock.Call

SendAccepted indicates an expected call of SendAccepted.

func (*MockSenderMockRecorder) SendAcceptedFrontier added in v1.7.11

func (mr *MockSenderMockRecorder) SendAcceptedFrontier(arg0, arg1, arg2, arg3 interface{}) *gomock.Call

SendAcceptedFrontier indicates an expected call of SendAcceptedFrontier.

func (*MockSenderMockRecorder) SendAcceptedStateSummary added in v1.7.11

func (mr *MockSenderMockRecorder) SendAcceptedStateSummary(arg0, arg1, arg2, arg3 interface{}) *gomock.Call

SendAcceptedStateSummary indicates an expected call of SendAcceptedStateSummary.

func (*MockSenderMockRecorder) SendAncestors added in v1.7.11

func (mr *MockSenderMockRecorder) SendAncestors(arg0, arg1, arg2, arg3 interface{}) *gomock.Call

SendAncestors indicates an expected call of SendAncestors.

func (*MockSenderMockRecorder) SendAppGossip added in v1.7.11

func (mr *MockSenderMockRecorder) SendAppGossip(arg0, arg1 interface{}) *gomock.Call

SendAppGossip indicates an expected call of SendAppGossip.

func (*MockSenderMockRecorder) SendAppGossipSpecific added in v1.7.11

func (mr *MockSenderMockRecorder) SendAppGossipSpecific(arg0, arg1, arg2 interface{}) *gomock.Call

SendAppGossipSpecific indicates an expected call of SendAppGossipSpecific.

func (*MockSenderMockRecorder) SendAppRequest added in v1.7.11

func (mr *MockSenderMockRecorder) SendAppRequest(arg0, arg1, arg2, arg3 interface{}) *gomock.Call

SendAppRequest indicates an expected call of SendAppRequest.

func (*MockSenderMockRecorder) SendAppResponse added in v1.7.11

func (mr *MockSenderMockRecorder) SendAppResponse(arg0, arg1, arg2, arg3 interface{}) *gomock.Call

SendAppResponse indicates an expected call of SendAppResponse.

func (*MockSenderMockRecorder) SendChits added in v1.7.11

func (mr *MockSenderMockRecorder) SendChits(arg0, arg1, arg2, arg3, arg4 interface{}) *gomock.Call

SendChits indicates an expected call of SendChits.

func (*MockSenderMockRecorder) SendCrossChainAppRequest added in v1.9.1

func (mr *MockSenderMockRecorder) SendCrossChainAppRequest(arg0, arg1, arg2, arg3 interface{}) *gomock.Call

SendCrossChainAppRequest indicates an expected call of SendCrossChainAppRequest.

func (*MockSenderMockRecorder) SendCrossChainAppResponse added in v1.9.1

func (mr *MockSenderMockRecorder) SendCrossChainAppResponse(arg0, arg1, arg2, arg3 interface{}) *gomock.Call

SendCrossChainAppResponse indicates an expected call of SendCrossChainAppResponse.

func (*MockSenderMockRecorder) SendGet added in v1.7.11

func (mr *MockSenderMockRecorder) SendGet(arg0, arg1, arg2, arg3 interface{}) *gomock.Call

SendGet indicates an expected call of SendGet.

func (*MockSenderMockRecorder) SendGetAccepted added in v1.7.11

func (mr *MockSenderMockRecorder) SendGetAccepted(arg0, arg1, arg2, arg3 interface{}) *gomock.Call

SendGetAccepted indicates an expected call of SendGetAccepted.

func (*MockSenderMockRecorder) SendGetAcceptedFrontier added in v1.7.11

func (mr *MockSenderMockRecorder) SendGetAcceptedFrontier(arg0, arg1, arg2 interface{}) *gomock.Call

SendGetAcceptedFrontier indicates an expected call of SendGetAcceptedFrontier.

func (*MockSenderMockRecorder) SendGetAcceptedStateSummary added in v1.7.11

func (mr *MockSenderMockRecorder) SendGetAcceptedStateSummary(arg0, arg1, arg2, arg3 interface{}) *gomock.Call

SendGetAcceptedStateSummary indicates an expected call of SendGetAcceptedStateSummary.

func (*MockSenderMockRecorder) SendGetAncestors added in v1.7.11

func (mr *MockSenderMockRecorder) SendGetAncestors(arg0, arg1, arg2, arg3 interface{}) *gomock.Call

SendGetAncestors indicates an expected call of SendGetAncestors.

func (*MockSenderMockRecorder) SendGetStateSummaryFrontier added in v1.7.11

func (mr *MockSenderMockRecorder) SendGetStateSummaryFrontier(arg0, arg1, arg2 interface{}) *gomock.Call

SendGetStateSummaryFrontier indicates an expected call of SendGetStateSummaryFrontier.

func (*MockSenderMockRecorder) SendGossip added in v1.7.11

func (mr *MockSenderMockRecorder) SendGossip(arg0, arg1 interface{}) *gomock.Call

SendGossip indicates an expected call of SendGossip.

func (*MockSenderMockRecorder) SendPullQuery added in v1.7.11

func (mr *MockSenderMockRecorder) SendPullQuery(arg0, arg1, arg2, arg3 interface{}) *gomock.Call

SendPullQuery indicates an expected call of SendPullQuery.

func (*MockSenderMockRecorder) SendPushQuery added in v1.7.11

func (mr *MockSenderMockRecorder) SendPushQuery(arg0, arg1, arg2, arg3 interface{}) *gomock.Call

SendPushQuery indicates an expected call of SendPushQuery.

func (*MockSenderMockRecorder) SendPut added in v1.7.11

func (mr *MockSenderMockRecorder) SendPut(arg0, arg1, arg2, arg3 interface{}) *gomock.Call

SendPut indicates an expected call of SendPut.

func (*MockSenderMockRecorder) SendStateSummaryFrontier added in v1.7.11

func (mr *MockSenderMockRecorder) SendStateSummaryFrontier(arg0, arg1, arg2, arg3 interface{}) *gomock.Call

SendStateSummaryFrontier indicates an expected call of SendStateSummaryFrontier.

type NetworkAppHandler added in v1.9.1

type NetworkAppHandler interface {
	AppRequestHandler
	AppResponseHandler
	AppGossipHandler
}

type NetworkAppSender added in v1.9.1

type NetworkAppSender interface {
	// Send an application-level request.
	// A nil return value guarantees that for each nodeID in [nodeIDs],
	// the VM corresponding to this AppSender eventually receives either:
	// * An AppResponse from nodeID with ID [requestID]
	// * An AppRequestFailed from nodeID with ID [requestID]
	// Exactly one of the above messages will eventually be received per nodeID.
	// A non-nil error should be considered fatal.
	SendAppRequest(ctx context.Context, nodeIDs set.Set[ids.NodeID], requestID uint32, appRequestBytes []byte) error
	// Send an application-level response to a request.
	// This response must be in response to an AppRequest that the VM corresponding
	// to this AppSender received from [nodeID] with ID [requestID].
	// A non-nil error should be considered fatal.
	SendAppResponse(ctx context.Context, nodeID ids.NodeID, requestID uint32, appResponseBytes []byte) error
	// Gossip an application-level message.
	// A non-nil error should be considered fatal.
	SendAppGossip(ctx context.Context, appGossipBytes []byte) error
	SendAppGossipSpecific(ctx context.Context, nodeIDs set.Set[ids.NodeID], appGossipBytes []byte) error
}

NetworkAppSender sends VM-level messages to nodes in the network.

type PutHandler added in v1.7.4

type PutHandler interface {
	// Notify this engine of either the response to a previously sent Get
	// message with the same requestID or an unsolicited container if the
	// requestID is MaxUint32.
	//
	// It is not guaranteed that container can be parsed or issued.
	Put(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
		container []byte,
	) error

	// Notify this engine that a Get request it issued has failed.
	//
	// This function will be called if a Get message with nodeID and requestID
	// was previously sent by this engine and will not receive a response.
	GetFailed(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
	) error
}

func NewNoOpPutHandler added in v1.7.4

func NewNoOpPutHandler(log logging.Logger) PutHandler

type QueryHandler

type QueryHandler interface {
	// Notify this engine of a request for a Chits message with the same
	// requestID.
	//
	// If the provided containerID is not processing, the engine is expected to
	// respond with the node's current preferences before attempting to issue
	// it.
	//
	// This function can be called by any node at any time.
	PullQuery(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
		containerID ids.ID,
		requestedHeight uint64,
	) error

	// Notify this engine of a request for a Chits message with the same
	// requestID.
	//
	// If the provided container is not processing, the engine is expected to
	// respond with the node's current preferences before attempting to issue
	// it.
	//
	// It is not guaranteed that container can be parsed or issued.
	//
	// This function can be called by any node at any time.
	PushQuery(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
		container []byte,
		requestedHeight uint64,
	) error
}

func NewNoOpQueryHandler added in v1.7.4

func NewNoOpQueryHandler(log logging.Logger) QueryHandler

type QuerySender

type QuerySender interface {
	// Request from the specified nodes their preferred frontier, given the
	// existence of the specified container.
	// This is the same as PullQuery, except that this message includes the body
	// of the container rather than its ID.
	SendPushQuery(
		ctx context.Context,
		nodeIDs set.Set[ids.NodeID],
		requestID uint32,
		container []byte,
		requestedHeight uint64,
	)

	// Request from the specified nodes their preferred frontier, given the
	// existence of the specified container.
	SendPullQuery(
		ctx context.Context,
		nodeIDs set.Set[ids.NodeID],
		requestID uint32,
		containerID ids.ID,
		requestedHeight uint64,
	)

	// Send chits to the specified node
	SendChits(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
		preferredID ids.ID,
		preferredIDAtHeight ids.ID,
		acceptedID ids.ID,
	)
}

QuerySender defines how a consensus engine sends query messages to other nodes.

type Requests added in v0.8.0

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

Requests tracks pending container messages from a peer.

func (*Requests) Add added in v0.8.0

func (r *Requests) Add(vdr ids.NodeID, requestID uint32, containerID ids.ID)

Add a request. Assumes that requestIDs are unique. Assumes that containerIDs are only in one request at a time.

func (*Requests) Contains added in v0.8.0

func (r *Requests) Contains(containerID ids.ID) bool

Contains returns true if there is an outstanding request for the container ID.

func (*Requests) Get added in v1.8.6

func (r *Requests) Get(vdr ids.NodeID, requestID uint32) (ids.ID, bool)

Get the containerID the request is expecting and if the request exists.

func (*Requests) Len added in v0.8.0

func (r *Requests) Len() int

Len returns the total number of outstanding requests.

func (*Requests) Remove added in v0.8.0

func (r *Requests) Remove(vdr ids.NodeID, requestID uint32) (ids.ID, bool)

Remove attempts to abandon a requestID sent to a validator. If the request is currently outstanding, the requested ID will be returned along with true. If the request isn't currently outstanding, false will be returned.

func (*Requests) RemoveAny added in v0.8.0

func (r *Requests) RemoveAny(containerID ids.ID) bool

RemoveAny outstanding requests for the container ID. True is returned if the container ID had an outstanding request.

func (Requests) String added in v1.2.0

func (r Requests) String() string

type Sender

Sender defines how a consensus engine sends messages and requests to other validators.

Messages can be categorized as either: requests, responses, or gossip. Gossip messages do not include requestIDs, because no response is expected from the peer. However, both requests and responses include requestIDs.

It is expected that each [nodeID + requestID + expected response type] that is outstanding at any given time is unique.

As an example, it is valid to send `Get(nodeA, request0)` and `PullQuery(nodeA, request0)` because they have different expected response types, `Put` and `Chits`.

Additionally, after having sent `Get(nodeA, request0)` and receiving either `Put(nodeA, request0)` or `GetFailed(nodeA, request0)`, it is valid to resend `Get(nodeA, request0)`. Because the initial `Get` request is no longer outstanding.

This means that requestIDs can be reused. In practice, requests always have a reasonable maximum timeout, so it is generally safe to assume that by the time the requestID space has been exhausted, the beginning of the requestID space is free of conflicts.

type SenderTest

type SenderTest struct {
	T *testing.T

	CantAccept,
	CantSendGetStateSummaryFrontier, CantSendStateSummaryFrontier,
	CantSendGetAcceptedStateSummary, CantSendAcceptedStateSummary,
	CantSendGetAcceptedFrontier, CantSendAcceptedFrontier,
	CantSendGetAccepted, CantSendAccepted,
	CantSendGet, CantSendGetAncestors, CantSendPut, CantSendAncestors,
	CantSendPullQuery, CantSendPushQuery, CantSendChits,
	CantSendGossip,
	CantSendAppRequest, CantSendAppResponse, CantSendAppGossip, CantSendAppGossipSpecific,
	CantSendCrossChainAppRequest, CantSendCrossChainAppResponse bool

	AcceptF                      func(*snow.ConsensusContext, ids.ID, []byte) error
	SendGetStateSummaryFrontierF func(context.Context, set.Set[ids.NodeID], uint32)
	SendStateSummaryFrontierF    func(context.Context, ids.NodeID, uint32, []byte)
	SendGetAcceptedStateSummaryF func(context.Context, set.Set[ids.NodeID], uint32, []uint64)
	SendAcceptedStateSummaryF    func(context.Context, ids.NodeID, uint32, []ids.ID)
	SendGetAcceptedFrontierF     func(context.Context, set.Set[ids.NodeID], uint32)
	SendAcceptedFrontierF        func(context.Context, ids.NodeID, uint32, ids.ID)
	SendGetAcceptedF             func(context.Context, set.Set[ids.NodeID], uint32, []ids.ID)
	SendAcceptedF                func(context.Context, ids.NodeID, uint32, []ids.ID)
	SendGetF                     func(context.Context, ids.NodeID, uint32, ids.ID)
	SendGetAncestorsF            func(context.Context, ids.NodeID, uint32, ids.ID)
	SendPutF                     func(context.Context, ids.NodeID, uint32, []byte)
	SendAncestorsF               func(context.Context, ids.NodeID, uint32, [][]byte)
	SendPushQueryF               func(context.Context, set.Set[ids.NodeID], uint32, []byte, uint64)
	SendPullQueryF               func(context.Context, set.Set[ids.NodeID], uint32, ids.ID, uint64)
	SendChitsF                   func(context.Context, ids.NodeID, uint32, ids.ID, ids.ID, ids.ID)
	SendGossipF                  func(context.Context, []byte)
	SendAppRequestF              func(context.Context, set.Set[ids.NodeID], uint32, []byte) error
	SendAppResponseF             func(context.Context, ids.NodeID, uint32, []byte) error
	SendAppGossipF               func(context.Context, []byte) error
	SendAppGossipSpecificF       func(context.Context, set.Set[ids.NodeID], []byte) error
	SendCrossChainAppRequestF    func(context.Context, ids.ID, uint32, []byte)
	SendCrossChainAppResponseF   func(context.Context, ids.ID, uint32, []byte)
}

SenderTest is a test sender

func (*SenderTest) Accept added in v1.7.11

func (s *SenderTest) Accept(ctx *snow.ConsensusContext, containerID ids.ID, container []byte) error

Accept calls AcceptF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) Default

func (s *SenderTest) Default(cant bool)

Default set the default callable value to [cant]

func (*SenderTest) SendAccepted added in v1.5.3

func (s *SenderTest) SendAccepted(ctx context.Context, validatorID ids.NodeID, requestID uint32, containerIDs []ids.ID)

SendAccepted calls SendAcceptedF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) SendAcceptedFrontier added in v1.5.3

func (s *SenderTest) SendAcceptedFrontier(ctx context.Context, validatorID ids.NodeID, requestID uint32, containerID ids.ID)

SendAcceptedFrontier calls SendAcceptedFrontierF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) SendAcceptedStateSummary added in v1.7.11

func (s *SenderTest) SendAcceptedStateSummary(ctx context.Context, validatorID ids.NodeID, requestID uint32, summaryIDs []ids.ID)

SendAcceptedStateSummary calls SendAcceptedStateSummaryF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) SendAncestors added in v1.7.4

func (s *SenderTest) SendAncestors(ctx context.Context, vdr ids.NodeID, requestID uint32, containers [][]byte)

SendAncestors calls SendAncestorsF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) SendAppGossip added in v1.5.3

func (s *SenderTest) SendAppGossip(ctx context.Context, appGossipBytes []byte) error

SendAppGossip calls SendAppGossipF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) SendAppGossipSpecific added in v1.6.2

func (s *SenderTest) SendAppGossipSpecific(ctx context.Context, nodeIDs set.Set[ids.NodeID], appGossipBytes []byte) error

SendAppGossipSpecific calls SendAppGossipSpecificF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) SendAppRequest added in v1.5.3

func (s *SenderTest) SendAppRequest(ctx context.Context, nodeIDs set.Set[ids.NodeID], requestID uint32, appRequestBytes []byte) error

SendAppRequest calls SendAppRequestF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) SendAppResponse added in v1.5.3

func (s *SenderTest) SendAppResponse(ctx context.Context, nodeID ids.NodeID, requestID uint32, appResponseBytes []byte) error

SendAppResponse calls SendAppResponseF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) SendChits added in v1.5.3

func (s *SenderTest) SendChits(ctx context.Context, vdr ids.NodeID, requestID uint32, preferredID ids.ID, preferredIDAtHeight ids.ID, acceptedID ids.ID)

SendChits calls SendChitsF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) SendCrossChainAppRequest added in v1.9.1

func (s *SenderTest) SendCrossChainAppRequest(ctx context.Context, chainID ids.ID, requestID uint32, appRequestBytes []byte) error

SendCrossChainAppRequest calls SendCrossChainAppRequestF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) SendCrossChainAppResponse added in v1.9.1

func (s *SenderTest) SendCrossChainAppResponse(ctx context.Context, chainID ids.ID, requestID uint32, appResponseBytes []byte) error

SendCrossChainAppResponse calls SendCrossChainAppResponseF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) SendGet added in v1.5.3

func (s *SenderTest) SendGet(ctx context.Context, vdr ids.NodeID, requestID uint32, containerID ids.ID)

SendGet calls SendGetF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) SendGetAccepted added in v1.5.3

func (s *SenderTest) SendGetAccepted(ctx context.Context, nodeIDs set.Set[ids.NodeID], requestID uint32, containerIDs []ids.ID)

SendGetAccepted calls SendGetAcceptedF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) SendGetAcceptedFrontier added in v1.5.3

func (s *SenderTest) SendGetAcceptedFrontier(ctx context.Context, validatorIDs set.Set[ids.NodeID], requestID uint32)

SendGetAcceptedFrontier calls SendGetAcceptedFrontierF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) SendGetAcceptedStateSummary added in v1.7.11

func (s *SenderTest) SendGetAcceptedStateSummary(ctx context.Context, nodeIDs set.Set[ids.NodeID], requestID uint32, heights []uint64)

SendGetAcceptedStateSummary calls SendGetAcceptedStateSummaryF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) SendGetAncestors added in v1.5.3

func (s *SenderTest) SendGetAncestors(ctx context.Context, validatorID ids.NodeID, requestID uint32, containerID ids.ID)

SendGetAncestors calls SendGetAncestorsF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) SendGetStateSummaryFrontier added in v1.7.11

func (s *SenderTest) SendGetStateSummaryFrontier(ctx context.Context, validatorIDs set.Set[ids.NodeID], requestID uint32)

SendGetStateSummaryFrontier calls SendGetStateSummaryFrontierF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) SendGossip added in v1.5.3

func (s *SenderTest) SendGossip(ctx context.Context, container []byte)

SendGossip calls SendGossipF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) SendPullQuery added in v1.5.3

func (s *SenderTest) SendPullQuery(ctx context.Context, vdrs set.Set[ids.NodeID], requestID uint32, containerID ids.ID, requestedHeight uint64)

SendPullQuery calls SendPullQueryF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) SendPushQuery added in v1.5.3

func (s *SenderTest) SendPushQuery(ctx context.Context, vdrs set.Set[ids.NodeID], requestID uint32, container []byte, requestedHeight uint64)

SendPushQuery calls SendPushQueryF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) SendPut added in v1.5.3

func (s *SenderTest) SendPut(ctx context.Context, vdr ids.NodeID, requestID uint32, container []byte)

SendPut calls SendPutF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

func (*SenderTest) SendStateSummaryFrontier added in v1.7.11

func (s *SenderTest) SendStateSummaryFrontier(ctx context.Context, validatorID ids.NodeID, requestID uint32, summary []byte)

SendStateSummaryFrontier calls SendStateSummaryFrontierF if it was initialized. If it wasn't initialized and this function shouldn't be called and testing was initialized, then testing will fail.

type SharedConfig added in v1.7.4

type SharedConfig struct {
	// Tracks the last requestID that was used in a request
	RequestID uint32

	// True if RestartBootstrap has been called at least once
	Restarted bool
}

Shared among common.bootstrapper and snowman/avalanche bootstrapper

type StateSummaryFrontierHandler added in v1.7.11

type StateSummaryFrontierHandler interface {
	// Notify this engine of the response to a previously sent
	// GetStateSummaryFrontier message with the same requestID.
	//
	// It is not guaranteed that the summary bytes are from a valid state
	// summary.
	StateSummaryFrontier(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
		summary []byte,
	) error

	// Notify this engine that a GetStateSummaryFrontier request it issued has
	// failed.
	//
	// This function will be called if a GetStateSummaryFrontier message with
	// nodeID and requestID was previously sent by this engine and will not
	// receive a response.
	GetStateSummaryFrontierFailed(
		ctx context.Context,
		nodeID ids.NodeID,
		requestID uint32,
	) error
}

func NewNoOpStateSummaryFrontierHandler added in v1.7.11

func NewNoOpStateSummaryFrontierHandler(log logging.Logger) StateSummaryFrontierHandler

type StateSummarySender added in v1.7.11

type StateSummarySender interface {
	// SendGetStateSummaryFrontier requests that every node in [nodeIDs] sends a
	// StateSummaryFrontier message.
	SendGetStateSummaryFrontier(ctx context.Context, nodeIDs set.Set[ids.NodeID], requestID uint32)

	// SendStateSummaryFrontier responds to a StateSummaryFrontier message with this
	// engine's current state summary frontier.
	SendStateSummaryFrontier(ctx context.Context, nodeID ids.NodeID, requestID uint32, summary []byte)
}

StateSummarySender defines how a consensus engine sends state sync messages to other nodes.

type StateSyncer added in v1.7.11

type StateSyncer interface {
	Engine

	// IsEnabled returns true if the underlying VM wants to perform state sync.
	// Any returned error will be considered fatal.
	IsEnabled(context.Context) (bool, error)
}

StateSyncer controls the selection and verification of state summaries to drive VM state syncing. It collects the latest state summaries and elicit votes on them, making sure that a qualified majority of nodes support the selected state summary.

func TraceStateSyncer added in v1.9.1

func TraceStateSyncer(stateSyncer StateSyncer, tracer trace.Tracer) StateSyncer

type TestVM added in v0.8.0

type TestVM struct {
	T *testing.T

	CantInitialize, CantSetState,
	CantShutdown, CantCreateHandlers, CantCreateStaticHandlers,
	CantHealthCheck, CantConnected, CantDisconnected, CantVersion,
	CantAppRequest, CantAppResponse, CantAppGossip, CantAppRequestFailed,
	CantCrossChainAppRequest, CantCrossChainAppResponse, CantCrossChainAppRequestFailed bool

	InitializeF                 func(ctx context.Context, chainCtx *snow.Context, db database.Database, genesisBytes []byte, upgradeBytes []byte, configBytes []byte, msgChan chan<- Message, fxs []*Fx, appSender AppSender) error
	SetStateF                   func(ctx context.Context, state snow.State) error
	ShutdownF                   func(context.Context) error
	CreateHandlersF             func(context.Context) (map[string]http.Handler, error)
	CreateStaticHandlersF       func(context.Context) (map[string]http.Handler, error)
	ConnectedF                  func(ctx context.Context, nodeID ids.NodeID, nodeVersion *version.Application) error
	DisconnectedF               func(ctx context.Context, nodeID ids.NodeID) error
	HealthCheckF                func(context.Context) (interface{}, error)
	AppRequestF                 func(ctx context.Context, nodeID ids.NodeID, requestID uint32, deadline time.Time, msg []byte) error
	AppResponseF                func(ctx context.Context, nodeID ids.NodeID, requestID uint32, msg []byte) error
	AppGossipF                  func(ctx context.Context, nodeID ids.NodeID, msg []byte) error
	AppRequestFailedF           func(ctx context.Context, nodeID ids.NodeID, requestID uint32) error
	VersionF                    func(context.Context) (string, error)
	CrossChainAppRequestF       func(ctx context.Context, chainID ids.ID, requestID uint32, deadline time.Time, msg []byte) error
	CrossChainAppResponseF      func(ctx context.Context, chainID ids.ID, requestID uint32, msg []byte) error
	CrossChainAppRequestFailedF func(ctx context.Context, chainID ids.ID, requestID uint32) error
}

TestVM is a test vm

func (*TestVM) AppGossip added in v1.5.3

func (vm *TestVM) AppGossip(ctx context.Context, nodeID ids.NodeID, msg []byte) error

func (*TestVM) AppRequest added in v1.5.3

func (vm *TestVM) AppRequest(ctx context.Context, nodeID ids.NodeID, requestID uint32, deadline time.Time, request []byte) error

func (*TestVM) AppRequestFailed added in v1.5.3

func (vm *TestVM) AppRequestFailed(ctx context.Context, nodeID ids.NodeID, requestID uint32) error

func (*TestVM) AppResponse added in v1.5.3

func (vm *TestVM) AppResponse(ctx context.Context, nodeID ids.NodeID, requestID uint32, response []byte) error

func (*TestVM) Connected added in v1.4.8

func (vm *TestVM) Connected(ctx context.Context, id ids.NodeID, nodeVersion *version.Application) error

func (*TestVM) CreateHandlers added in v0.8.0

func (vm *TestVM) CreateHandlers(ctx context.Context) (map[string]http.Handler, error)

func (*TestVM) CreateStaticHandlers added in v0.8.0

func (vm *TestVM) CreateStaticHandlers(ctx context.Context) (map[string]http.Handler, error)

func (*TestVM) CrossChainAppRequest added in v1.9.1

func (vm *TestVM) CrossChainAppRequest(ctx context.Context, chainID ids.ID, requestID uint32, deadline time.Time, request []byte) error

func (*TestVM) CrossChainAppRequestFailed added in v1.9.1

func (vm *TestVM) CrossChainAppRequestFailed(ctx context.Context, chainID ids.ID, requestID uint32) error

func (*TestVM) CrossChainAppResponse added in v1.9.1

func (vm *TestVM) CrossChainAppResponse(ctx context.Context, chainID ids.ID, requestID uint32, response []byte) error

func (*TestVM) Default added in v0.8.0

func (vm *TestVM) Default(cant bool)

func (*TestVM) Disconnected added in v1.4.8

func (vm *TestVM) Disconnected(ctx context.Context, id ids.NodeID) error

func (*TestVM) HealthCheck added in v1.2.1

func (vm *TestVM) HealthCheck(ctx context.Context) (interface{}, error)

func (*TestVM) Initialize added in v0.8.0

func (vm *TestVM) Initialize(
	ctx context.Context,
	chainCtx *snow.Context,
	db database.Database,
	genesisBytes,
	upgradeBytes,
	configBytes []byte,
	msgChan chan<- Message,
	fxs []*Fx,
	appSender AppSender,
) error

func (*TestVM) SetState added in v1.7.5

func (vm *TestVM) SetState(ctx context.Context, state snow.State) error

func (*TestVM) Shutdown added in v0.8.0

func (vm *TestVM) Shutdown(ctx context.Context) error

func (*TestVM) Version added in v1.4.10

func (vm *TestVM) Version(ctx context.Context) (string, error)

type Timer added in v1.4.4

type Timer interface {
	// RegisterTimeout specifies how much time to delay the next timeout message
	// by. If the subnet has been bootstrapped, the timeout will fire
	// immediately.
	RegisterTimeout(time.Duration)
}

Timer describes the standard interface for specifying a timeout

type TimerTest added in v1.4.4

type TimerTest struct {
	T *testing.T

	CantRegisterTimout bool

	RegisterTimeoutF func(time.Duration)
}

TimerTest is a test timer

func (*TimerTest) Default added in v1.4.4

func (t *TimerTest) Default(cant bool)

Default set the default callable value to [cant]

func (*TimerTest) RegisterTimeout added in v1.4.4

func (t *TimerTest) RegisterTimeout(delay time.Duration)

type VM

type VM interface {
	AppHandler

	// Returns nil if the VM is healthy.
	// Periodically called and reported via the node's Health API.
	health.Checker

	// Connector represents a handler that is called on connection connect/disconnect
	validators.Connector

	// Initialize this VM.
	// [chainCtx]: Metadata about this VM.
	//     [chainCtx.networkID]: The ID of the network this VM's chain is
	//                           running on.
	//     [chainCtx.chainID]: The unique ID of the chain this VM is running on.
	//     [chainCtx.Log]: Used to log messages
	//     [chainCtx.NodeID]: The unique staker ID of this node.
	//     [chainCtx.Lock]: A Read/Write lock shared by this VM and the
	//                      consensus engine that manages this VM. The write
	//                      lock is held whenever code in the consensus engine
	//                      calls the VM.
	// [dbManager]: The manager of the database this VM will persist data to.
	// [genesisBytes]: The byte-encoding of the genesis information of this
	//                 VM. The VM uses it to initialize its state. For
	//                 example, if this VM were an account-based payments
	//                 system, `genesisBytes` would probably contain a genesis
	//                 transaction that gives coins to some accounts, and this
	//                 transaction would be in the genesis block.
	// [toEngine]: The channel used to send messages to the consensus engine.
	// [fxs]: Feature extensions that attach to this VM.
	Initialize(
		ctx context.Context,
		chainCtx *snow.Context,
		db database.Database,
		genesisBytes []byte,
		upgradeBytes []byte,
		configBytes []byte,
		toEngine chan<- Message,
		fxs []*Fx,
		appSender AppSender,
	) error

	// SetState communicates to VM its next state it starts
	SetState(ctx context.Context, state snow.State) error

	// Shutdown is called when the node is shutting down.
	Shutdown(context.Context) error

	// Version returns the version of the VM.
	Version(context.Context) (string, error)

	// Creates the HTTP handlers for custom VM network calls.
	//
	// This exposes handlers that the outside world can use to communicate with
	// a static reference to the VM. Each handler has the path:
	// [Address of node]/ext/VM/[VM ID]/[extension]
	//
	// Returns a mapping from [extension]s to HTTP handlers.
	//
	// For example, it might make sense to have an extension for creating
	// genesis bytes this VM can interpret.
	//
	// Note: If this method is called, no other method will be called on this VM.
	// Each registered VM will have a single instance created to handle static
	// APIs. This instance will be handled separately from instances created to
	// service an instance of a chain.
	CreateStaticHandlers(context.Context) (map[string]http.Handler, error)

	// Creates the HTTP handlers for custom chain network calls.
	//
	// This exposes handlers that the outside world can use to communicate with
	// the chain. Each handler has the path:
	// [Address of node]/ext/bc/[chain ID]/[extension]
	//
	// Returns a mapping from [extension]s to HTTP handlers.
	//
	// For example, if this VM implements an account-based payments system,
	// it have an extension called `accounts`, where clients could get
	// information about their accounts.
	CreateHandlers(context.Context) (map[string]http.Handler, error)
}

VM describes the interface that all consensus VMs must implement

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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