Help us shape the future of Go! Take the 2026 Go Developer Survey

txs

package
v0.1.1 Latest Latest
Warning

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

Go to latest
Published: Jul 30, 2025 License: BSD-3-Clause Imports: 25 Imported by: 0

Documentation

Index

Constants

View Source
const CodecVersion = 0

CodecVersion is the current default codec version

Variables

View Source
var (
	ErrInvalidDestChain   = errors.New("invalid destination chain")
	ErrInvalidDestAddress = errors.New("invalid destination address")
	ErrInvalidAmount      = errors.New("invalid burn amount")
)
View Source
var (
	ErrNilInitialState  = errors.New("nil initial state is not valid")
	ErrNilFxOutput      = errors.New("nil feature extension output is not valid")
	ErrOutputsNotSorted = errors.New("outputs not sorted")
	ErrUnknownFx        = errors.New("unknown feature extension")
)
View Source
var (
	ErrInvalidSourceChain = errors.New("invalid source chain")
	ErrInvalidBurnProof   = errors.New("invalid burn proof")
	ErrInvalidMintAmount  = errors.New("invalid mint amount")
)
View Source
var (
	ErrInvalidNFTID     = errors.New("invalid NFT ID")
	ErrInvalidRecipient = errors.New("invalid recipient")
	ErrUnsupportedChain = errors.New("unsupported destination chain for NFT")
)
View Source
var (
	ErrNilOperation              = errors.New("nil operation is not valid")
	ErrNilFxOperation            = errors.New("nil fx operation is not valid")
	ErrNotSortedAndUniqueUTXOIDs = errors.New("utxo IDs not sorted and unique")
)

Functions

func IsSortedAndUniqueOperations

func IsSortedAndUniqueOperations(ops []*Operation, c codec.Manager) bool

func SortOperations

func SortOperations(ops []*Operation, c codec.Manager)

func SortOperationsWithSigners

func SortOperationsWithSigners(ops []*Operation, signers [][]*secp256k1.PrivateKey, codec codec.Manager)

Types

type BaseTx

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

BaseTx is the basis of all transactions.

func (*BaseTx) Bytes

func (t *BaseTx) Bytes() []byte

func (*BaseTx) InitCtx

func (t *BaseTx) InitCtx(ctx *consensus.Context)

func (*BaseTx) InputIDs

func (t *BaseTx) InputIDs() set.Set[ids.ID]

func (*BaseTx) SetBytes

func (t *BaseTx) SetBytes(bytes []byte)

func (*BaseTx) Visit

func (t *BaseTx) Visit(v Visitor) error

type BurnTx

type BurnTx struct {
	// Base transaction fields
	BaseTx `serialize:"true"`

	// Asset being burned
	AssetID ids.ID `serialize:"true" json:"assetID"`

	// Amount to burn
	Amount uint64 `serialize:"true" json:"amount"`

	// Destination chain ID
	DestChain ids.ID `serialize:"true" json:"destChain"`

	// Destination address (chain-specific format)
	DestAddress []byte `serialize:"true" json:"destAddress"`

	// Optional metadata for the transfer
	TeleportData []byte `serialize:"true" json:"teleportData"`
}

BurnTx burns assets on X-Chain for cross-chain transfers via Teleport Protocol

func (*BurnTx) InitCtx

func (t *BurnTx) InitCtx(ctx *consensus.Context)

func (*BurnTx) Visit

func (t *BurnTx) Visit(v Visitor) error

type CreateAssetTx

type CreateAssetTx struct {
	BaseTx       `serialize:"true"`
	Name         string          `serialize:"true" json:"name"`
	Symbol       string          `serialize:"true" json:"symbol"`
	Denomination byte            `serialize:"true" json:"denomination"`
	States       []*InitialState `serialize:"true" json:"initialStates"`
}

CreateAssetTx is a transaction that creates a new asset.

func (*CreateAssetTx) InitCtx

func (t *CreateAssetTx) InitCtx(ctx *consensus.Context)

func (*CreateAssetTx) InitialStates

func (t *CreateAssetTx) InitialStates() []*InitialState

InitialStates track which virtual machines, and the initial state of these machines, this asset uses. The returned array should not be modified.

