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

txs

package
v1.37.0 Latest Latest
Warning

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

Go to latest
Published: Sep 7, 2026 License: BSD-3-Clause Imports: 26 Imported by: 0

Documentation

Overview

Package txs is the X-chain (xvm) transaction package for the luxfi/node binary. It owns the native-ZAP struct-is-wire tx codec: the signed-tx envelope (wire.SignedTx), the per-type unsigned bodies keyed by a 1-byte xkind discriminator, and the per-fx Initial-State / Operation accessors the X-VM uses to build, sign, and parse on-chain transactions.

There is no pcodecs.Manager, no linearcodec, and no reflection-driven slot map. Each tx type serializes itself directly onto a github.com/luxfi/zap buffer; polymorphic fx primitives (outputs, inputs, operations, credentials) name themselves on the wire via their (TypeKind, ShapeKind) envelope and are reconstructed by envelope dispatch (fxwire.go).

Package txs is a generated GoMock package.

Index

Constants

This section is empty.

Variables

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 (
	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) bool

func SortOperations

func SortOperations(ops []*Operation)

func SortOperationsWithSigners

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

func UnsignedBytes added in v1.36.4

func UnsignedBytes(u UnsignedTx) ([]byte, error)

UnsignedBytes returns the canonical native-ZAP wire bytes of an unsigned tx, serializing (and caching) them on first use. This is the signing target — every fx signature is computed over hash(unsignedBytes).

Types

type BaseTx

type BaseTx struct {
	lux.BaseTx
	// contains filtered or unexported fields
}

BaseTx is the basis of all transactions. It carries the multi-asset spending envelope (NetworkID/BlockchainID/Outs/Ins/Memo) as an embedded lux.BaseTx — X-Chain is a universal multi-fx settlement layer, so Outs/Ins hold arbitrary fx primitives, not the fixed secp256k1 stride the P-Chain uses. The struct is the source of truth; Bytes() is the cached native-ZAP wire encoding.

Wire (unsigned): zap object { xkind@0, baseTxEnvelope@8 } where the envelope is a wire.XVMBaseTx (each Out/In an fx-typed TransferableOut/In envelope).

func (*BaseTx) Bytes

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

func (*BaseTx) InitRuntime added in v1.24.12

func (t *BaseTx) InitRuntime(rt *runtime.Runtime)

func (*BaseTx) InitializeRuntime added in v1.24.12

func (t *BaseTx) InitializeRuntime(rt *runtime.Runtime) error

InitializeRuntime initializes the context for this transaction

func (*BaseTx) InitializeWithRuntime added in v1.24.12

func (t *BaseTx) InitializeWithRuntime(rt *runtime.Runtime) error

InitializeWithRuntime initializes the transaction with Runtime

func (*BaseTx) InputIDs

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

func (*BaseTx) InputUTXOs added in v1.11.14

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

InputUTXOs returns the UTXOIDs this transaction is consuming

func (*BaseTx) NumCredentials added in v1.11.14

func (t *BaseTx) NumCredentials() int

NumCredentials returns the number of expected credentials

func (*BaseTx) SetBytes

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

func (*BaseTx) Visit

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

type CreateAssetTx

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

CreateAssetTx is a transaction that creates a new asset.

Wire (unsigned): the shared { xkind@0, baseTxEnvelope@8 } prefix, then Name@16 / Symbol@24 (text) + Denomination@32 (u8) + the InitialStates as a packed (length list @36, blob @44) of self-delimiting InitialState objects.

func (*CreateAssetTx) InitRuntime added in v1.24.12

func (t *CreateAssetTx) InitRuntime(rt *runtime.Runtime)

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) InitializeRuntime added in v1.24.12

func (t *CreateAssetTx) InitializeRuntime(rt *runtime.Runtime) error

InitializeRuntime initializes the context for this transaction

func (*CreateAssetTx) InitializeWithRuntime added in v1.24.12

