platformvm

package
v0.1.2 Latest Latest
Warning

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

Go to latest
Published: Jun 22, 2022 License: BSD-3-Clause Imports: 65 Imported by: 0

README

PlatformVM

Mempool Gossiping

The PlatformVM has a mempool which tracks unconfirmed transactions that are waiting to be issued into blocks. The mempool is volatile, i.e. it does not persist unconfirmed transactions.

In conjunction with the introduction of Snowman++, the mempool was opened to the network, allowing the gossiping of local transactions as well as the hosting of remote ones.

Mempool Gossiping Workflow

The PlatformVM's mempool performs the following workflow:

  • An unconfirmed transaction is provided to node A, either through mempool gossiping or direct issuance over a RPC. If this transaction isn't already in the local mempool, the transaction is issued into the mempool.
  • When node A issues a new transaction into its mempool, it will gossip the transaction ID by sending an AppGossip message. The node's engine will randomly select peers (currently defaulting to 6 nodes) to send the AppGossip message to.
  • When node B learns about the existence of a remote transaction ID, it will check if its mempool contains the transaction or if it has been recently dropped. If the transaction ID is not known, node B will generate a new requestID and respond with an AppRequest message with the unknown transaction's ID. node B will track the content of the request issued with requestID for response verification.
  • Upon reception of an AppRequest message, node A will attempt to fetch the transaction requested in the AppRequest message from its mempool. Note that a transaction advertised in an AppGossip message may no longer be in the mempool, because they may have been included into a block, rejected, or dropped. If the transaction is retrieved, it is encoded into an AppResponse message. The AppResponse message will carry the same requestID of the originating AppRequest message and it will be sent back to node B.
  • If node B receives an AppResponse message, it will decode the transaction and verifies that the ID matches the expected content from the original AppRequest message. If the content matches, the transaction is validated and issued into the mempool.
  • If nodeB's engine decides it isn't likely to receive an AppResponse message, the engine will issue an AppRequestFailure message. In such a case node B will mark the requestID as failed and the request for the unknown transaction is aborted.

Documentation

Overview

Package platformvm is a generated GoMock package.

Index

Constants

View Source
const (

	// TargetTxSize is the maximum number of bytes a transaction can use to be
	// allowed into the mempool.
	TargetTxSize = 64 * units.KiB

	// TargetBlockSize is maximum number of transaction bytes to place into a
	// StandardBlock
	TargetBlockSize = 128 * units.KiB
)
View Source
const (
	// CodecVersion is the current default codec version
	CodecVersion = 0
)
View Source
const (
	// MaxValidatorWeightFactor is the maximum factor of the validator stake
	// that is allowed to be placed on a validator.
	MaxValidatorWeightFactor uint64 = 5
)
View Source
const MinConnectedStake = .80

MinConnectedStake is the minimum percentage of the Primary Network's that this node must be connected to to be considered healthy

Variables

View Source
var (
	Codec        codec.Manager
	GenesisCodec codec.Manager
)

Codecs do serialization and deserialization

Functions

func CanDelegate

func CanDelegate(
	current,
	pending []*UnsignedAddNominatorTx,
	new *UnsignedAddNominatorTx,
	currentStake,
	maximumStake uint64,
) (bool, error)

CanDelegate returns if the [new] nominator can be added to a validator who has [current] and [pending] nominators. [currentStake] is the current amount of stake on the validator, include the [current] nominators. [maximumStake] is the maximum amount of stake that can be on the validator at any given time. It is assumed that the validator without adding [new] does not violate [maximumStake].

Types

type APIAllychain

type APIAllychain struct {
	// ID of the allychain
	ID ids.ID `json:"id"`

	// Each element of [ControlKeys] the address of a public key.
	// A transaction to add a validator to this allychain requires
	// signatures from [Threshold] of these keys to be valid.
	ControlKeys []string    `json:"controlKeys"`
	Threshold   json.Uint32 `json:"threshold"`
}

APIAllychain is a representation of a allychain used in API calls

type APIAllychainValidator

type APIAllychainValidator struct {
	APIStaker
	// The owner the staking reward, if applicable, will go to
	Connected bool `json:"connected"`
}

APIAllychainValidator is the repr. of a allychain validator sent over APIs.

type APIBlockchain

type APIBlockchain struct {
	// Blockchain's ID
	ID ids.ID `json:"id"`

	// Blockchain's (non-unique) human-readable name
	Name string `json:"name"`

	// Allychain that validates the blockchain
	AllychainID ids.ID `json:"allychainID"`

	// Virtual Machine the blockchain runs
	VMID ids.ID `json:"vmID"`
}

APIBlockchain is the representation of a blockchain used in API calls

type APIChain

type APIChain struct {
	GenesisData string   `json:"genesisData"`
	VMID        ids.ID   `json:"vmID"`
	FxIDs       []ids.ID `json:"fxIDs"`
	Name        string   `json:"name"`
	AllychainID ids.ID   `json:"allychainID"`
}

APIChain defines a chain that exists at the network's genesis. [GenesisData] is the initial state of the chain. [VMID] is the ID of the VM this chain runs. [FxIDs] are the IDs of the Fxs the chain supports. [Name] is a human-readable, non-unique name for the chain. [AllychainID] is the ID of the allychain that validates the chain

type APIOwner

type APIOwner struct {
	Locktime  json.Uint64 `json:"locktime"`
	Threshold json.Uint32 `json:"threshold"`
	Addresses []string    `json:"addresses"`
}

APIOwner is the repr. of a reward owner sent over APIs.

type APIPrimaryNominator

type APIPrimaryNominator struct {
	APIStaker
	RewardOwner     *APIOwner    `json:"rewardOwner,omitempty"`
	PotentialReward *json.Uint64 `json:"potentialReward,omitempty"`
}

APIPrimaryNominator is the repr. of a primary network nominator sent over APIs.

type APIPrimaryValidator

type APIPrimaryValidator struct {
	APIStaker
	// The owner the staking reward, if applicable, will go to
	RewardOwner        *APIOwner     `json:"rewardOwner,omitempty"`
	PotentialReward    *json.Uint64  `json:"potentialReward,omitempty"`
	DelegationFee      json.Float32  `json:"delegationFee"`
	ExactDelegationFee *json.Uint32  `json:"exactDelegationFee,omitempty"`
	Uptime             *json.Float32 `json:"uptime"`
	Connected          bool          `json:"connected"`
	Staked             []APIUTXO     `json:"staked,omitempty"`
	// The nominators delegating to this validator
	Nominators []APIPrimaryNominator `json:"nominators"`
}

APIPrimaryValidator is the repr. of a primary network validator sent over APIs.

type APIStaker

type APIStaker struct {
	TxID        ids.ID       `json:"txID"`
	StartTime   json.Uint64  `json:"startTime"`
	EndTime     json.Uint64  `json:"endTime"`
	Weight      *json.Uint64 `json:"weight,omitempty"`
	StakeAmount *json.Uint64 `json:"stakeAmount,omitempty"`
	NodeID      ids.NodeID   `json:"nodeID"`
}

APIStaker is the representation of a staker sent via APIs. [TxID] is the txID of the transaction that added this staker. [Amount] is the amount of tokens being staked. [StartTime] is the Unix time when they start staking [Endtime] is the Unix time repr. of when they are done staking [NodeID] is the node ID of the staker

type APIUTXO

type APIUTXO struct {
	Locktime json.Uint64 `json:"locktime"`
	Amount   json.Uint64 `json:"amount"`
	Address  string      `json:"address"`
	Message  string      `json:"message"`
}

APIUTXO is a UTXO on the Core Chain that exists at the chain's genesis.

type AbortBlock

type AbortBlock struct {
	DoubleDecisionBlock `serialize:"true"`
	// contains filtered or unexported fields
}

AbortBlock being accepted results in the proposal of its parent (which must be a proposal block) being rejected.

func (*AbortBlock) Accept

func (a *AbortBlock) Accept() error

func (*AbortBlock) Verify

func (a *AbortBlock) Verify() error

Verify this block performs a valid state transition.

The parent block must be a proposal

This function also sets onAcceptState if the verification passes.

type AddAllychainValidatorArgs

type AddAllychainValidatorArgs struct {
	// User, password, from addrs, change addr
	api.JSONSpendHeader
	APIStaker
	// ID of allychain to validate
	AllychainID string `json:"allychainID"`
}

AddAllychainValidatorArgs are the arguments to AddAllychainValidator

type AddNominatorArgs

type AddNominatorArgs struct {
	// User, password, from addrs, change addr
	api.JSONSpendHeader
	APIStaker
	RewardAddress string `json:"rewardAddress"`
}

AddNominatorArgs are the arguments to AddNominator

type AddValidatorArgs

type AddValidatorArgs struct {
	// User, password, from addrs, change addr
	api.JSONSpendHeader
	APIStaker
	// The address the staking reward, if applicable, will go to
	RewardAddress     string       `json:"rewardAddress"`
	DelegationFeeRate json.Float32 `json:"delegationFeeRate"`
}

AddValidatorArgs are the arguments to AddValidator

type Allychain

type Allychain interface {
	// ID returns this allychain's ID
	ID() ids.ID

	// Validators returns the validators that compose this allychain
	Validators() []validators.Validator
}

A Allychain is a set of validators that are validating a set of blockchains Each blockchain is validated by one allychain; one allychain may validate many blockchains

type AtomicBlock

type AtomicBlock struct {
	CommonDecisionBlock `serialize:"true"`

	Tx Tx `serialize:"true" json:"tx"`
	// contains filtered or unexported fields
}

AtomicBlock being accepted results in the atomic transaction contained in the block to be accepted and committed to the chain.

func (*AtomicBlock) Accept

func (ab *AtomicBlock) Accept() error

func (*AtomicBlock) Reject

func (ab *AtomicBlock) Reject() error

func (*AtomicBlock) Verify

func (ab *AtomicBlock) Verify() error

Verify this block performs a valid state transition.

The parent block must be a decision block

This function also sets onAcceptDB database if the verification passes.

type BaseTx

type BaseTx struct {
	axc.BaseTx `serialize:"true"`
	// contains filtered or unexported fields
}

BaseTx contains fields common to many transaction types. It should be embedded in transaction implementations.

func (*BaseTx) InitCtx

func (tx *BaseTx) InitCtx(ctx *snow.Context)

InitCtx sets the FxID fields in the inputs and outputs of this BaseTx. Also sets the [ctx] to the given [vm.ctx] so that the addresses can be json marshalled into human readable format

func (*BaseTx) InputIDs

func (tx *BaseTx) InputIDs() ids.Set

func (*BaseTx) SyntacticVerify

func (tx *BaseTx) SyntacticVerify(ctx *snow.Context) error

SyntacticVerify returns nil iff this tx is well formed

type Block

type Block interface {
	snowman.Block
	// contains filtered or unexported methods
}

Block is the common interface that all staking blocks must have

type BuildGenesisArgs

type BuildGenesisArgs struct {
	AxcAssetID    ids.ID                `json:"axcAssetID"`
	NetworkID     json.Uint32           `json:"networkID"`
	UTXOs         []APIUTXO             `json:"utxos"`
	Validators    []APIPrimaryValidator `json:"validators"`
	Chains        []APIChain            `json:"chains"`
	Time          json.Uint64           `json:"time"`
	InitialSupply json.Uint64           `json:"initialSupply"`
	Message       string                `json:"message"`
	Encoding      formatting.Encoding   `json:"encoding"`
}

BuildGenesisArgs are the arguments used to create the genesis data of the Core Chain. [NetworkID] is the ID of the network [UTXOs] are the UTXOs on the Core Chain that exist at genesis. [Validators] are the validators of the primary network at genesis. [Chains] are the chains that exist at genesis. [Time] is the Core Chain's time at network genesis.