func (*CreateAssetTx) Visit

func (t *CreateAssetTx) Visit(v Visitor) error

type ExportTx

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

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

	// The outputs this transaction is sending to the other chain
	ExportedOuts []*lux.TransferableOutput `serialize:"true" json:"exportedOutputs"`
}

ExportTx is a transaction that exports an asset to another blockchain.

func (*ExportTx) InitCtx

func (t *ExportTx) InitCtx(ctx *consensus.Context)

func (*ExportTx) Visit

func (t *ExportTx) Visit(v Visitor) error

type ImportTx

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

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

	// The inputs to this transaction
	ImportedIns []*lux.TransferableInput `serialize:"true" json:"importedInputs"`
}

ImportTx is a transaction that imports an asset from another blockchain.

func (*ImportTx) InputIDs

func (t *ImportTx) InputIDs() set.Set[ids.ID]

func (*ImportTx) InputUTXOs

func (t *ImportTx) InputUTXOs() []*lux.UTXOID

InputUTXOs track which UTXOs this transaction is consuming.

func (*ImportTx) NumCredentials

func (t *ImportTx) NumCredentials() int

NumCredentials returns the number of expected credentials

func (*ImportTx) Visit

func (t *ImportTx) Visit(v Visitor) error

type InitialState

type InitialState struct {
	FxIndex uint32         `serialize:"true"  json:"fxIndex"`
	FxID    ids.ID         `serialize:"false" json:"fxID"`
	Outs    []verify.State `serialize:"true"  json:"outputs"`
}

func (*InitialState) Compare

func (is *InitialState) Compare(other *InitialState) int

func (*InitialState) InitCtx

func (is *InitialState) InitCtx(ctx *consensus.Context)

func (*InitialState) Sort

func (is *InitialState) Sort(c codec.Manager)

func (*InitialState) Verify

func (is *InitialState) Verify(c codec.Manager, numFxs int) error

type MintTx

type MintTx struct {
	// Base transaction fields
	BaseTx `serialize:"true"`

	// Asset being minted
	AssetID ids.ID `serialize:"true" json:"assetID"`

	// Amount to mint
	Amount uint64 `serialize:"true" json:"amount"`

	// Source chain ID
	SourceChain ids.ID `serialize:"true" json:"sourceChain"`

	// Proof of burn on source chain
	BurnProof []byte `serialize:"true" json:"burnProof"`

	// MPC signatures authorizing the mint
	MPCSignatures [][]byte `serialize:"true" json:"mpcSignatures"`
}

MintTx mints assets on X-Chain from cross-chain transfers via Teleport Protocol

func (*MintTx) InitCtx

func (t *MintTx) InitCtx(ctx *consensus.Context)

func (*MintTx) Visit

func (t *MintTx) Visit(v Visitor) error

type NFTTransferTx

type NFTTransferTx struct {
	// Base transaction fields
	BaseTx `serialize:"true"`

	// NFT being transferred
	NFTTransferOp nftfx.TransferOperation `serialize:"true" json:"nftTransferOp"`

	// Destination chain (usually C-Chain)
	DestChain ids.ID `serialize:"true" json:"destChain"`

	// Recipient address on destination chain
	Recipient []byte `serialize:"true" json:"recipient"`

	// Optional metadata for the transfer
	Metadata []byte `serialize:"true" json:"metadata"`
}

NFTTransferTx transfers NFTs from X-Chain to C-Chain or other subnets This enables NFTs to move from UTXO model (X-Chain) to account model (C-Chain)

func (*NFTTransferTx) InitCtx

func (t *NFTTransferTx) InitCtx(ctx *consensus.Context)

func (*NFTTransferTx) Visit

func (t *NFTTransferTx) Visit(v Visitor) error

type Operation

type Operation struct {
	lux.Asset `serialize:"true"`
	UTXOIDs   []*lux.UTXOID   `serialize:"true"  json:"inputIDs"`
	FxID      ids.ID          `serialize:"false" json:"fxID"`
	Op        fxs.FxOperation `serialize:"true"  json:"operation"`
}

func (*Operation) Verify

func (op *Operation) Verify() error

type OperationTx

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

	Ops []*Operation `serialize:"true" json:"operations"`
}

