chainsync

package
v0.38.2 Latest Latest
Warning

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

Go to latest
Published: May 11, 2023 License: Apache-2.0 Imports: 8 Imported by: 5

Documentation

Overview

Package chainsync implements the Ouroboros chain-sync protocol

Index

Constants

View Source
const (
	MessageTypeRequestNext       = 0
	MessageTypeAwaitReply        = 1
	MessageTypeRollForward       = 2
	MessageTypeRollBackward      = 3
	MessageTypeFindIntersect     = 4
	MessageTypeIntersectFound    = 5
	MessageTypeIntersectNotFound = 6
	MessageTypeDone              = 7
)

Message types

Variables

View Source
var StateMap = protocol.StateMap{
	// contains filtered or unexported fields
}

ChainSync protocol state machine

View Source
var StopSyncProcessError = fmt.Errorf("stop sync process")

StopChainSync is used as a special return value from a RollForward or RollBackward handler function to signify that the sync process should be stopped

Functions

func NewMsgFromCbor

func NewMsgFromCbor(protoMode protocol.ProtocolMode, msgType uint, data []byte) (protocol.Message, error)

NewMsgFromCbor parses a ChainSync message from CBOR

func NewMsgFromCborNtC

func NewMsgFromCborNtC(msgType uint, data []byte) (protocol.Message, error)

NewMsgFromCborNtC parses a NtC ChainSync message from CBOR

func NewMsgFromCborNtN

func NewMsgFromCborNtN(msgType uint, data []byte) (protocol.Message, error)

NewMsgFromCborNtN parses a NtC ChainSync message from CBOR

Types

type ChainSync

type ChainSync struct {
	Client *Client
	Server *Server
}

ChainSync is a wrapper object that holds the client and server instances

func New

func New(protoOptions protocol.ProtocolOptions, cfg *Config) *ChainSync

New returns a new ChainSync object

type ChainSyncOptionFunc

type ChainSyncOptionFunc func(*Config)

ChainSyncOptionFunc represents a function used to modify the ChainSync protocol config

func WithBlockTimeout

func WithBlockTimeout(timeout time.Duration) ChainSyncOptionFunc

WithBlockTimeout specifies the timeout for block fetch operations

func WithIntersectTimeout

func WithIntersectTimeout(timeout time.Duration) ChainSyncOptionFunc

WithIntersectTimeout specifies the timeout for intersect operations

func WithPipelineLimit added in v0.36.0

func WithPipelineLimit(limit int) ChainSyncOptionFunc

WithPipelineLimit specifies the maximum number of block requests to pipeline

func WithRollBackwardFunc

func WithRollBackwardFunc(rollBackwardFunc RollBackwardFunc) ChainSyncOptionFunc

WithRollBackwardFunc specifies the RollBackward callback function

func WithRollForwardFunc

func WithRollForwardFunc(rollForwardFunc RollForwardFunc) ChainSyncOptionFunc

WithRollForwardFunc specifies the RollForward callback function

type Client

type Client struct {
	*protocol.Protocol
	// contains filtered or unexported fields
}

Client implements the ChainSync client

func NewClient

func NewClient(protoOptions protocol.ProtocolOptions, cfg *Config) *Client

NewClient returns a new ChainSync client object

func (*Client) GetAvailableBlockRange added in v0.38.0

func (c *Client) GetAvailableBlockRange(intersectPoints []common.Point) (common.Point, common.Point, error)

GetAvailableBlockRange returns the start and end of the range of available blocks given the provided intersect point(s).

func (*Client) GetCurrentTip

func (c *Client) GetCurrentTip() (*Tip, error)

GetCurrentTip returns the current chain tip

func (*Client) Stop

func (c *Client) Stop() error

Stop transitions the protocol to the Done state. No more protocol operations will be possible afterward

func (*Client) Sync

func (c *Client) Sync(intersectPoints []common.Point) error

Sync begins a chain-sync operation using the provided intersect point(s). Incoming blocks will be delivered via the RollForward callback function specified in the protocol config

type Config

type Config struct {
	RollBackwardFunc RollBackwardFunc
	RollForwardFunc  RollForwardFunc
	IntersectTimeout time.Duration
	BlockTimeout     time.Duration
	PipelineLimit    int
}

Config is used to configure the ChainSync protocol instance

func NewConfig

func NewConfig(options ...ChainSyncOptionFunc) Config

NewConfig returns a new ChainSync config object with the provided options

type IntersectNotFoundError

type IntersectNotFoundError struct {
}

IntersectNotFoundError represents a failure to find a chain intersection

func (IntersectNotFoundError) Error

func (e IntersectNotFoundError) Error() string

type MsgAwaitReply

type MsgAwaitReply struct {
	protocol.MessageBase
}

func NewMsgAwaitReply