type BuildGenesisReply

type BuildGenesisReply struct {
	Bytes    string              `json:"bytes"`
	Encoding formatting.Encoding `json:"encoding"`
}

BuildGenesisReply is the reply from BuildGenesis

type Client

type Client interface {
	// GetHeight returns the current block height of the P Chain
	GetHeight(ctx context.Context, options ...rpc.Option) (uint64, error)
	// ExportKey returns the private key corresponding to [address] from [user]'s account
	ExportKey(ctx context.Context, user api.UserPass, address ids.ShortID, options ...rpc.Option) (*crypto.PrivateKeySECP256K1R, error)
	// ImportKey imports the specified [privateKey] to [user]'s keystore
	ImportKey(ctx context.Context, user api.UserPass, privateKey *crypto.PrivateKeySECP256K1R, options ...rpc.Option) (ids.ShortID, error)
	// GetBalance returns the balance of [addrs] on the P Chain
	GetBalance(ctx context.Context, addrs []ids.ShortID, options ...rpc.Option) (*GetBalanceResponse, error)
	// CreateAddress creates a new address for [user]
	CreateAddress(ctx context.Context, user api.UserPass, options ...rpc.Option) (ids.ShortID, error)
	// ListAddresses returns an array of platform addresses controlled by [user]
	ListAddresses(ctx context.Context, user api.UserPass, options ...rpc.Option) ([]ids.ShortID, error)
	// GetUTXOs returns the byte representation of the UTXOs controlled by [addrs]
	GetUTXOs(
		ctx context.Context,
		addrs []ids.ShortID,
		limit uint32,
		startAddress ids.ShortID,
		startUTXOID ids.ID,
		options ...rpc.Option,
	) ([][]byte, ids.ShortID, ids.ID, error)
	// GetAtomicUTXOs returns the byte representation of the atomic UTXOs controlled by [addrs]
	// from [sourceChain]
	GetAtomicUTXOs(
		ctx context.Context,
		addrs []ids.ShortID,
		sourceChain string,
		limit uint32,
		startAddress ids.ShortID,
		startUTXOID ids.ID,
		options ...rpc.Option,
	) ([][]byte, ids.ShortID, ids.ID, error)
	// GetAllychains returns information about the specified allychains
	GetAllychains(context.Context, []ids.ID, ...rpc.Option) ([]ClientAllychain, error)
	// GetStakingAssetID returns the assetID of the asset used for staking on
	// allychain corresponding to [allychainID]
	GetStakingAssetID(context.Context, ids.ID, ...rpc.Option) (ids.ID, error)
	// GetCurrentValidators returns the list of current validators for allychain with ID [allychainID]
	GetCurrentValidators(ctx context.Context, allychainID ids.ID, nodeIDs []ids.NodeID, options ...rpc.Option) ([]ClientPrimaryValidator, error)
	// GetPendingValidators returns the list of pending validators for allychain with ID [allychainID]
	GetPendingValidators(ctx context.Context, allychainID ids.ID, nodeIDs []ids.NodeID, options ...rpc.Option) ([]interface{}, []interface{}, error)
	// GetCurrentSupply returns an upper bound on the supply of AXC in the system
	GetCurrentSupply(ctx context.Context, options ...rpc.Option) (uint64, error)
	// SampleValidators returns the nodeIDs of a sample of [sampleSize] validators from the current validator set for allychain with ID [allychainID]
	SampleValidators(ctx context.Context, allychainID ids.ID, sampleSize uint16, options ...rpc.Option) ([]ids.NodeID, error)
	// AddValidator issues a transaction to add a validator to the primary network
	// and returns the txID
	AddValidator(
		ctx context.Context,
		user api.UserPass,
		from []ids.ShortID,
		changeAddr ids.ShortID,
		rewardAddress ids.ShortID,
		nodeID ids.NodeID,
		stakeAmount,
		startTime,
		endTime uint64,
		delegationFeeRate float32,
		options ...rpc.Option,
	) (ids.ID, error)
	// AddNominator issues a transaction to add a nominator to the primary network
	// and returns the txID
	AddNominator(
		ctx context.Context,
		user api.UserPass,
		from []ids.ShortID,
		changeAddr ids.ShortID,
		rewardAddress ids.ShortID,
		nodeID ids.NodeID,
		stakeAmount,
		startTime,
		endTime uint64,
		options ...rpc.Option,
	) (ids.ID, error)
	// AddAllychainValidator issues a transaction to add validator [nodeID] to allychain
	// with ID [allychainID] and returns the txID
	AddAllychainValidator(
		ctx context.Context,
		user api.UserPass,
		from []ids.ShortID,
		changeAddr ids.ShortID,
		allychainID ids.ID,
		nodeID ids.NodeID,
		stakeAmount,
		startTime,
		endTime uint64,
		options ...rpc.Option,
	) (ids.ID, error)
	// CreateAllychain issues a transaction to create [allychain] and returns the txID
	CreateAllychain(
		ctx context.Context,
		user api.UserPass,
		from []ids.ShortID,
		changeAddr ids.ShortID,
		controlKeys []ids.ShortID,
		threshold uint32,
		options ...rpc.Option,
	) (ids.ID, error)
	// ExportAXC issues an ExportTx transaction and returns the txID
	ExportAXC(
		ctx context.Context,
		user api.UserPass,
		from []ids.ShortID,
		changeAddr ids.ShortID,
		to ids.ShortID,
		toChainIDAlias string,
		amount uint64,
		options ...rpc.Option,
	) (ids.ID, error)
	// ImportAXC issues an ImportTx transaction and returns the txID
	ImportAXC(
		ctx context.Context,
		user api.UserPass,
		from []ids.ShortID,
		changeAddr ids.ShortID,
		to ids.ShortID,
		sourceChain string,
		options ...rpc.Option,
	) (ids.ID, error)
	// CreateBlockchain issues a CreateBlockchain transaction and returns the txID
	CreateBlockchain(
		ctx context.Context,
		user api.UserPass,
		from []ids.ShortID,
		changeAddr ids.ShortID,
		allychainID ids.ID,
		vmID string,
		fxIDs []string,
		name string,
		genesisData []byte,
		options ...rpc.Option,
	) (ids.ID, error)
	// GetBlockchainStatus returns the current status of blockchain with ID: [blockchainID]
	GetBlockchainStatus(ctx context.Context, blockchainID string, options ...rpc.Option) (status.BlockchainStatus, error)
	// ValidatedBy returns the ID of the Allychain that validates [blockchainID]
	ValidatedBy(ctx context.Context, blockchainID ids.ID, options ...rpc.Option) (ids.ID, error)
	// Validates returns the list of blockchains that are validated by the allychain with ID [allychainID]
	Validates(ctx context.Context, allychainID ids.ID, options ...rpc.Option) ([]ids.ID, error)
	// GetBlockchains returns the list of blockchains on the platform
	GetBlockchains(ctx context.Context, options ...rpc.Option) ([]APIBlockchain, error)
	// IssueTx issues the transaction and returns its txID
	IssueTx(ctx context.Context, tx []byte, options ...rpc.Option) (ids.ID, error)
	// GetTx returns the byte representation of the transaction corresponding to [txID]
	GetTx(ctx context.Context, txID ids.ID, options ...rpc.Option) ([]byte, error)
	// GetTxStatus returns the status of the transaction corresponding to [txID]
	GetTxStatus(ctx context.Context, txID ids.ID, options ...rpc.Option) (*GetTxStatusResponse, error)
	// AwaitTxDecided polls [GetTxStatus] until a status is returned that
	// implies the tx may be decided.
	AwaitTxDecided(
		ctx context.Context,
		txID ids.ID,
		freq time.Duration,
		options ...rpc.Option,
	) (*GetTxStatusResponse, error)
	// GetStake returns the amount of nAXC that [addrs] have cumulatively
	// staked on the Primary Network.
	GetStake(ctx context.Context, addrs []ids.ShortID, options ...rpc.Option) (uint64, [][]byte, error)
	// GetMinStake returns the minimum staking amount in nAXC for validators
	// and nominators respectively
	GetMinStake(ctx context.Context, options ...rpc.Option) (uint64, uint64, error)
	// GetTotalStake returns the total amount (in nAXC) staked on the network
	GetTotalStake(ctx context.Context, allychainID ids.ID, options ...rpc.Option) (uint64, error)
	// GetMaxStakeAmount returns the maximum amount of nAXC staking to the named
	// node during the time period.
	GetMaxStakeAmount(
		ctx context.Context,
		allychainID ids.ID,
		nodeID ids.NodeID,
		startTime uint64,
		endTime uint64,
		options ...rpc.Option,
	) (uint64, error)
	// GetRewardUTXOs returns the reward UTXOs for a transaction
	GetRewardUTXOs(context.Context, *api.GetTxArgs, ...rpc.Option) ([][]byte, error)
	// GetTimestamp returns the current chain timestamp
	GetTimestamp(ctx context.Context, options ...rpc.Option) (time.Time, error)
	// GetValidatorsAt returns the weights of the validator set of a provided allychain
	// at the specified height.
	GetValidatorsAt(ctx context.Context, allychainID ids.ID, height uint64, options ...rpc.Option) (map[ids.NodeID]uint64, error)
	// GetBlock returns the block with the given id.
	GetBlock(ctx context.Context, blockID ids.ID, options ...rpc.Option) ([]byte, error)
}

Client interface for interacting with the P Chain endpoint

func NewClient

func NewClient(uri string) Client

NewClient returns a Client for interacting with the P Chain endpoint

type ClientAllychain

type ClientAllychain struct {
	// ID of the allychain
	ID ids.ID
	// Each element of [ControlKeys] the address of a public key.
	// A transaction to add a validator to this allychain requires
	// signatures from [Threshold] of these keys to be valid.
	ControlKeys []ids.ShortID
	Threshold   uint32
}

ClientAllychain is a representation of a allychain used in client methods

type ClientOwner

type ClientOwner struct {
	Locktime  uint64
	Threshold uint32
	Addresses []ids.ShortID
}

ClientOwner is the repr. of a reward owner sent over client

type ClientPrimaryNominator

type ClientPrimaryNominator struct {
	ClientStaker
	RewardOwner     *ClientOwner
	PotentialReward *uint64
}

ClientPrimaryNominator is the repr. of a primary network nominator sent over client

type ClientPrimaryValidator

type ClientPrimaryValidator struct {
	ClientStaker
	// The owner the staking reward, if applicable, will go to
	RewardOwner     *ClientOwner
	PotentialReward *uint64
	DelegationFee   float32
	Uptime          *float32
	Connected       *bool
	// The nominators delegating to this validator
	Nominators []ClientPrimaryNominator
}

ClientPrimaryValidator is the repr. of a primary network validator sent over client

type ClientStaker

type ClientStaker struct {
	// the txID of the transaction that added this staker.
	TxID ids.ID
	// the Unix time when they start staking
	StartTime uint64
	// the Unix time when they are done staking
	EndTime uint64
	// the validator weight when sampling validators
	Weight *uint64
	// the amount of tokens being staked.
	StakeAmount *uint64
	// the node ID of the staker
	NodeID ids.NodeID
}

ClientStaker is the representation of a staker sent via client.

type CommitBlock

type CommitBlock struct {
	DoubleDecisionBlock `serialize:"true"`
	// contains filtered or unexported fields
}

CommitBlock being accepted results in the proposal of its parent (which must be a proposal block) being enacted.

func (*CommitBlock) Accept

func (c *CommitBlock) Accept() error

func (*CommitBlock) Verify

func (c *CommitBlock) Verify() error

Verify this block performs a valid state transition.