func (t *CreateAssetTx) InitializeWithRuntime(rt *runtime.Runtime) error

InitializeWithRuntime initializes the transaction with Runtime

func (*CreateAssetTx) Visit

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

type ExportTx

type ExportTx struct {
	BaseTx

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

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

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

Wire (unsigned): the shared { xkind@0, baseTxEnvelope@8 } prefix, then DestinationChain@16 (32B) + the exported outputs as a packed (length list @48, blob @56) of self-delimiting wire TransferableOut envelopes.

func (*ExportTx) InitRuntime added in v1.24.12

func (t *ExportTx) InitRuntime(rt *runtime.Runtime)

func (*ExportTx) InitializeRuntime added in v1.24.12

func (t *ExportTx) InitializeRuntime(rt *runtime.Runtime) error

InitializeRuntime initializes the context for this transaction

func (*ExportTx) InitializeWithRuntime added in v1.24.12

func (t *ExportTx) InitializeWithRuntime(rt *runtime.Runtime) error

InitializeWithRuntime initializes the transaction with Runtime

func (*ExportTx) Visit

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

type FxIndex added in v1.36.9

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

FxIndex maps a wire.TypeKind (fx family) to its position in a parser's fx list. Array-backed: Get is one bounds-checked load, no hashing. A slot of -1 means no fx of that family is registered.

func NewFxIndex added in v1.36.9

func NewFxIndex() *FxIndex

NewFxIndex returns an FxIndex with every family unregistered (-1).

func (*FxIndex) Get added in v1.36.9

func (fi *FxIndex) Get(kind wire.TypeKind) (int, bool)

Get returns the fx-list index for `kind`, or (0, false) when unregistered.

func (*FxIndex) GetFx added in v1.36.9

func (fi *FxIndex) GetFx(val interface{}) (int, bool)

GetFx maps a parsed fx value to its fx-list index — the reflection-free replacement for `reflect.TypeOf(val)` + `map[reflect.Type]int`. It reads the value's family via the compile-time-checked fxKindOf match, then indexes.

func (*FxIndex) Set added in v1.36.9

func (fi *FxIndex) Set(kind wire.TypeKind, idx int)

Set records that the fx family `kind` lives at list position `idx`.

type ImportTx

type ImportTx struct {
	BaseTx

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

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

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

Wire (unsigned): the shared { xkind@0, baseTxEnvelope@8 } prefix, then SourceChain@16 (32B) + the imported inputs as a packed (length list @48, blob @56) of self-delimiting wire TransferableIn envelopes.

func (*ImportTx) InitRuntime added in v1.24.12

func (t *ImportTx) InitRuntime(rt *runtime.Runtime)

func (*ImportTx) InitializeRuntime added in v1.24.12

func (t *ImportTx) InitializeRuntime(rt *runtime.Runtime) error

InitializeRuntime initializes the context for this transaction

func (*ImportTx) InitializeWithRuntime added in v1.24.12

func (t *ImportTx) InitializeWithRuntime(rt *runtime.Runtime) error

InitializeWithRuntime initializes the transaction with Runtime

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         `json:"fxIndex"`
	FxID    ids.ID         `json:"fxID"`
	Outs    []verify.State `json:"outputs"`
}

InitialState is the per-fx genesis state a CreateAssetTx installs: an fx index plus that fx's initial output set. Outs is a heterogeneous slice of fx state outputs, each serialized as its own (TypeKind, ShapeKind, ZAP) wire envelope — the FxID is recovered from the envelope's TypeKind, so it is not stored on the wire.

Wire: zap object { FxIndex@0 (u32), Outs (length list @4, blob @12) }.

func (*InitialState) Bytes added in v1.36.4

func (is *InitialState) Bytes() ([]byte, error)

Bytes serializes the InitialState to its self-delimiting native-ZAP wire object. Each output is its fx primitive's own wire envelope.

func (*InitialState) Compare

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

func (*InitialState) InitRuntime added in v1.24.12

func (is *InitialState) InitRuntime(*runtime.Runtime)

func (*InitialState) Sort

func (is *InitialState) Sort()

func (*InitialState) Verify

func (is *InitialState) Verify(numFxs int) error

type MockUnsignedTx added in v1.1.11

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

MockUnsignedTx is a mock of UnsignedTx interface.

func NewMockUnsignedTx added in v1.1.11

func NewMockUnsignedTx(ctrl *gomock.Controller) *MockUnsignedTx

NewMockUnsignedTx creates a new mock instance.

func (*MockUnsignedTx) Bytes added in v1.1.11

func (m *MockUnsignedTx) Bytes() []byte

Bytes mocks base method.

func (*MockUnsignedTx) EXPECT added in v1.1.11

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

func (*MockUnsignedTx) InitRuntime added in v1.24.12

func (m *MockUnsignedTx) InitRuntime(arg0 context.Context)

InitRuntime mocks base method.

func (*MockUnsignedTx) InitializeRuntime added in v1.24.12

func (m *MockUnsignedTx) InitializeRuntime(arg0 context.Context) error

InitializeRuntime mocks base method.

func (*MockUnsignedTx) InputIDs added in v1.1.11

func (m *MockUnsignedTx) InputIDs() set.Set[ids.ID]

InputIDs mocks base method.

func (*MockUnsignedTx) InputUTXOs added in v1.1.11

func (m *MockUnsignedTx) InputUTXOs() []*lux.UTXOID

InputUTXOs mocks base method.

func (*MockUnsignedTx) NumCredentials added in v1.1.11

func (m *MockUnsignedTx) NumCredentials() int

NumCredentials mocks base method.

func (*MockUnsignedTx) SetBytes added in v1.1.11

func (m *MockUnsignedTx) SetBytes(unsignedBytes []byte)

SetBytes mocks base method.

func (*MockUnsignedTx) Visit added in v1.1.11

func (m *MockUnsignedTx) Visit(visitor Visitor) error

Visit mocks base method.

type MockUnsignedTxMockRecorder added in v1.1.11

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

MockUnsignedTxMockRecorder is the mock recorder for MockUnsignedTx.

func (*MockUnsignedTxMockRecorder) Bytes added in v1.1.11

func (mr *MockUnsignedTxMockRecorder) Bytes() *gomock.Call

Bytes indicates an expected call of Bytes.

func (*MockUnsignedTxMockRecorder) InitRuntime added in v1.24.12

func (mr *MockUnsignedTxMockRecorder) InitRuntime(arg0 any) *gomock.Call

InitRuntime indicates an expected call of InitRuntime.

func (*MockUnsignedTxMockRecorder) InitializeRuntime added in v1.24.12

func (mr *MockUnsignedTxMockRecorder) InitializeRuntime(arg0 any) *gomock.Call

InitializeRuntime indicates an expected call of InitializeRuntime.

func (*MockUnsignedTxMockRecorder) InputIDs added in v1.1.11

func (mr *MockUnsignedTxMockRecorder) InputIDs() *gomock.Call

InputIDs indicates an expected call of InputIDs.

func (*MockUnsignedTxMockRecorder) InputUTXOs added in v1.1.11

func (mr *MockUnsignedTxMockRecorder) InputUTXOs() *gomock.Call

InputUTXOs indicates an expected call of InputUTXOs.

func (*MockUnsignedTxMockRecorder) NumCredentials added in v1.1.11

func (mr *MockUnsignedTxMockRecorder) NumCredentials() *gomock.Call

NumCredentials indicates an expected call of NumCredentials.

func (*MockUnsignedTxMockRecorder) SetBytes added in v1.1.11

func (mr *MockUnsignedTxMockRecorder) SetBytes(unsignedBytes any) *gomock.Call

SetBytes indicates an expected call of SetBytes.

func (*MockUnsignedTxMockRecorder) Visit added in v1.1.11

func (mr *MockUnsignedTxMockRecorder) Visit(visitor any) *gomock.Call

Visit indicates an expected call of Visit.

type Operation

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

Operation runs a single fx operation (mint / NFT transfer / property burn) over a set of consumed UTXOs of a given asset.

Wire: zap object { Asset@0 (32B), UTXOIDs@32 (36B-stride list), Op@40 (the fx operation's own (TypeKind, ShapeKind, ZAP) envelope) }. FxID is recovered from the Op envelope's TypeKind, so it is not stored on the wire.

func (*Operation) Bytes added in v1.36.4

func (op *Operation) Bytes() ([]byte, error)

Bytes serializes the Operation to its self-delimiting native-ZAP wire object.

func (*Operation) Verify

func (op *Operation) Verify() error

type OperationTx

type OperationTx struct {
	BaseTx

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

OperationTx is a transaction that runs a set of fx operations over existing UTXOs (mint / NFT transfer / property burn ...).

Wire (unsigned): the shared { xkind@0, baseTxEnvelope@8 } prefix, then the Operations as a packed (length list @16, blob @24) of self-delimiting Operation objects.

func (*OperationTx) InitRuntime added in v1.24.12

func (t *OperationTx) InitRuntime(rt *runtime.Runtime)

func (*OperationTx) InitializeRuntime added in v1.24.12

func (t *OperationTx) InitializeRuntime(rt *runtime.Runtime) error

InitializeRuntime initializes the context for this transaction

func (*OperationTx) InitializeWithRuntime added in v1.24.12

func (t *OperationTx) InitializeWithRuntime(rt *runtime.Runtime) error

InitializeWithRuntime initializes the transaction with Runtime

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 {
	ParseTx(bytes []byte) (*Tx, error)
	ParseGenesisTx(bytes []byte) (*Tx, error)
}

func NewCustomParser

func NewCustomParser(
	fxIndex *FxIndex,
	clock *mockable.Clock,
	logger log.Logger,
	fxList []fxs.Fx,
) (Parser, error)

func NewParser

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

type Tx

type Tx struct {
	Unsigned UnsignedTx          `json:"unsignedTx"`
	Creds    []*fxs.FxCredential `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.

A signed tx is a wire.SignedTx envelope: the unsigned tx bytes (which carry the xkind discriminator at offset 0) followed by a packed list of fx credential envelopes. There is no codec.

func Parse added in v1.36.4

func Parse(signedBytes []byte) (*Tx, error)

Parse decodes a signed X-chain tx from its wire bytes. It is the codec-free, parser-instance-free entry point used by the block layer and any consumer holding raw tx bytes; fx credential dispatch is envelope-based (stateless).

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() error

Initialize binds the tx's cached bytes and TxID from its Unsigned tx and Creds. Used for txs built fresh in-process (wallet, block builder).

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(signers [][]*secp256k1.PrivateKey) error

func (*Tx) SignPropertyFx

func (t *Tx) SignPropertyFx(signers [][]*secp256k1.PrivateKey) error

func (*Tx) SignSECP256K1Fx

func (t *Tx) SignSECP256K1Fx(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 {
	SetBytes(unsignedBytes []byte)
	Bytes() []byte

	InputIDs() set.Set[ids.ID]

	NumCredentials() int
	InputUTXOs() []*lux.UTXOID

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

func ParseUnsignedTx added in v1.36.4

func ParseUnsignedTx(unsignedBytes []byte) (UnsignedTx, error)

ParseUnsignedTx decodes native-ZAP unsigned-tx bytes (as produced by UnsignedBytes) back into the concrete UnsignedTx, dispatching on the xkind discriminator. Used by the X-Chain genesis wire to re-hydrate each GenesisAsset's embedded CreateAssetTx.

type Visitor

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

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

Directories

Path Synopsis
mempoolmock
Package mempoolmock is a generated GoMock package.
Package mempoolmock is a generated GoMock package.
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