Documentation ¶
Index ¶
- Constants
- Variables
- func BytesToData(input []byte) [DataLen]byte
- type Block
- func (b *Block) Accept(ctx context.Context) error
- func (b *Block) Bytes() []byte
- func (b *Block) Data() [DataLen]byte
- func (b *Block) Height() uint64
- func (b *Block) ID() ids.ID
- func (b *Block) Initialize(bytes []byte, status choices.Status, vm *VM)
- func (b *Block) Parent() ids.ID
- func (b *Block) Reject(ctx context.Context) error
- func (b *Block) SetStatus(status choices.Status)
- func (b *Block) Status() choices.Status
- func (b *Block) Timestamp() time.Time
- func (b *Block) Verify(ctx context.Context) error
- type BlockState
- type DecodeArgs
- type DecodeReply
- type EncodeArgs
- type EncodeReply
- type Factory
- type GetBlockArgs
- type GetBlockReply
- type ProposeBlockArgs
- type ProposeBlockReply
- type Service
- type State
- type StaticService
- type VM
- func (vm *VM) AppGossip(_ context.Context, nodeID ids.NodeID, msg []byte) error
- func (vm *VM) AppRequest(_ context.Context, nodeID ids.NodeID, requestID uint32, time time.Time, ...) error
- func (vm *VM) AppRequestFailed(_ context.Context, nodeID ids.NodeID, requestID uint32) error
- func (vm *VM) AppResponse(_ context.Context, nodeID ids.NodeID, requestID uint32, response []byte) error
- func (vm *VM) BuildBlock(ctx context.Context) (snowman.Block, error)
- func (vm *VM) Connected(_ context.Context, id ids.NodeID, nodeVersion *version.Application) error
- func (vm *VM) CreateHandlers(ctx context.Context) (map[string]*common.HTTPHandler, error)
- func (vm *VM) CreateStaticHandlers(ctx context.Context) (map[string]*common.HTTPHandler, error)
- func (vm *VM) CrossChainAppRequest(_ context.Context, _ ids.ID, _ uint32, deadline time.Time, request []byte) error
- func (vm *VM) CrossChainAppRequestFailed(_ context.Context, _ ids.ID, _ uint32) error
- func (vm *VM) CrossChainAppResponse(_ context.Context, _ ids.ID, _ uint32, response []byte) error
- func (vm *VM) Disconnected(_ context.Context, id ids.NodeID) error
- func (vm *VM) GetBlock(ctx context.Context, blkID ids.ID) (snowman.Block, error)
- func (vm *VM) HealthCheck(ctx context.Context) (interface{}, error)
- func (vm *VM) Initialize(ctx context.Context, snowCtx *snow.Context, dbManager manager.Manager, ...) error
- func (vm *VM) LastAccepted(ctx context.Context) (ids.ID, error)
- func (vm *VM) NewBlock(parentID ids.ID, height uint64, data [DataLen]byte, timestamp time.Time) (*Block, error)
- func (vm *VM) NotifyBlockReady()
- func (vm *VM) ParseBlock(ctx context.Context, bytes []byte) (snowman.Block, error)
- func (vm *VM) SetPreference(ctx context.Context, id ids.ID) error
- func (vm *VM) SetState(ctx context.Context, state snow.State) error
- func (vm *VM) Shutdown(ctx context.Context) error
- func (vm *VM) Version(ctx context.Context) (string, error)
Constants ¶
const ( DataLen = 32 Name = "timestampvm" MaxMempoolSize = 4096 )
const (
// CodecVersion is the current default codec version
CodecVersion = 0
)
Variables ¶
var (
Codec codec.Manager
)
Codecs do serialization and deserialization
var (
Version = &version.Semantic{
Major: 1,
Minor: 3,
Patch: 1,
}
)
Functions ¶
Types ¶
type Block ¶
type Block struct { PrntID ids.ID `serialize:"true" json:"parentID"` // parent's ID Hght uint64 `serialize:"true" json:"height"` // This block's height. The genesis block is at height 0. Tmstmp int64 `serialize:"true" json:"timestamp"` // Time this block was proposed at Dt [DataLen]byte `serialize:"true" json:"data"` // Arbitrary data // contains filtered or unexported fields }
Block is a block on the chain. Each block contains: 1) ParentID 2) Height 3) Timestamp 4) A piece of data (a string)
func (*Block) Accept ¶ added in v1.2.0
Accept sets this block's status to Accepted and sets lastAccepted to this block's ID and saves this info to b.vm.DB
func (*Block) Height ¶ added in v1.2.0
Height returns this block's height. The genesis block has height 0.
func (*Block) Initialize ¶ added in v1.2.0
Initialize sets [b.bytes] to bytes, [b.id] to hash([b.bytes]), [b.status] to [status] and [b.vm] to [vm]
func (*Block) Reject ¶ added in v1.2.0
Reject sets this block's status to Rejected and saves the status in state Recall that b.vm.DB.Commit() must be called to persist to the DB
type BlockState ¶ added in v1.2.0
type BlockState interface { GetBlock(blkID ids.ID) (*Block, error) PutBlock(blk *Block) error GetLastAccepted() (ids.ID, error) SetLastAccepted(ids.ID) error }
BlockState defines methods to manage state with Blocks and LastAcceptedIDs.
func NewBlockState ¶ added in v1.2.0
func NewBlockState(db database.Database, vm *VM) BlockState
NewBlockState returns BlockState with a new cache and given db
type DecodeArgs ¶
type DecodeArgs struct { Bytes string `json:"bytes"` Encoding formatting.Encoding `json:"encoding"` }
DecodeArgs are arguments for Decode
type DecodeReply ¶
type DecodeReply struct { Data string `json:"data"` Encoding formatting.Encoding `json:"encoding"` }
DecodeReply is the reply from Decode
type EncodeArgs ¶
type EncodeArgs struct { Data string `json:"data"` Encoding formatting.Encoding `json:"encoding"` Length int32 `json:"length"` }
EncodeArgs are arguments for Encode
type EncodeReply ¶
type EncodeReply struct { Bytes string `json:"bytes"` Encoding formatting.Encoding `json:"encoding"` }
EncodeReply is the reply from Encode
type GetBlockArgs ¶
type GetBlockArgs struct { // ID of the block we're getting. // If left blank, gets the latest block ID *ids.ID `json:"id"` }
GetBlockArgs are the arguments to GetBlock
type GetBlockReply ¶
type GetBlockReply struct { Timestamp json.Uint64 `json:"timestamp"` // Timestamp of block Data string `json:"data"` // Data (hex-encoded) in block Height json.Uint64 `json:"height"` // Height of block ID ids.ID `json:"id"` // String repr. of ID of block ParentID ids.ID `json:"parentID"` // String repr. of ID of block's parent }
GetBlockReply is the reply from GetBlock
type ProposeBlockArgs ¶
type ProposeBlockArgs struct { // Data in the block. Must be hex encoding of 32 bytes. Data string `json:"data"` }
ProposeBlockArgs are the arguments to function ProposeValue
type ProposeBlockReply ¶
type ProposeBlockReply struct{ Success bool }
ProposeBlockReply is the reply from function ProposeBlock
type Service ¶
type Service struct {
// contains filtered or unexported fields
}
Service is the API service for this VM
func (*Service) GetBlock ¶
func (s *Service) GetBlock(_ *http.Request, args *GetBlockArgs, reply *GetBlockReply) error
GetBlock gets the block whose ID is [args.ID] If [args.ID] is empty, get the latest block
func (*Service) ProposeBlock ¶
func (s *Service) ProposeBlock(_ *http.Request, args *ProposeBlockArgs, reply *ProposeBlockReply) error
ProposeBlock is an API method to propose a new block whose data is [args].Data. [args].Data must be a string repr. of a 32 byte array
type State ¶ added in v1.2.0
type State interface { // SingletonState is defined in avalanchego, // it is used to understand if db is initialized already. avax.SingletonState BlockState Commit() error Close() error }
State is a wrapper around avax.SingleTonState and BlockState State also exposes a few methods needed for managing database commits and close.
type StaticService ¶
type StaticService struct{}
StaticService defines the base service for the timestamp vm
func (*StaticService) Decode ¶
func (ss *StaticService) Decode(_ *http.Request, args *DecodeArgs, reply *DecodeReply) error
Decode returns the Decoded data
func (*StaticService) Encode ¶
func (ss *StaticService) Encode(_ *http.Request, args *EncodeArgs, reply *EncodeReply) error
Encode returns the encoded data
type VM ¶
type VM struct {
// contains filtered or unexported fields
}
VM implements the snowman.VM interface Each block in this chain contains a Unix timestamp and a piece of data (a string)
func (*VM) AppRequest ¶ added in v1.1.0
func (vm *VM) AppRequest(_ context.Context, nodeID ids.NodeID, requestID uint32, time time.Time, request []byte) error
This VM doesn't (currently) have any app-specific messages
func (*VM) AppRequestFailed ¶ added in v1.1.0
This VM doesn't (currently) have any app-specific messages
func (*VM) AppResponse ¶ added in v1.1.0
func (vm *VM) AppResponse(_ context.Context, nodeID ids.NodeID, requestID uint32, response []byte) error
This VM doesn't (currently) have any app-specific messages
func (*VM) BuildBlock ¶
BuildBlock returns a block that this vm wants to add to consensus
func (*VM) CreateHandlers ¶
CreateHandlers returns a map where: Keys: The path extension for this VM's API (empty in this case) Values: The handler for the API
func (*VM) CreateStaticHandlers ¶
CreateStaticHandlers returns a map where: Keys: The path extension for this VM's static API Values: The handler for that static API
func (*VM) CrossChainAppRequest ¶ added in v1.2.8
func (*VM) CrossChainAppRequestFailed ¶ added in v1.2.8
func (*VM) CrossChainAppResponse ¶ added in v1.2.8
func (*VM) HealthCheck ¶
Health implements the common.VM interface
func (*VM) Initialize ¶
func (vm *VM) Initialize( ctx context.Context, snowCtx *snow.Context, dbManager manager.Manager, genesisData []byte, upgradeData []byte, configData []byte, toEngine chan<- common.Message, _ []*common.Fx, _ common.AppSender, ) error
Initialize this vm [ctx] is this vm's context [dbManager] is the manager of this vm's database [toEngine] is used to notify the consensus engine that new blocks are
ready to be added to consensus
The data in the genesis block is [genesisData]
func (*VM) LastAccepted ¶ added in v1.2.0
LastAccepted returns the block most recently accepted
func (*VM) NewBlock ¶
func (vm *VM) NewBlock(parentID ids.ID, height uint64, data [DataLen]byte, timestamp time.Time) (*Block, error)
NewBlock returns a new Block where: - the block's parent is [parentID] - the block's data is [data] - the block's timestamp is [timestamp]
func (*VM) NotifyBlockReady ¶ added in v1.2.0
func (vm *VM) NotifyBlockReady()
NotifyBlockReady tells the consensus engine that a new block is ready to be created
func (*VM) ParseBlock ¶
ParseBlock parses bytes to a snowman.Block This function is used by the vm's state to unmarshal blocks saved in state and by the consensus layer when it receives the byte representation of a block from another node
func (*VM) SetPreference ¶ added in v1.2.0
SetPreference sets the block with ID [ID] as the preferred block