The parent block must be a proposal

This function also sets onAcceptState if the verification passes.

type CommonBlock

type CommonBlock 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.
	// contains filtered or unexported fields
}

CommonBlock contains fields and methods common to all blocks in this VM.

func (*CommonBlock) Accept

func (b *CommonBlock) Accept() error

func (*CommonBlock) Bytes

func (b *CommonBlock) Bytes() []byte

Bytes returns the binary representation of this block

func (*CommonBlock) Height

func (b *CommonBlock) Height() uint64

Height returns this block's height. The genesis block has height 0.

func (*CommonBlock) ID

func (b *CommonBlock) ID() ids.ID

ID returns the ID of this block

func (*CommonBlock) Parent

func (b *CommonBlock) Parent() ids.ID

Parent returns this block's parent's ID

func (*CommonBlock) Reject

func (b *CommonBlock) Reject() error

func (*CommonBlock) Status

func (b *CommonBlock) Status() choices.Status

Status returns the status of this block

func (*CommonBlock) Timestamp

func (b *CommonBlock) Timestamp() time.Time

Timestamp returns this block's time.

func (*CommonBlock) Verify

func (b *CommonBlock) Verify() error

type CommonDecisionBlock

type CommonDecisionBlock struct {
	CommonBlock `serialize:"true"`
	// contains filtered or unexported fields
}

CommonDecisionBlock contains the fields and methods common to all decision blocks

func (*CommonDecisionBlock) Reject

func (cdb *CommonDecisionBlock) Reject() error

type CreateAllychainArgs

type CreateAllychainArgs struct {
	// User, password, from addrs, change addr
	api.JSONSpendHeader
	// The ID member of APIAllychain is ignored
	APIAllychain
}

CreateAllychainArgs are the arguments to CreateAllychain

type CreateBlockchainArgs

type CreateBlockchainArgs struct {
	// User, password, from addrs, change addr
	api.JSONSpendHeader
	// ID of Allychain that validates the new blockchain
	AllychainID ids.ID `json:"allychainID"`
	// ID of the VM the new blockchain is running
	VMID string `json:"vmID"`
	// IDs of the FXs the VM is running
	FxIDs []string `json:"fxIDs"`
	// Human-readable name for the new blockchain, not necessarily unique
	Name string `json:"name"`
	// Genesis state of the blockchain being created
	GenesisData string `json:"genesisData"`
	// Encoding format to use for genesis data
	Encoding formatting.Encoding `json:"encoding"`
}

CreateBlockchainArgs is the arguments for calling CreateBlockchain

type DoubleDecisionBlock

type DoubleDecisionBlock struct {
	CommonDecisionBlock `serialize:"true"`
}

DoubleDecisionBlock contains the accept for a pair of blocks

func (*DoubleDecisionBlock) Accept

func (ddb *DoubleDecisionBlock) Accept() error

type ExportAXCArgs

type ExportAXCArgs struct {
	// User, password, from addrs, change addr
	api.JSONSpendHeader

	// Amount of AXC to send
	Amount json.Uint64 `json:"amount"`

	// Chain the funds are going to. Optional. Used if To address does not include the chainID.
	TargetChain string `json:"targetChain"`

	// ID of the address that will receive the AXC. This address may include the
	// chainID, which is used to determine what the destination chain is.
	To string `json:"to"`
}

ExportAXCArgs are the arguments to ExportAXC

type ExportKeyArgs

type ExportKeyArgs struct {
	api.UserPass
	Address string `json:"address"`
}

ExportKeyArgs are arguments for ExportKey

type ExportKeyReply

type ExportKeyReply struct {
	// The decrypted PrivateKey for the Address provided in the arguments
	PrivateKey *crypto.PrivateKeySECP256K1R `json:"privateKey"`
}

ExportKeyReply is the response for ExportKey

type Factory

type Factory struct {
	config.Config
}

Factory can create new instances of the Core Chain

func (*Factory) New

func (f *Factory) New(*snow.Context) (interface{}, error)

New returns a new instance of the Core Chain

type Genesis

type Genesis struct {
	UTXOs         []*GenesisUTXO `serialize:"true"`
	Validators    []*Tx          `serialize:"true"`
	Chains        []*Tx          `serialize:"true"`
	Timestamp     uint64         `serialize:"true"`
	InitialSupply uint64         `serialize:"true"`
	Message       string         `serialize:"true"`
}

Genesis represents a genesis state of the core chain

func (*Genesis) Initialize

func (g *Genesis) Initialize() error

type GenesisUTXO

type GenesisUTXO struct {
	axc.UTXO `serialize:"true"`
	Message  []byte `serialize:"true" json:"message"`
}

GenesisUTXO adds messages to UTXOs

type GetAllychainsArgs

type GetAllychainsArgs struct {
	// IDs of the allychains to retrieve information about
	// If omitted, gets all allychains
	IDs []ids.ID `json:"ids"`
}

GetAllychainsArgs are the arguments to GetAllychain

type GetAllychainsResponse

type GetAllychainsResponse struct {
	// Each element is a allychain that exists
	// Null if there are no allychains other than the primary network
	Allychains []APIAllychain `json:"allychains"`
}

GetAllychainsResponse is the response from calling GetAllychains

type GetBalanceRequest

type GetBalanceRequest struct {
	// TODO: remove Address
	Address   *string  `json:"address,omitempty"`
	Addresses []string `json:"addresses"`
}

type GetBalanceResponse

type GetBalanceResponse struct {
	// Balance, in nAXC, of the address
	Balance            json.Uint64   `json:"balance"`
	Unlocked           json.Uint64   `json:"unlocked"`
	LockedStakeable    json.Uint64   `json:"lockedStakeable"`
	LockedNotStakeable json.Uint64   `json:"lockedNotStakeable"`
	UTXOIDs            []*axc.UTXOID `json:"utxoIDs"`
}

type GetBlockchainStatusArgs

type GetBlockchainStatusArgs struct {
	BlockchainID string `json:"blockchainID"`
}

GetBlockchainStatusArgs is the arguments for calling GetBlockchainStatus [BlockchainID] is the ID of or an alias of the blockchain to get the status of.

type GetBlockchainStatusReply

type GetBlockchainStatusReply struct {
	Status status.BlockchainStatus `json:"status"`
}

GetBlockchainStatusReply is the reply from calling GetBlockchainStatus [Status] is the blockchain's status.

type GetBlockchainsResponse

type GetBlockchainsResponse struct {
	// blockchains that exist
	Blockchains []APIBlockchain `json:"blockchains"`
}

GetBlockchainsResponse is the response from a call to GetBlockchains

type GetCurrentSupplyReply

type GetCurrentSupplyReply struct {
	Supply json.Uint64 `json:"supply"`
}

GetCurrentSupplyReply are the results from calling GetCurrentSupply

type GetCurrentValidatorsArgs

type GetCurrentValidatorsArgs struct {
	// Allychain we're listing the validators of
	// If omitted, defaults to primary network
	AllychainID ids.ID `json:"allychainID"`
	// NodeIDs of validators to request. If [NodeIDs]
	// is empty, it fetches all current validators. If
	// some nodeIDs are not currently validators, they
	// will be omitted from the response.
	NodeIDs []ids.NodeID `json:"nodeIDs"`
}

GetCurrentValidatorsArgs are the arguments for calling GetCurrentValidators

type GetCurrentValidatorsReply

type GetCurrentValidatorsReply struct {
	Validators []interface{} `json:"validators"`
}

GetCurrentValidatorsReply are the results from calling GetCurrentValidators. Each validator contains a list of nominators to itself.

type GetHeightResponse

type GetHeightResponse struct {
	Height json.Uint64 `json:"height"`
}

type GetMaxStakeAmountArgs

type GetMaxStakeAmountArgs struct {
	AllychainID ids.ID      `json:"allychainID"`
	NodeID      ids.NodeID  `json:"nodeID"`
	StartTime   json.Uint64 `json:"startTime"`
	EndTime     json.Uint64 `json:"endTime"`
}

GetMaxStakeAmountArgs is the request for calling GetMaxStakeAmount.

type GetMaxStakeAmountReply

type GetMaxStakeAmountReply struct {
	Amount json.Uint64 `json:"amount"`
}

GetMaxStakeAmountReply is the response from calling GetMaxStakeAmount.

type GetMinStakeReply

type GetMinStakeReply struct {
	//  The minimum amount of tokens one must bond to be a validator
	MinValidatorStake json.Uint64 `json:"minValidatorStake"`
	// Minimum stake, in nAXC, that can be delegated on the primary network
	MinNominatorStake json.Uint64 `json:"minNominatorStake"`
}

GetMinStakeReply is the response from calling GetMinStake.

type GetPendingValidatorsArgs

type GetPendingValidatorsArgs struct {
	// Allychain we're getting the pending validators of
	// If omitted, defaults to primary network
	AllychainID ids.ID `json:"allychainID"`
	// NodeIDs of validators to request. If [NodeIDs]
	// is empty, it fetches all pending validators. If
	// some requested nodeIDs are not pending validators,
	// they are omitted from the response.
	NodeIDs []ids.NodeID `json:"nodeIDs"`
}

GetPendingValidatorsArgs are the arguments for calling GetPendingValidators

type GetPendingValidatorsReply

type GetPendingValidatorsReply struct {
	Validators []interface{} `json:"validators"`
	Nominators []interface{} `json:"nominators"`
}

GetPendingValidatorsReply are the results from calling GetPendingValidators. Unlike GetCurrentValidatorsReply, each validator has a null nominator list.

type GetRewardUTXOsReply

type GetRewardUTXOsReply struct {
	// Number of UTXOs returned
	NumFetched json.Uint64 `json:"numFetched"`
	// The UTXOs
	UTXOs []string `json:"utxos"`
	// Encoding specifies the encoding format the UTXOs are returned in
	Encoding formatting.Encoding `json:"encoding"`
}

GetRewardUTXOsReply defines the GetRewardUTXOs replies returned from the API

type GetStakeArgs

type GetStakeArgs struct {
	api.JSONAddresses
	Encoding formatting.Encoding `json:"encoding"`
}

type GetStakeReply

type GetStakeReply struct {
	Staked json.Uint64 `json:"staked"`
	// String representation of staked outputs
	// Each is of type axc.TransferableOutput
	Outputs []string `json:"stakedOutputs"`
	// Encoding of [Outputs]
	Encoding formatting.Encoding `json:"encoding"`
}

GetStakeReply is the response from calling GetStake.

type GetStakingAssetIDArgs

type GetStakingAssetIDArgs struct {
	AllychainID ids.ID `json:"allychainID"`
}

GetStakingAssetIDArgs are the arguments to GetStakingAssetID

type GetStakingAssetIDResponse

type GetStakingAssetIDResponse struct {
	AssetID ids.ID `json:"assetID"`
}

GetStakingAssetIDResponse is the response from calling GetStakingAssetID

type GetTimestampReply

type GetTimestampReply struct {
	// Current timestamp
	Timestamp time.Time `json:"timestamp"`
}

GetTimestampReply is the response from GetTimestamp

type GetTotalStakeArgs

type GetTotalStakeArgs struct {
	// Allychain we're getting the total stake
	// If omitted returns Primary network weight
	AllychainID ids.ID `json:"allychainID"`
}

GetTotalStakeArgs are the arguments for calling GetTotalStake

type GetTotalStakeReply

type GetTotalStakeReply struct {
	Stake  json.Uint64 `json:"stake,omitempty"`
	Weight json.Uint64 `json:"weight,omitempty"`
}

GetTotalStakeReply is the response from calling GetTotalStake.

type GetTxStatusArgs

type GetTxStatusArgs struct {
	TxID ids.ID `json:"txID"`
}