OperationTx is a transaction with no credentials.

func (*OperationTx) InitCtx

func (t *OperationTx) InitCtx(ctx *consensus.Context)

func (*OperationTx) InputIDs

func (t *OperationTx) InputIDs() set.Set[ids.ID]

func (*OperationTx) InputUTXOs

func (t *OperationTx) InputUTXOs() []*lux.UTXOID

func (*OperationTx) NumCredentials

func (t *OperationTx) NumCredentials() int

NumCredentials returns the number of expected credentials

func (*OperationTx) Operations

func (t *OperationTx) Operations() []*Operation

Operations track which ops this transaction is performing. The returned array should not be modified.

func (*OperationTx) Visit

func (t *OperationTx) Visit(v Visitor) error

type Parser

type Parser interface {
	Codec() codec.Manager
	GenesisCodec() codec.Manager

	CodecRegistry() codec.Registry
	GenesisCodecRegistry() codec.Registry

	ParseTx(bytes []byte) (*Tx, error)
	ParseGenesisTx(bytes []byte) (*Tx, error)
}

func NewCustomParser

func NewCustomParser(
	typeToFxIndex map[reflect.Type]int,
	clock *mockable.Clock,
	log log.Logger,
	fxs []fxs.Fx,
) (Parser, error)

func NewParser

func NewParser(fxs []fxs.Fx) (Parser, error)

type Tx

type Tx struct {
	Unsigned UnsignedTx          `serialize:"true" json:"unsignedTx"`
	Creds    []*fxs.FxCredential `serialize:"true" json:"credentials"` // The credentials of this transaction

	TxID ids.ID `json:"id"`
	// contains filtered or unexported fields
}

Tx is the core operation that can be performed. The tx uses the UTXO model. Specifically, a txs inputs will consume previous txs outputs. A tx will be valid if the inputs have the authority to consume the outputs they are attempting to consume and the inputs consume sufficient state to produce the outputs.

func (*Tx) Bytes

func (t *Tx) Bytes() []byte

Bytes returns the binary representation of this tx

func (*Tx) GossipID

func (t *Tx) GossipID() ids.ID

GossipID returns the unique ID that this tx should use for mempool gossip

func (*Tx) ID

func (t *Tx) ID() ids.ID

ID returns the unique ID of this tx

func (*Tx) Initialize

func (t *Tx) Initialize(c codec.Manager) error

func (*Tx) InputIDs

func (t *Tx) InputIDs() set.Set[ids.ID]

func (*Tx) SetBytes

func (t *Tx) SetBytes(unsignedBytes, signedBytes []byte)

func (*Tx) SignNFTFx

func (t *Tx) SignNFTFx(c codec.Manager, signers [][]*secp256k1.PrivateKey) error

func (*Tx) SignPropertyFx

func (t *Tx) SignPropertyFx(c codec.Manager, signers [][]*secp256k1.PrivateKey) error

func (*Tx) SignSECP256K1Fx

func (t *Tx) SignSECP256K1Fx(c codec.Manager, signers [][]*secp256k1.PrivateKey) error

func (*Tx) Size

func (t *Tx) Size() int

func (*Tx) UTXOs

func (t *Tx) UTXOs() []*lux.UTXO

UTXOs returns the UTXOs transaction is producing.

type UnsignedTx

type UnsignedTx interface {
	consensus.ContextInitializable

	SetBytes(unsignedBytes []byte)
	Bytes() []byte

	InputIDs() set.Set[ids.ID]

	NumCredentials() int
	// TODO: deprecate after x-chain linearization
	InputUTXOs() []*lux.UTXOID

	// Visit calls [visitor] with this transaction's concrete type
	Visit(visitor Visitor) error
}

type Visitor

type Visitor interface {
	BaseTx(*BaseTx) error
	CreateAssetTx(*CreateAssetTx) error
	OperationTx(*OperationTx) error
	ImportTx(*ImportTx) error
	ExportTx(*ExportTx) error
	BurnTx(*BurnTx) error
	MintTx(*MintTx) error
	NFTTransferTx(*NFTTransferTx) error
}

Allow vm to execute custom logic against the underlying transaction types.

Directories

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

Jump to

Keyboard shortcuts

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