func NewMsgAwaitReply() *MsgAwaitReply

type MsgDone

type MsgDone struct {
	protocol.MessageBase
}

func NewMsgDone

func NewMsgDone() *MsgDone

type MsgFindIntersect

type MsgFindIntersect struct {
	protocol.MessageBase
	Points []common.Point
}

func NewMsgFindIntersect

func NewMsgFindIntersect(points []common.Point) *MsgFindIntersect

type MsgIntersectFound

type MsgIntersectFound struct {
	protocol.MessageBase
	Point common.Point
	Tip   Tip
}

func NewMsgIntersectFound

func NewMsgIntersectFound(point common.Point, tip Tip) *MsgIntersectFound

type MsgIntersectNotFound

type MsgIntersectNotFound struct {
	protocol.MessageBase
	Tip Tip
}

func NewMsgIntersectNotFound

func NewMsgIntersectNotFound(tip Tip) *MsgIntersectNotFound

type MsgRequestNext

type MsgRequestNext struct {
	protocol.MessageBase
}

func NewMsgRequestNext

func NewMsgRequestNext() *MsgRequestNext

type MsgRollBackward

type MsgRollBackward struct {
	protocol.MessageBase
	Point common.Point
	Tip   Tip
}

func NewMsgRollBackward

func NewMsgRollBackward(point common.Point, tip Tip) *MsgRollBackward

type MsgRollForwardNtC

type MsgRollForwardNtC struct {
	protocol.MessageBase
	WrappedBlock cbor.Tag
	Tip          Tip
	// contains filtered or unexported fields
}

MsgRollForwardNtC is the NtC version of the RollForward message

func NewMsgRollForwardNtC

func NewMsgRollForwardNtC(blockType uint, blockCbor []byte, tip Tip) *MsgRollForwardNtC

NewMsgRollForwardNtC returns a MsgRollForwardNtC with the provided parameters

func (*MsgRollForwardNtC) BlockCbor

func (m *MsgRollForwardNtC) BlockCbor() []byte

BlockCbor returns the block CBOR

func (*MsgRollForwardNtC) BlockType

func (m *MsgRollForwardNtC) BlockType() uint

BlockType returns the block type

func (*MsgRollForwardNtC) UnmarshalCBOR

func (m *MsgRollForwardNtC) UnmarshalCBOR(data []byte) error

type MsgRollForwardNtN

type MsgRollForwardNtN struct {
	protocol.MessageBase
	WrappedHeader WrappedHeader
	Tip           Tip
}

MsgRollForwardNtN is the NtN version of the RollForward message

func NewMsgRollForwardNtN

func NewMsgRollForwardNtN(era uint, byronType uint, blockCbor []byte, tip Tip) *MsgRollForwardNtN

NewMsgRollForwardNtN returns a MsgRollForwardNtN with the provided parameters

type RollBackwardFunc

type RollBackwardFunc func(common.Point, Tip) error

Callback function types

type RollForwardFunc

type RollForwardFunc func(uint, interface{}, Tip) error

type Server

type Server struct {
	*protocol.Protocol
	// contains filtered or unexported fields
}

Server implements the ChainSync server

func NewServer

func NewServer(protoOptions protocol.ProtocolOptions, cfg *Config) *Server

NewServer returns a new ChainSync server object

type Tip

type Tip struct {
	Point       common.Point
	BlockNumber uint64
	// contains filtered or unexported fields
}

type WrappedBlock

type WrappedBlock struct {
	BlockType uint
	BlockCbor cbor.RawMessage
	// contains filtered or unexported fields
}

WrappedBlock represents a block returned via a NtC RollForward message

func NewWrappedBlock

func NewWrappedBlock(blockType uint, blockCbor []byte) *WrappedBlock

NewWrappedBlock returns a new WrappedBlock

type WrappedHeader

type WrappedHeader struct {
	Era        uint
	RawMessage cbor.RawMessage
	// contains filtered or unexported fields
}

WrappedHeader represents a block header returned via NtN RollForward message

func NewWrappedHeader

func NewWrappedHeader(era uint, byronType uint, blockCbor []byte) *WrappedHeader

NewWrappedHeader returns a new WrappedHeader

func (*WrappedHeader) ByronType

func (w *WrappedHeader) ByronType() uint

ByronType returns the block type for Byron blocks

func (*WrappedHeader) HeaderCbor

func (w *WrappedHeader) HeaderCbor() []byte

HeaderCbor returns the header CBOR

func (*WrappedHeader) MarshalCBOR

func (w *WrappedHeader) MarshalCBOR() ([]byte, error)

func (*WrappedHeader) UnmarshalCBOR

func (w *WrappedHeader) UnmarshalCBOR(data []byte) error

Jump to

Keyboard shortcuts

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