type GetTxStatusResponse

type GetTxStatusResponse struct {
	Status status.Status `json:"status"`
	// Reason this tx was dropped.
	// Only non-empty if Status is dropped
	Reason string `json:"reason,omitempty"`
}

type GetValidatorsAtArgs

type GetValidatorsAtArgs struct {
	Height      json.Uint64 `json:"height"`
	AllychainID ids.ID      `json:"allychainID"`
}

GetValidatorsAtArgs is the response from GetValidatorsAt

type GetValidatorsAtReply

type GetValidatorsAtReply struct {
	Validators map[ids.NodeID]uint64 `json:"validators"`
}

GetValidatorsAtReply is the response from GetValidatorsAt

type ImportAXCArgs

type ImportAXCArgs struct {
	// User, password, from addrs, change addr
	api.JSONSpendHeader

	// Chain the funds are coming from
	SourceChain string `json:"sourceChain"`

	// The address that will receive the imported funds
	To string `json:"to"`
}

ImportAXCArgs are the arguments to ImportAXC

type ImportKeyArgs

type ImportKeyArgs struct {
	api.UserPass
	PrivateKey *crypto.PrivateKeySECP256K1R `json:"privateKey"`
}

ImportKeyArgs are arguments for ImportKey

type Index

type Index struct {
	Address string `json:"address"` // The address as a string
	UTXO    string `json:"utxo"`    // The UTXO ID as a string
}

Index is an address and an associated UTXO. Marks a starting or stopping point when fetching UTXOs. Used for pagination.

type InternalState

type InternalState interface {
	MutableState
	uptime.State
	axc.UTXOReader

	SetHeight(height uint64)

	AddCurrentStaker(tx *Tx, potentialReward uint64)
	DeleteCurrentStaker(tx *Tx)
	GetValidatorWeightDiffs(height uint64, allychainID ids.ID) (map[ids.NodeID]*ValidatorWeightDiff, error)

	AddPendingStaker(tx *Tx)
	DeletePendingStaker(tx *Tx)

	SetCurrentStakerChainState(currentStakerChainState)
	SetPendingStakerChainState(pendingStakerChainState)

	GetLastAccepted() ids.ID
	SetLastAccepted(ids.ID)

	GetBlock(blockID ids.ID) (Block, error)
	AddBlock(block Block)

	Abort()
	Commit() error
	CommitBatch() (database.Batch, error)
	Close() error
}

func NewInternalState

func NewInternalState(vm *VM, db database.Database, genesis []byte) (InternalState, error)

func NewMeteredInternalState

func NewMeteredInternalState(vm *VM, db database.Database, genesis []byte, metrics prometheus.Registerer) (InternalState, error)

type Mempool

type Mempool interface {
	Add(tx *Tx) error
	Has(txID ids.ID) bool
	Get(txID ids.ID) *Tx

	AddDecisionTx(tx *Tx)
	AddProposalTx(tx *Tx)

	HasDecisionTxs() bool
	HasProposalTx() bool

	RemoveDecisionTxs(txs []*Tx)
	RemoveProposalTx(tx *Tx)

	PopDecisionTxs(maxTxsBytes int) []*Tx
	PopProposalTx() *Tx

	// Note: dropped txs are added to droppedTxIDs but not
	// not evicted from unissued decision/proposal txs.
	// This allows previously dropped txs to be possibly
	// reissued.
	MarkDropped(txID ids.ID, reason string)
	GetDropReason(txID ids.ID) (string, bool)
}

func NewMempool

func NewMempool(namespace string, registerer prometheus.Registerer) (Mempool, error)

type MockInternalState

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

MockInternalState is a mock of InternalState interface.

func NewMockInternalState

func NewMockInternalState(ctrl *gomock.Controller) *MockInternalState

NewMockInternalState creates a new mock instance.

func (*MockInternalState) Abort

func (m *MockInternalState) Abort()

Abort mocks base method.

func (*MockInternalState) AddAllychain

func (m *MockInternalState) AddAllychain(createAllychainTx *Tx)

AddAllychain mocks base method.

func (*MockInternalState) AddBlock

func (m *MockInternalState) AddBlock(block Block)

AddBlock mocks base method.

func (*MockInternalState) AddChain

func (m *MockInternalState) AddChain(createChainTx *Tx)

AddChain mocks base method.

func (*MockInternalState) AddCurrentStaker

func (m *MockInternalState) AddCurrentStaker(tx *Tx, potentialReward uint64)

AddCurrentStaker mocks base method.

func (*MockInternalState) AddPendingStaker

func (m *MockInternalState) AddPendingStaker(tx *Tx)

AddPendingStaker mocks base method.

func (*MockInternalState) AddRewardUTXO

func (m *MockInternalState) AddRewardUTXO(txID ids.ID, utxo *axc.UTXO)

AddRewardUTXO mocks base method.

func (*MockInternalState) AddTx

func (m *MockInternalState) AddTx(tx *Tx, status status.Status)

AddTx mocks base method.

func (*MockInternalState) AddUTXO

func (m *MockInternalState) AddUTXO(utxo *axc.UTXO)

AddUTXO mocks base method.

func (*MockInternalState) Close

func (m *MockInternalState) Close() error

Close mocks base method.

func (*MockInternalState) Commit

func (m *MockInternalState) Commit() error

Commit mocks base method.

func (*MockInternalState) CommitBatch

func (m *MockInternalState) CommitBatch() (database.Batch, error)

CommitBatch mocks base method.

func (*MockInternalState) CurrentStakerChainState

func (m *MockInternalState) CurrentStakerChainState() currentStakerChainState

CurrentStakerChainState mocks base method.

func (*MockInternalState) DeleteCurrentStaker

func (m *MockInternalState) DeleteCurrentStaker(tx *Tx)

DeleteCurrentStaker mocks base method.

func (*MockInternalState) DeletePendingStaker

func (m *MockInternalState) DeletePendingStaker(tx *Tx)

DeletePendingStaker mocks base method.

func (*MockInternalState) DeleteUTXO

func (m *MockInternalState) DeleteUTXO(utxoID ids.ID)

DeleteUTXO mocks base method.

func (*MockInternalState) EXPECT

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

func (*MockInternalState) GetAllychains

func (m *MockInternalState) GetAllychains() ([]*Tx, error)

GetAllychains mocks base method.

func (*MockInternalState) GetBlock

func (m *MockInternalState) GetBlock(blockID ids.ID) (Block, error)

GetBlock mocks base method.

func (*MockInternalState) GetChains

func (m *MockInternalState) GetChains(allychainID ids.ID) ([]*Tx, error)

GetChains mocks base method.

func (*MockInternalState) GetCurrentSupply

func (m *MockInternalState) GetCurrentSupply() uint64

GetCurrentSupply mocks base method.

func (*MockInternalState) GetLastAccepted

func (m *MockInternalState) GetLastAccepted() ids.ID

GetLastAccepted mocks base method.

func (*MockInternalState) GetRewardUTXOs

func (m *MockInternalState) GetRewardUTXOs(txID ids.ID) ([]*axc.UTXO, error)

GetRewardUTXOs mocks base method.

func (*MockInternalState) GetStartTime

func (m *MockInternalState) GetStartTime(nodeID ids.NodeID) (time.Time, error)

GetStartTime mocks base method.

func (*MockInternalState) GetTimestamp

func (m *MockInternalState) GetTimestamp() time.Time

GetTimestamp mocks base method.

func (*MockInternalState) GetTx

func (m *MockInternalState) GetTx(txID ids.ID) (*Tx, status.Status, error)

GetTx mocks base method.

func (*MockInternalState) GetUTXO

func (m *MockInternalState) GetUTXO(utxoID ids.ID) (*axc.UTXO, error)

GetUTXO mocks base method.

func (*MockInternalState) GetUptime

func (m *MockInternalState) GetUptime(nodeID ids.NodeID) (time.Duration, time.Time, error)

GetUptime mocks base method.

func (*MockInternalState) GetValidatorWeightDiffs

func (m *MockInternalState) GetValidatorWeightDiffs(height uint64, allychainID ids.ID) (map[ids.NodeID]*ValidatorWeightDiff, error)

GetValidatorWeightDiffs mocks base method.

func (*MockInternalState) PendingStakerChainState

func (m *MockInternalState) PendingStakerChainState() pendingStakerChainState

PendingStakerChainState mocks base method.

func (*MockInternalState) SetCurrentStakerChainState

func (m *MockInternalState) SetCurrentStakerChainState(arg0 currentStakerChainState)

SetCurrentStakerChainState mocks base method.

func (*MockInternalState) SetCurrentSupply

func (m *MockInternalState) SetCurrentSupply(arg0 uint64)

SetCurrentSupply mocks base method.

func (*MockInternalState) SetHeight

func (m *MockInternalState) SetHeight(height uint64)

SetHeight mocks base method.

func (*MockInternalState) SetLastAccepted

func (m *MockInternalState) SetLastAccepted(arg0 ids.ID)

SetLastAccepted mocks base method.

func (*MockInternalState) SetPendingStakerChainState

func (m *MockInternalState) SetPendingStakerChainState(arg0 pendingStakerChainState)

SetPendingStakerChainState mocks base method.

func (*MockInternalState) SetTimestamp

func (m *MockInternalState) SetTimestamp(arg0 time.Time)

SetTimestamp mocks base method.

func (*MockInternalState) SetUptime

func (m *MockInternalState) SetUptime(nodeID ids.NodeID, upDuration time.Duration, lastUpdated time.Time) error

SetUptime mocks base method.

func (*MockInternalState) UTXOIDs

func (m *MockInternalState) UTXOIDs(addr []byte, previous ids.ID, limit int) ([]ids.ID, error)

UTXOIDs mocks base method.

type MockInternalStateMockRecorder

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

MockInternalStateMockRecorder is the mock recorder for MockInternalState.

func (*MockInternalStateMockRecorder) Abort

Abort indicates an expected call of Abort.

func (*MockInternalStateMockRecorder) AddAllychain

func (mr *MockInternalStateMockRecorder) AddAllychain(createAllychainTx interface{}) *gomock.Call

AddAllychain indicates an expected call of AddAllychain.

func (*MockInternalStateMockRecorder) AddBlock

func (mr *MockInternalStateMockRecorder) AddBlock(block interface{}) *gomock.Call

AddBlock indicates an expected call of AddBlock.

func (*MockInternalStateMockRecorder) AddChain

func (mr *MockInternalStateMockRecorder) AddChain(createChainTx interface{}) *gomock.Call

AddChain indicates an expected call of AddChain.

func (*MockInternalStateMockRecorder) AddCurrentStaker

func (mr *MockInternalStateMockRecorder) AddCurrentStaker(tx, potentialReward interface{}) *gomock.Call

AddCurrentStaker indicates an expected call of AddCurrentStaker.

func (*MockInternalStateMockRecorder) AddPendingStaker

func (mr *MockInternalStateMockRecorder) AddPendingStaker(tx interface{}) *gomock.Call

AddPendingStaker indicates an expected call of AddPendingStaker.

func (*MockInternalStateMockRecorder) AddRewardUTXO

func (mr *MockInternalStateMockRecorder) AddRewardUTXO(txID, utxo interface{}) *gomock.Call

AddRewardUTXO indicates an expected call of AddRewardUTXO.

func (*MockInternalStateMockRecorder) AddTx

func (mr *MockInternalStateMockRecorder) AddTx(tx, status interface{}) *gomock.Call

AddTx indicates an expected call of AddTx.

func (*MockInternalStateMockRecorder) AddUTXO

func (mr *MockInternalStateMockRecorder) AddUTXO(utxo interface{}) *gomock.Call

AddUTXO indicates an expected call of AddUTXO.

func (*MockInternalStateMockRecorder) Close

Close indicates an expected call of Close.

func (*MockInternalStateMockRecorder) Commit

Commit indicates an expected call of Commit.

func (*MockInternalStateMockRecorder) CommitBatch

func (mr *MockInternalStateMockRecorder) CommitBatch() *gomock.Call

CommitBatch indicates an expected call of CommitBatch.

func (*MockInternalStateMockRecorder) CurrentStakerChainState

func (mr *MockInternalStateMockRecorder) CurrentStakerChainState() *gomock.Call

CurrentStakerChainState indicates an expected call of CurrentStakerChainState.

func (*MockInternalStateMockRecorder) DeleteCurrentStaker

func (mr *MockInternalStateMockRecorder) DeleteCurrentStaker(tx interface{}) *gomock.Call

DeleteCurrentStaker indicates an expected call of DeleteCurrentStaker.

func (*MockInternalStateMockRecorder) DeletePendingStaker

func (mr *MockInternalStateMockRecorder) DeletePendingStaker(tx interface{}) *gomock.Call

DeletePendingStaker indicates an expected call of DeletePendingStaker.

func (*MockInternalStateMockRecorder) DeleteUTXO

func (mr *MockInternalStateMockRecorder) DeleteUTXO(utxoID interface{}) *gomock.Call

DeleteUTXO indicates an expected call of DeleteUTXO.

func (*MockInternalStateMockRecorder) GetAllychains

func (mr *MockInternalStateMockRecorder) GetAllychains() *gomock.Call

GetAllychains indicates an expected call of GetAllychains.

func (*MockInternalStateMockRecorder) GetBlock

func (mr *MockInternalStateMockRecorder) GetBlock(blockID interface{}) *gomock.Call

GetBlock indicates an expected call of GetBlock.

func (*MockInternalStateMockRecorder) GetChains

func (mr *MockInternalStateMockRecorder) GetChains(allychainID interface{}) *gomock.Call

GetChains indicates an expected call of GetChains.

func (*MockInternalStateMockRecorder) GetCurrentSupply

func (mr *MockInternalStateMockRecorder) GetCurrentSupply() *gomock.Call

GetCurrentSupply indicates an expected call of GetCurrentSupply.

func (*MockInternalStateMockRecorder) GetLastAccepted

func (mr *MockInternalStateMockRecorder) GetLastAccepted() *gomock.Call

GetLastAccepted indicates an expected call of GetLastAccepted.

func (*MockInternalStateMockRecorder) GetRewardUTXOs

func (mr *MockInternalStateMockRecorder) GetRewardUTXOs(txID interface{}) *gomock.Call

GetRewardUTXOs indicates an expected call of GetRewardUTXOs.

func (*MockInternalStateMockRecorder) GetStartTime

func (mr *MockInternalStateMockRecorder) GetStartTime(nodeID interface{}) *gomock.Call

GetStartTime indicates an expected call of GetStartTime.

func (*MockInternalStateMockRecorder) GetTimestamp

func (mr *MockInternalStateMockRecorder) GetTimestamp() *gomock.Call

GetTimestamp indicates an expected call of GetTimestamp.

func (*MockInternalStateMockRecorder) GetTx

func (mr *MockInternalStateMockRecorder) GetTx(txID interface{}) *gomock.Call

GetTx indicates an expected call of GetTx.

func (*MockInternalStateMockRecorder) GetUTXO

func (mr *MockInternalStateMockRecorder) GetUTXO(utxoID interface{}) *gomock.Call

GetUTXO indicates an expected call of GetUTXO.

func (*MockInternalStateMockRecorder) GetUptime

func (mr *MockInternalStateMockRecorder) GetUptime(nodeID interface{}) *gomock.Call

GetUptime indicates an expected call of GetUptime.

func (*MockInternalStateMockRecorder) GetValidatorWeightDiffs

func (mr *MockInternalStateMockRecorder) GetValidatorWeightDiffs(height, allychainID interface{}) *gomock.Call

GetValidatorWeightDiffs indicates an expected call of GetValidatorWeightDiffs.

func (*MockInternalStateMockRecorder) PendingStakerChainState

func (mr *MockInternalStateMockRecorder) PendingStakerChainState() *gomock.Call

PendingStakerChainState indicates an expected call of PendingStakerChainState.

func (*MockInternalStateMockRecorder) SetCurrentStakerChainState

func (mr *MockInternalStateMockRecorder) SetCurrentStakerChainState(arg0 interface{}) *gomock.Call

SetCurrentStakerChainState indicates an expected call of SetCurrentStakerChainState.

func (*MockInternalStateMockRecorder) SetCurrentSupply

func (mr *MockInternalStateMockRecorder) SetCurrentSupply(arg0 interface{}) *gomock.Call

SetCurrentSupply indicates an expected call of SetCurrentSupply.

func (*MockInternalStateMockRecorder) SetHeight

func (mr *MockInternalStateMockRecorder) SetHeight(height interface{}) *gomock.Call

SetHeight indicates an expected call of SetHeight.

func (*MockInternalStateMockRecorder) SetLastAccepted

func (mr *MockInternalStateMockRecorder) SetLastAccepted(arg0 interface{}) *gomock.Call

SetLastAccepted indicates an expected call of SetLastAccepted.

func (*MockInternalStateMockRecorder) SetPendingStakerChainState

func (mr *MockInternalStateMockRecorder) SetPendingStakerChainState(arg0 interface{}) *gomock.Call

SetPendingStakerChainState indicates an expected call of SetPendingStakerChainState.

func (*MockInternalStateMockRecorder) SetTimestamp

func (mr *MockInternalStateMockRecorder) SetTimestamp(arg0 interface{}) *gomock.Call

SetTimestamp indicates an expected call of SetTimestamp.

func (*MockInternalStateMockRecorder) SetUptime

func (mr *MockInternalStateMockRecorder) SetUptime(nodeID, upDuration, lastUpdated interface{}) *gomock.Call

SetUptime indicates an expected call of SetUptime.

func (*MockInternalStateMockRecorder) UTXOIDs

func (mr *MockInternalStateMockRecorder) UTXOIDs(addr, previous, limit interface{}) *gomock.Call

UTXOIDs indicates an expected call of UTXOIDs.

type MutableState

type MutableState interface {
	UTXOState
	ValidatorState

	AddRewardUTXO(txID ids.ID, utxo *axc.UTXO)
	GetRewardUTXOs(txID ids.ID) ([]*axc.UTXO, error)

	GetTimestamp() time.Time
	SetTimestamp(time.Time)

	GetCurrentSupply() uint64
	SetCurrentSupply(uint64)

	GetAllychains() ([]*Tx, error)
	AddAllychain(createAllychainTx *Tx)

	GetChains(allychainID ids.ID) ([]*Tx, error)
	AddChain(createChainTx *Tx)

	GetTx(txID ids.ID) (*Tx, status.Status, error)
	AddTx(tx *Tx, status status.Status)
}

type ProposalBlock

type ProposalBlock struct {
	CommonBlock `serialize:"true"`

	Tx Tx `serialize:"true" json:"tx"`
	// contains filtered or unexported fields
}

ProposalBlock is a proposal to change the chain's state.

A proposal may be to:

  1. Advance the chain's timestamp (*AdvanceTimeTx)
  2. Remove a staker from the staker set (*RewardStakerTx)
  3. Add a new staker to the set of pending (future) stakers (*AddValidatorTx, *AddNominatorTx, *AddAllychainValidatorTx)

The proposal will be enacted (change the chain's state) if the proposal block is accepted and followed by an accepted Commit block

func (*ProposalBlock) Accept

func (pb *ProposalBlock) Accept() error

func (*ProposalBlock) Options

func (pb *ProposalBlock) Options() ([2]snowman.Block, error)

Options returns the possible children of this block in preferential order.

func (*ProposalBlock) Reject

func (pb *ProposalBlock) Reject() error

func (*ProposalBlock) Verify

func (pb *ProposalBlock) Verify() error

Verify this block is valid.

The parent block must either be a Commit or an Abort block.

If this block is valid, this function also sets pas.onCommit and pas.onAbort.

type SampleValidatorsArgs

type SampleValidatorsArgs struct {
	// Number of validators in the sample
	Size json.Uint16 `json:"size"`

	// ID of allychain to sample validators from
	// If omitted, defaults to the primary network
	AllychainID ids.ID `json:"allychainID"`
}

SampleValidatorsArgs are the arguments for calling SampleValidators

type SampleValidatorsReply

type SampleValidatorsReply struct {
	Validators []ids.NodeID `json:"validators"`
}

SampleValidatorsReply are the results from calling Sample

type Service

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

Service defines the API calls that can be made to the core chain

func (*Service) AddAllychainValidator

func (service *Service) AddAllychainValidator(_ *http.Request, args *AddAllychainValidatorArgs, response *api.JSONTxIDChangeAddr) error

AddAllychainValidator creates and signs and issues a transaction to add a validator to a allychain other than the primary network

func (*Service) AddNominator

func (service *Service) AddNominator(_ *http.Request, args *AddNominatorArgs, reply *api.JSONTxIDChangeAddr) error

AddNominator creates and signs and issues a transaction to add a nominator to the primary network

func (*Service) AddValidator

func (service *Service) AddValidator(_ *http.Request, args *AddValidatorArgs, reply *api.JSONTxIDChangeAddr) error

AddValidator creates and signs and issues a transaction to add a validator to the primary network

func (*Service) CreateAddress

func (service *Service) CreateAddress(_ *http.Request, args *api.UserPass, response *api.JSONAddress) error

CreateAddress creates an address controlled by [args.Username] Returns the newly created address

func (*Service) CreateAllychain

func (service *Service) CreateAllychain(_ *http.Request, args *CreateAllychainArgs, response *api.JSONTxIDChangeAddr) error

CreateAllychain creates and signs and issues a transaction to create a new allychain

func (*Service) CreateBlockchain

func (service *Service) CreateBlockchain(_ *http.Request, args *CreateBlockchainArgs, response *api.JSONTxIDChangeAddr) error

CreateBlockchain issues a transaction to create a new blockchain

func (*Service) ExportAXC

func (service *Service) ExportAXC(_ *http.Request, args *ExportAXCArgs, response *api.JSONTxIDChangeAddr) error

ExportAXC exports AXC from the CoreChain to the SwapChain It must be imported on the SwapChain to complete the transfer

func (*Service) ExportKey

func (service *Service) ExportKey(r *http.Request, args *ExportKeyArgs, reply *ExportKeyReply) error

ExportKey returns a private key from the provided user

func (*Service) GetAllychains

func (service *Service) GetAllychains(_ *http.Request, args *GetAllychainsArgs, response *GetAllychainsResponse) error

GetAllychains returns the allychains whose ID are in [args.IDs] The response will include the primary network

func (*Service) GetBalance

func (service *Service) GetBalance(_ *http.Request, args *GetBalanceRequest, response *GetBalanceResponse) error

GetBalance gets the balance of an address

func (*Service) GetBlock

func (service *Service) GetBlock(_ *http.Request, args *api.GetBlockArgs, response *api.GetBlockResponse) error

func (*Service) GetBlockchainStatus

func (service *Service) GetBlockchainStatus(_ *http.Request, args *GetBlockchainStatusArgs, reply *GetBlockchainStatusReply) error

GetBlockchainStatus gets the status of a blockchain with the ID [args.BlockchainID].

func (*Service) GetBlockchains

func (service *Service) GetBlockchains(_ *http.Request, args *struct{}, response *GetBlockchainsResponse) error

GetBlockchains returns all of the blockchains that exist

func (*Service) GetCurrentSupply

func (service *Service) GetCurrentSupply(_ *http.Request, _ *struct{}, reply *GetCurrentSupplyReply) error

GetCurrentSupply returns an upper bound on the supply of AXC in the system

func (*Service) GetCurrentValidators

func (service *Service) GetCurrentValidators(_ *http.Request, args *GetCurrentValidatorsArgs, reply *GetCurrentValidatorsReply) error

GetCurrentValidators returns current validators and nominators

func (*Service) GetHeight

func (service *Service) GetHeight(r *http.Request, args *struct{}, response *GetHeightResponse) error

GetHeight returns the height of the last accepted block

func (*Service) GetMaxStakeAmount

func (service *Service) GetMaxStakeAmount(_ *http.Request, args *GetMaxStakeAmountArgs, reply *GetMaxStakeAmountReply) error

GetMaxStakeAmount returns the maximum amount of nAXC staking to the named node during the time period.

func (*Service) GetMinStake

func (service *Service) GetMinStake(_ *http.Request, _ *struct{}, reply *GetMinStakeReply) error

GetMinStake returns the minimum staking amount in nAXC.

func (*Service) GetPendingValidators

func (service *Service) GetPendingValidators(_ *http.Request, args *GetPendingValidatorsArgs, reply *GetPendingValidatorsReply) error

GetPendingValidators returns the list of pending validators

func (*Service) GetRewardUTXOs

func (service *Service) GetRewardUTXOs(_ *http.Request, args *api.GetTxArgs, reply *GetRewardUTXOsReply) error

GetRewardUTXOs returns the UTXOs that were rewarded after the provided transaction's staking period ended.

func (*Service) GetStake

func (service *Service) GetStake(_ *http.Request, args *GetStakeArgs, response *GetStakeReply) error

GetStake returns the amount of nAXC that [args.Addresses] have cumulatively staked on the Primary Network.

This method assumes that each stake output has only owner This method assumes only AXC can be staked This method only concerns itself with the Primary Network, not allychains TODO: Improve the performance of this method by maintaining this data in a data structure rather than re-calculating it by iterating over stakers

func (*Service) GetStakingAssetID

func (service *Service) GetStakingAssetID(_ *http.Request, args *GetStakingAssetIDArgs, response *GetStakingAssetIDResponse) error

GetStakingAssetID returns the assetID of the token used to stake on the provided allychain

func (*Service) GetTimestamp

func (service *Service) GetTimestamp(_ *http.Request, args *struct{}, reply *GetTimestampReply) error

GetTimestamp returns the current timestamp on chain.

func (*Service) GetTotalStake

func (service *Service) GetTotalStake(_ *http.Request, args *GetTotalStakeArgs, reply *GetTotalStakeReply) error

GetTotalStake returns the total amount staked on the Primary Network

func (*Service) GetTx

func (service *Service) GetTx(_ *http.Request, args *api.GetTxArgs, response *api.GetTxReply) error

GetTx gets a tx

func (*Service) GetTxStatus

func (service *Service) GetTxStatus(_ *http.Request, args *GetTxStatusArgs, response *GetTxStatusResponse) error

GetTxStatus gets a tx's status

func (*Service) GetUTXOs

func (service *Service) GetUTXOs(_ *http.Request, args *api.GetUTXOsArgs, response *api.GetUTXOsReply) error

GetUTXOs returns the UTXOs controlled by the given addresses

func (*Service) GetValidatorsAt

func (service *Service) GetValidatorsAt(_ *http.Request, args *GetValidatorsAtArgs, reply *GetValidatorsAtReply) error

GetValidatorsAt returns the weights of the validator set of a provided allychain at the specified height.

func (*Service) ImportAXC

func (service *Service) ImportAXC(_ *http.Request, args *ImportAXCArgs, response *api.JSONTxIDChangeAddr) error

ImportAXC issues a transaction to import AXC from the Swapchain. The AXC must have already been exported from the SwapChain.

func (*Service) ImportKey

func (service *Service) ImportKey(r *http.Request, args *ImportKeyArgs, reply *api.JSONAddress) error

ImportKey adds a private key to the provided user

func (*Service) IssueTx

func (service *Service) IssueTx(_ *http.Request, args *api.FormattedTx, response *api.JSONTxID) error

IssueTx issues a tx

func (*Service) ListAddresses

func (service *Service) ListAddresses(_ *http.Request, args *api.UserPass, response *api.JSONAddresses) error

ListAddresses returns the addresses controlled by [args.Username]

func (*Service) SampleValidators

func (service *Service) SampleValidators(_ *http.Request, args *SampleValidatorsArgs, reply *SampleValidatorsReply) error

SampleValidators returns a sampling of the list of current validators

func (*Service) ValidatedBy

func (service *Service) ValidatedBy(_ *http.Request, args *ValidatedByArgs, response *ValidatedByResponse) error

ValidatedBy returns the ID of the Allychain that validates [args.BlockchainID]

func (*Service) Validates

func (service *Service) Validates(_ *http.Request, args *ValidatesArgs, response *ValidatesResponse) error

Validates returns the IDs of the blockchains validated by [args.AllychainID]

type StandardBlock

type StandardBlock struct {
	CommonDecisionBlock `serialize:"true"`

	Txs []*Tx `serialize:"true" json:"txs"`
	// contains filtered or unexported fields
}

StandardBlock being accepted results in the transactions contained in the block to be accepted and committed to the chain.

func (*StandardBlock) Accept

func (sb *StandardBlock) Accept() error

func (*StandardBlock) Reject

func (sb *StandardBlock) Reject() error

func (*StandardBlock) Verify

func (sb *StandardBlock) Verify() error

Verify this block performs a valid state transition.

The parent block must be a proposal

This function also sets onAcceptDB database if the verification passes.

type StaticClient

type StaticClient interface {
	BuildGenesis(ctx context.Context, args *BuildGenesisArgs, options ...rpc.Option) (*BuildGenesisReply, error)
}

StaticClient for interacting with the platformvm static api

func NewStaticClient

func NewStaticClient(uri string) StaticClient

NewClient returns a platformvm client for interacting with the platformvm static api

type StaticService

type StaticService struct{}

StaticService defines the static API methods exposed by the platform VM

func (*StaticService) BuildGenesis

func (ss *StaticService) BuildGenesis(_ *http.Request, args *BuildGenesisArgs, reply *BuildGenesisReply) error

BuildGenesis build the genesis state of the Core Chain (and thereby the Axia network.)

type TimedTx

type TimedTx interface {
	ID() ids.ID
	StartTime() time.Time
	EndTime() time.Time
	Weight() uint64
	Bytes() []byte
}

type TimedTxHeap

type TimedTxHeap interface {
	TxHeap

	Timestamp() time.Time
}

func NewTxHeapByStartTime

func NewTxHeapByStartTime() TimedTxHeap

type Tx

type Tx struct {
	// The body of this transaction
	UnsignedTx `serialize:"true" json:"unsignedTx"`

	// The credentials of this transaction
	Creds []verify.Verifiable `serialize:"true" json:"credentials"`
}

Tx is a signed transaction

func (*Tx) Sign

func (tx *Tx) Sign(c codec.Manager, signers [][]*crypto.PrivateKeySECP256K1R) error

Sign this transaction with the provided signers

type TxHeap

type TxHeap interface {
	Add(tx *Tx)
	Get(txID ids.ID) *Tx
	Remove(txID ids.ID) *Tx
	Peek() *Tx
	RemoveTop() *Tx
	Len() int
}

func NewTxHeapByAge

func NewTxHeapByAge() TxHeap

func NewTxHeapWithMetrics

func NewTxHeapWithMetrics(
	txHeap TxHeap,
	namespace string,
	registerer prometheus.Registerer,
) (TxHeap, error)

type UTXOAdder

type UTXOAdder interface {
	AddUTXO(utxo *axc.UTXO)
}

type UTXODeleter

type UTXODeleter interface {
	DeleteUTXO(utxoID ids.ID)
}

type UTXOGetter

type UTXOGetter interface {
	GetUTXO(utxoID ids.ID) (*axc.UTXO, error)
}

type UTXOState

type UTXOState interface {
	UTXOGetter
	UTXOAdder
	UTXODeleter
}

type UnsignedAddAllychainValidatorTx

type UnsignedAddAllychainValidatorTx struct {
	// Metadata, inputs and outputs
	BaseTx `serialize:"true"`
	// The validator
	Validator coreChainValidator.AllychainValidator `serialize:"true" json:"validator"`
	// Auth that will be allowing this validator into the network
	AllychainAuth verify.Verifiable `serialize:"true" json:"allychainAuthorization"`
}

UnsignedAddAllychainValidatorTx is an unsigned addAllychainValidatorTx

func (*UnsignedAddAllychainValidatorTx) EndTime

EndTime of this validator

func (*UnsignedAddAllychainValidatorTx) Execute

func (tx *UnsignedAddAllychainValidatorTx) Execute(
	vm *VM,
	parentState MutableState,
	stx *Tx,
) (
	VersionedState,
	VersionedState,
	error,
)

Execute this transaction.

func (*UnsignedAddAllychainValidatorTx) InitiallyPrefersCommit

func (tx *UnsignedAddAllychainValidatorTx) InitiallyPrefersCommit(vm *VM) bool

InitiallyPrefersCommit returns true if the proposed validators start time is after the current wall clock time,

func (*UnsignedAddAllychainValidatorTx) SemanticVerify

func (tx *UnsignedAddAllychainValidatorTx) SemanticVerify(vm *VM, parentState MutableState, stx *Tx) error

Attempts to verify this transaction with the provided state.

func (*UnsignedAddAllychainValidatorTx) StartTime

func (tx *UnsignedAddAllychainValidatorTx) StartTime() time.Time

StartTime of this validator

func (*UnsignedAddAllychainValidatorTx) SyntacticVerify

func (tx *UnsignedAddAllychainValidatorTx) SyntacticVerify(ctx *snow.Context) error

SyntacticVerify returns nil iff [tx] is valid

func (*UnsignedAddAllychainValidatorTx) Weight

Weight of this validator

type UnsignedAddNominatorTx

type UnsignedAddNominatorTx struct {
	// Metadata, inputs and outputs
	BaseTx `serialize:"true"`
	// Describes the delegatee
	Validator coreChainValidator.Validator `serialize:"true" json:"validator"`
	// Where to send staked tokens when done validating
	Stake []*axc.TransferableOutput `serialize:"true" json:"stake"`
	// Where to send staking rewards when done validating
	RewardsOwner fx.Owner `serialize:"true" json:"rewardsOwner"`
}

UnsignedAddNominatorTx is an unsigned addNominatorTx

func (*UnsignedAddNominatorTx) EndTime

func (tx *UnsignedAddNominatorTx) EndTime() time.Time

EndTime of this validator

func (*UnsignedAddNominatorTx) Execute

func (tx *UnsignedAddNominatorTx) Execute(
	vm *VM,
	parentState MutableState,
	stx *Tx,
) (
	VersionedState,
	VersionedState,
	error,
)

Execute this transaction.

func (*UnsignedAddNominatorTx) InitCtx

func (tx *UnsignedAddNominatorTx) InitCtx(ctx *snow.Context)

InitCtx sets the FxID fields in the inputs and outputs of this UnsignedAddNominatorTx. Also sets the [ctx] to the given [vm.ctx] so that the addresses can be json marshalled into human readable format

func (*UnsignedAddNominatorTx) InitiallyPrefersCommit

func (tx *UnsignedAddNominatorTx) InitiallyPrefersCommit(vm *VM) bool

InitiallyPrefersCommit returns true if the proposed validators start time is after the current wall clock time,

func (*UnsignedAddNominatorTx) SemanticVerify

func (tx *UnsignedAddNominatorTx) SemanticVerify(vm *VM, parentState MutableState, stx *Tx) error

Attempts to verify this transaction with the provided state.

func (*UnsignedAddNominatorTx) StartTime

func (tx *UnsignedAddNominatorTx) StartTime() time.Time

StartTime of this validator

func (*UnsignedAddNominatorTx) SyntacticVerify

func (tx *UnsignedAddNominatorTx) SyntacticVerify(ctx *snow.Context) error

SyntacticVerify returns nil iff [tx] is valid

func (*UnsignedAddNominatorTx) Weight

func (tx *UnsignedAddNominatorTx) Weight() uint64

Weight of this validator

type UnsignedAddValidatorTx

type UnsignedAddValidatorTx struct {
	// Metadata, inputs and outputs
	BaseTx `serialize:"true"`
	// Describes the delegatee
	Validator coreChainValidator.Validator `serialize:"true" json:"validator"`
	// Where to send staked tokens when done validating
	Stake []*axc.TransferableOutput `serialize:"true" json:"stake"`
	// Where to send staking rewards when done validating
	RewardsOwner fx.Owner `serialize:"true" json:"rewardsOwner"`
	// Fee this validator charges nominators as a percentage, times 10,000
	// For example, if this validator has Shares=300,000 then they take 30% of rewards from nominators
	Shares uint32 `serialize:"true" json:"shares"`
}

UnsignedAddValidatorTx is an unsigned addValidatorTx

func (*UnsignedAddValidatorTx) EndTime

func (tx *UnsignedAddValidatorTx) EndTime() time.Time

EndTime of this validator

func (*UnsignedAddValidatorTx) Execute

func (tx *UnsignedAddValidatorTx) Execute(
	vm *VM,
	parentState MutableState,
	stx *Tx,
) (
	VersionedState,
	VersionedState,
	error,
)

Execute this transaction.

func (*UnsignedAddValidatorTx) InitCtx

func (tx *UnsignedAddValidatorTx) InitCtx(ctx *snow.Context)

InitCtx sets the FxID fields in the inputs and outputs of this UnsignedAddValidatorTx. Also sets the [ctx] to the given [vm.ctx] so that the addresses can be json marshalled into human readable format

func (*UnsignedAddValidatorTx) InitiallyPrefersCommit

func (tx *UnsignedAddValidatorTx) InitiallyPrefersCommit(vm *VM) bool

InitiallyPrefersCommit returns true if the proposed validators start time is after the current wall clock time,

func (*UnsignedAddValidatorTx) SemanticVerify

func (tx *UnsignedAddValidatorTx) SemanticVerify(vm *VM, parentState MutableState, stx *Tx) error

Attempts to verify this transaction with the provided state.

func (*UnsignedAddValidatorTx) StartTime

func (tx *UnsignedAddValidatorTx) StartTime() time.Time

StartTime of this validator

func (*UnsignedAddValidatorTx) SyntacticVerify

func (tx *UnsignedAddValidatorTx) SyntacticVerify(ctx *snow.Context) error

SyntacticVerify returns nil iff [tx] is valid

func (*UnsignedAddValidatorTx) Weight

func (tx *UnsignedAddValidatorTx) Weight() uint64

Weight of this validator

type UnsignedAdvanceTimeTx

type UnsignedAdvanceTimeTx struct {
	axc.Metadata

	// Unix time this block proposes increasing the timestamp to
	Time uint64 `serialize:"true" json:"time"`
}

UnsignedAdvanceTimeTx is a transaction to increase the chain's timestamp. When the chain's timestamp is updated (a AdvanceTimeTx is accepted and followed by a commit block) the staker set is also updated accordingly. It must be that:

  • proposed timestamp > [current chain time]
  • proposed timestamp <= [time for next staker set change]

func (*UnsignedAdvanceTimeTx) Execute

func (tx *UnsignedAdvanceTimeTx) Execute(
	vm *VM,
	parentState MutableState,
	stx *Tx,
) (
	VersionedState,
	VersionedState,
	error,
)

Execute this transaction.

func (*UnsignedAdvanceTimeTx) InitCtx

func (tx *UnsignedAdvanceTimeTx) InitCtx(*snow.Context)

func (*UnsignedAdvanceTimeTx) InitiallyPrefersCommit

func (tx *UnsignedAdvanceTimeTx) InitiallyPrefersCommit(vm *VM) bool

InitiallyPrefersCommit returns true if the proposed time is at or before the current time plus the synchrony bound

func (*UnsignedAdvanceTimeTx) InputIDs

func (tx *UnsignedAdvanceTimeTx) InputIDs() ids.Set

func (*UnsignedAdvanceTimeTx) SemanticVerify

func (tx *UnsignedAdvanceTimeTx) SemanticVerify(vm *VM, parentState MutableState, stx *Tx) error

Attempts to verify this transaction with the provided state.

func (*UnsignedAdvanceTimeTx) SyntacticVerify

func (tx *UnsignedAdvanceTimeTx) SyntacticVerify(*snow.Context) error

func (*UnsignedAdvanceTimeTx) Timestamp

func (tx *UnsignedAdvanceTimeTx) Timestamp() time.Time

Timestamp returns the time this block is proposing the chain should be set to

type UnsignedAtomicTx

type UnsignedAtomicTx interface {
	UnsignedDecisionTx

	// Execute this transaction with the provided state.
	AtomicExecute(vm *VM, parentState MutableState, stx *Tx) (VersionedState, error)

	// Accept this transaction with the additionally provided state transitions.
	AtomicAccept(ctx *snow.Context, batch database.Batch) error
}

UnsignedAtomicTx is an unsigned operation that can be atomically accepted

type UnsignedCreateAllychainTx

type UnsignedCreateAllychainTx struct {
	// Metadata, inputs and outputs
	BaseTx `serialize:"true"`
	// Who is authorized to manage this allychain
	Owner fx.Owner `serialize:"true" json:"owner"`
}

UnsignedCreateAllychainTx is an unsigned proposal to create a new allychain

func (*UnsignedCreateAllychainTx) AtomicOperations

func (tx *UnsignedCreateAllychainTx) AtomicOperations() (ids.ID, *atomic.Requests, error)

func (*UnsignedCreateAllychainTx) Execute

func (tx *UnsignedCreateAllychainTx) Execute(
	vm *VM,
	vs VersionedState,
	stx *Tx,
) (
	func() error,
	error,
)

Execute this transaction.

func (*UnsignedCreateAllychainTx) InitCtx

func (tx *UnsignedCreateAllychainTx) InitCtx(ctx *snow.Context)

InitCtx sets the FxID fields in the inputs and outputs of this UnsignedCreateAllychainTx. Also sets the [ctx] to the given [vm.ctx] so that the addresses can be json marshalled into human readable format

func (*UnsignedCreateAllychainTx) InputUTXOs

func (tx *UnsignedCreateAllychainTx) InputUTXOs() ids.Set

InputUTXOs for [DecisionTxs] will return an empty set to diffrentiate from the [AtomicTxs] input UTXOs

func (*UnsignedCreateAllychainTx) SemanticVerify

func (tx *UnsignedCreateAllychainTx) SemanticVerify(vm *VM, parentState MutableState, stx *Tx) error

Attempts to verify this transaction with the provided state.

func (*UnsignedCreateAllychainTx) SyntacticVerify

func (tx *UnsignedCreateAllychainTx) SyntacticVerify(ctx *snow.Context) error

SyntacticVerify verifies that this transaction is well-formed

type UnsignedCreateChainTx

type UnsignedCreateChainTx struct {
	// Metadata, inputs and outputs
	BaseTx `serialize:"true"`
	// ID of the Allychain that validates this blockchain
	AllychainID ids.ID `serialize:"true" json:"allychainID"`
	// A human readable name for the chain; need not be unique
	ChainName string `serialize:"true" json:"chainName"`
	// ID of the VM running on the new chain
	VMID ids.ID `serialize:"true" json:"vmID"`
	// IDs of the feature extensions running on the new chain
	FxIDs []ids.ID `serialize:"true" json:"fxIDs"`
	// Byte representation of genesis state of the new chain
	GenesisData []byte `serialize:"true" json:"genesisData"`
	// Authorizes this blockchain to be added to this allychain
	AllychainAuth verify.Verifiable `serialize:"true" json:"allychainAuthorization"`
}

UnsignedCreateChainTx is an unsigned CreateChainTx

func (*UnsignedCreateChainTx) AtomicOperations

func (tx *UnsignedCreateChainTx) AtomicOperations() (ids.ID, *atomic.Requests, error)

func (*UnsignedCreateChainTx) Execute

func (tx *UnsignedCreateChainTx) Execute(
	vm *VM,
	vs VersionedState,
	stx *Tx,
) (
	func() error,
	error,
)

Execute this transaction.

func (*UnsignedCreateChainTx) InputUTXOs

func (tx *UnsignedCreateChainTx) InputUTXOs() ids.Set

func (*UnsignedCreateChainTx) SemanticVerify

func (tx *UnsignedCreateChainTx) SemanticVerify(vm *VM, parentState MutableState, stx *Tx) error

Attempts to verify this transaction with the provided state.

func (*UnsignedCreateChainTx) SyntacticVerify

func (tx *UnsignedCreateChainTx) SyntacticVerify(ctx *snow.Context) error

type UnsignedDecisionTx

type UnsignedDecisionTx interface {
	UnsignedTx

	// Execute this transaction with the provided state.
	Execute(vm *VM, vs VersionedState, stx *Tx) (
		onAcceptFunc func() error,
		err error,
	)

	// To maintain consistency with the Atomic txs
	InputUTXOs() ids.Set

	// AtomicOperations provides the requests to be written to shared memory.
	AtomicOperations() (ids.ID, *atomic.Requests, error)
}

UnsignedDecisionTx is an unsigned operation that can be immediately decided

type UnsignedExportTx

type UnsignedExportTx struct {
	BaseTx `serialize:"true"`

	// Which chain to send the funds to
	DestinationChain ids.ID `serialize:"true" json:"destinationChain"`

	// Outputs that are exported to the chain
	ExportedOutputs []*axc.TransferableOutput `serialize:"true" json:"exportedOutputs"`
}

UnsignedExportTx is an unsigned ExportTx

func (*UnsignedExportTx) AtomicAccept

func (tx *UnsignedExportTx) AtomicAccept(ctx *snow.Context, batch database.Batch) error

Accept this transaction.

func (*UnsignedExportTx) AtomicExecute

func (tx *UnsignedExportTx) AtomicExecute(
	vm *VM,
	parentState MutableState,
	stx *Tx,
) (VersionedState, error)

Execute this transaction and return the versioned state.

func (*UnsignedExportTx) AtomicOperations

func (tx *UnsignedExportTx) AtomicOperations() (ids.ID, *atomic.Requests, error)

AtomicOperations returns the shared memory requests

func (*UnsignedExportTx) Execute

func (tx *UnsignedExportTx) Execute(
	vm *VM,
	vs VersionedState,
	stx *Tx,
) (func() error, error)

Execute this transaction.

func (*UnsignedExportTx) InitCtx

func (tx *UnsignedExportTx) InitCtx(ctx *snow.Context)

InitCtx sets the FxID fields in the inputs and outputs of this UnsignedExportTx. Also sets the [ctx] to the given [vm.ctx] so that the addresses can be json marshalled into human readable format

func (*UnsignedExportTx) InputUTXOs

func (tx *UnsignedExportTx) InputUTXOs() ids.Set

InputUTXOs returns an empty set

func (*UnsignedExportTx) SemanticVerify

func (tx *UnsignedExportTx) SemanticVerify(vm *VM, parentState MutableState, stx *Tx) error

Attempts to verify this transaction with the provided state.

func (*UnsignedExportTx) SyntacticVerify

func (tx *UnsignedExportTx) SyntacticVerify(ctx *snow.Context) error

SyntacticVerify this transaction is well-formed

type UnsignedImportTx

type UnsignedImportTx struct {
	BaseTx `serialize:"true"`

	// Which chain to consume the funds from
	SourceChain ids.ID `serialize:"true" json:"sourceChain"`

	// Inputs that consume UTXOs produced on the chain
	ImportedInputs []*axc.TransferableInput `serialize:"true" json:"importedInputs"`
}

UnsignedImportTx is an unsigned ImportTx

func (*UnsignedImportTx) AtomicAccept

func (tx *UnsignedImportTx) AtomicAccept(ctx *snow.Context, batch database.Batch) error

Accept this transaction and spend imported inputs We spend imported UTXOs here rather than in semanticVerify because we don't want to remove an imported UTXO in semanticVerify only to have the transaction not be Accepted. This would be inconsistent. Recall that imported UTXOs are not kept in a versionDB.

func (*UnsignedImportTx) AtomicExecute

func (tx *UnsignedImportTx) AtomicExecute(
	vm *VM,
	parentState MutableState,
	stx *Tx,
) (VersionedState, error)

[AtomicExecute] to maintain consistency for the standard block.

func (*UnsignedImportTx) AtomicOperations

func (tx *UnsignedImportTx) AtomicOperations() (ids.ID, *atomic.Requests, error)

AtomicOperations returns the shared memory requests

func (*UnsignedImportTx) Execute

func (tx *UnsignedImportTx) Execute(
	vm *VM,
	vs VersionedState,
	stx *Tx,
) (func() error, error)

Execute this transaction.

func (*UnsignedImportTx) InitCtx

func (tx *UnsignedImportTx) InitCtx(ctx *snow.Context)

InitCtx sets the FxID fields in the inputs and outputs of this UnsignedImportTx. Also sets the [ctx] to the given [vm.ctx] so that the addresses can be json marshalled into human readable format

func (*UnsignedImportTx) InputIDs

func (tx *UnsignedImportTx) InputIDs() ids.Set

func (*UnsignedImportTx) InputUTXOs

func (tx *UnsignedImportTx) InputUTXOs() ids.Set

InputUTXOs returns the UTXOIDs of the imported funds

func (*UnsignedImportTx) SemanticVerify

func (tx *UnsignedImportTx) SemanticVerify(vm *VM, parentState MutableState, stx *Tx) error

Attempts to verify this transaction with the provided state.

func (*UnsignedImportTx) SyntacticVerify

func (tx *UnsignedImportTx) SyntacticVerify(ctx *snow.Context) error

SyntacticVerify this transaction is well-formed

type UnsignedProposalTx

type UnsignedProposalTx interface {
	UnsignedTx

	// Attempts to verify this transaction with the provided state.
	Execute(vm *VM, state MutableState, stx *Tx) (
		onCommitState VersionedState,
		onAbortState VersionedState,
		err error,
	)
	InitiallyPrefersCommit(vm *VM) bool
}

UnsignedProposalTx is an unsigned operation that can be proposed

type UnsignedRewardValidatorTx

type UnsignedRewardValidatorTx struct {
	axc.Metadata

	// ID of the tx that created the nominator/validator being removed/rewarded
	TxID ids.ID `serialize:"true" json:"txID"`
	// contains filtered or unexported fields
}

UnsignedRewardValidatorTx is a transaction that represents a proposal to remove a validator that is currently validating from the validator set.

If this transaction is accepted and the next block accepted is a Commit block, the validator is removed and the address that the validator specified receives the staked AXC as well as a validating reward.

If this transaction is accepted and the next block accepted is an Abort block, the validator is removed and the address that the validator specified receives the staked AXC but no reward.

func (*UnsignedRewardValidatorTx) Execute

func (tx *UnsignedRewardValidatorTx) Execute(
	vm *VM,
	parentState MutableState,
	stx *Tx,
) (
	VersionedState,
	VersionedState,
	error,
)

Execute this transaction.

The current validating set must have at least one member. The next validator to be removed must be the validator specified in this block. The next validator to be removed must be have an end time equal to the current

chain timestamp.

func (*UnsignedRewardValidatorTx) InitCtx

func (tx *UnsignedRewardValidatorTx) InitCtx(*snow.Context)

func (*UnsignedRewardValidatorTx) InitiallyPrefersCommit

func (tx *UnsignedRewardValidatorTx) InitiallyPrefersCommit(*VM) bool

InitiallyPrefersCommit returns true if this node thinks the validator should receive a staking reward.

TODO: A validator should receive a reward only if they are sufficiently responsive and correct during the time they are validating. Right now they receive a reward if they're up (but not necessarily correct and responsive) for a sufficient amount of time

func (*UnsignedRewardValidatorTx) InputIDs

func (tx *UnsignedRewardValidatorTx) InputIDs() ids.Set

func (*UnsignedRewardValidatorTx) SemanticVerify

func (tx *UnsignedRewardValidatorTx) SemanticVerify(vm *VM, parentState MutableState, stx *Tx) error

Attempts to verify this transaction with the provided state.

func (*UnsignedRewardValidatorTx) SyntacticVerify

func (tx *UnsignedRewardValidatorTx) SyntacticVerify(*snow.Context) error

type UnsignedTx

type UnsignedTx interface {
	// TODO: Remove this initialization pattern from both the platformvm and the
	// avm.
	snow.ContextInitializable
	Initialize(unsignedBytes, signedBytes []byte)
	ID() ids.ID
	UnsignedBytes() []byte
	Bytes() []byte

	// InputIDs returns the set of inputs this transaction consumes
	InputIDs() ids.Set

	// Attempts to verify this transaction without any provided state.
	SyntacticVerify(ctx *snow.Context) error

	// Attempts to verify this transaction with the provided state.
	SemanticVerify(vm *VM, parentState MutableState, stx *Tx) error
}

UnsignedTx is an unsigned transaction

type VM

type VM struct {
	Factory

	axc.AddressManager
	axc.AtomicUTXOManager
	// contains filtered or unexported fields
}

func (*VM) AcceptBlock

func (m *VM) AcceptBlock(b snowman.Block) error

func (*VM) AcceptTx

func (m *VM) AcceptTx(tx *Tx) error

func (VM) AppGossip

func (n VM) AppGossip(nodeID ids.NodeID, msgBytes []byte) error

func (VM) AppRequest

func (n VM) AppRequest(nodeID ids.NodeID, requestID uint32, deadline time.Time, msgBytes []byte) error

func (VM) AppRequestFailed

func (n VM) AppRequestFailed(nodeID ids.NodeID, requestID uint32) error

func (VM) AppResponse

func (n VM) AppResponse(nodeID ids.NodeID, requestID uint32, msgBytes []byte) error

func (*VM) BuildBlock

func (vm *VM) BuildBlock() (snowman.Block, error)

BuildBlock builds a block to be added to consensus

func (*VM) Clock

func (vm *VM) Clock() *mockable.Clock

func (*VM) CodecRegistry

func (vm *VM) CodecRegistry() codec.Registry

func (*VM) Connected

func (vm *VM) Connected(vdrID ids.NodeID, _ version.Application) error

func (*VM) CreateHandlers

func (vm *VM) CreateHandlers() (map[string]*common.HTTPHandler, error)

CreateHandlers returns a map where: * keys are API endpoint extensions * values are API handlers

func (*VM) CreateStaticHandlers

func (vm *VM) CreateStaticHandlers() (map[string]*common.HTTPHandler, error)

CreateStaticHandlers returns a map where: * keys are API endpoint extensions * values are API handlers

func (*VM) Disconnected

func (vm *VM) Disconnected(vdrID ids.NodeID) error

func (*VM) GetBlock

func (vm *VM) GetBlock(blkID ids.ID) (snowman.Block, error)

func (*VM) GetCurrentHeight

func (vm *VM) GetCurrentHeight() (uint64, error)

GetCurrentHeight returns the height of the last accepted block

func (*VM) GetMinimumHeight

func (vm *VM) GetMinimumHeight() (uint64, error)

GetMinimumHeight returns the height of the most recent block beyond the horizon of our recentlyAccepted window.

Because the time between blocks is arbitrary, we're only guaranteed that the window's configured TTL amount of time has passed once an element expires from the window.

To try to always return a block older than the window's TTL, we return the parent of the oldest element in the window (as an expired element is always guaranteed to be sufficiently stale). If we haven't expired an element yet in the case of a process restart, we default to the lastAccepted block's height which is likely (but not guaranteed) to also be older than the window's configured TTL.

func (*VM) GetValidatorSet

func (vm *VM) GetValidatorSet(height uint64, allychainID ids.ID) (map[ids.NodeID]uint64, error)

GetValidatorSet returns the validator set at the specified height for the provided allychainID.

func (VM) GossipTx

func (n VM) GossipTx(tx *Tx) error

func (*VM) HealthCheck

func (vm *VM) HealthCheck() (interface{}, error)

func (*VM) Initialize

func (vm *VM) Initialize(
	ctx *snow.Context,
	dbManager manager.Manager,
	genesisBytes []byte,
	upgradeBytes []byte,
	configBytes []byte,
	toEngine chan<- common.Message,
	_ []*common.Fx,
	appSender common.AppSender,
) error

Initialize this blockchain. [vm.ChainManager] and [vm.vdrMgr] must be set before this function is called.

func (*VM) LastAccepted

func (vm *VM) LastAccepted() (ids.ID, error)

LastAccepted returns the block most recently accepted

func (*VM) Logger

func (vm *VM) Logger() logging.Logger

func (*VM) ParseBlock

func (vm *VM) ParseBlock(b []byte) (snowman.Block, error)

func (*VM) Preferred

func (vm *VM) Preferred() (Block, error)

func (*VM) SetPreference

func (vm *VM) SetPreference(blkID ids.ID) error

SetPreference sets the preferred block to be the one with ID [blkID]

func (*VM) SetState

func (vm *VM) SetState(state snow.State) error

func (*VM) Shutdown

func (vm *VM) Shutdown() error

Shutdown this blockchain

func (*VM) Version

func (vm *VM) Version() (string, error)

type ValidatedByArgs

type ValidatedByArgs struct {
	// ValidatedBy returns the ID of the Allychain validating the blockchain with this ID
	BlockchainID ids.ID `json:"blockchainID"`
}

ValidatedByArgs is the arguments for calling ValidatedBy

type ValidatedByResponse

type ValidatedByResponse struct {
	// ID of the Allychain validating the specified blockchain
	AllychainID ids.ID `json:"allychainID"`
}

ValidatedByResponse is the reply from calling ValidatedBy

type ValidatesArgs

type ValidatesArgs struct {
	AllychainID ids.ID `json:"allychainID"`
}

ValidatesArgs are the arguments to Validates

type ValidatesResponse

type ValidatesResponse struct {
	BlockchainIDs []ids.ID `json:"blockchainIDs"`
}

ValidatesResponse is the response from calling Validates

type ValidatorState

type ValidatorState interface {
	CurrentStakerChainState() currentStakerChainState
	PendingStakerChainState() pendingStakerChainState
}

type ValidatorWeightDiff

type ValidatorWeightDiff struct {
	Decrease bool   `serialize:"true"`
	Amount   uint64 `serialize:"true"`
}

type VersionedState

type VersionedState interface {
	MutableState

	SetBase(MutableState)
	Apply(InternalState)
}

Directories

Path Synopsis
Package fx is a generated GoMock package.
Package fx is a generated GoMock package.

Jump to

Keyboard shortcuts

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