wallet

package
v1.16.22 Latest Latest
Warning

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

Go to latest
Published: Dec 5, 2025 License: BSD-3-Clause Imports: 9 Imported by: 0

README

Lux SDK Wallet

Unified wallet implementation for all Lux chains (P, X, C, EVM) with support for both classical and post-quantum cryptography.

Architecture

wallet/
├── crypto/              # Cryptography abstraction layer
│   ├── interface.go     # Unified Signer interface
│   ├── classic/         # Classic crypto (secp256k1, BLS)
│   └── pqc/            # Post-quantum crypto (ML-DSA, ML-KEM, SLH-DSA)
├── chain/              # Chain-specific implementations
│   ├── p/              # P-Chain (Platform) wallet
│   ├── x/              # X-Chain (Exchange) wallet
│   ├── c/              # C-Chain (Contract) wallet
│   └── evm/            # Generic EVM wallet (for subnets like Zoo)
└── primary/            # Unified wallet managing all chains

Supported Cryptography

Classic Cryptography
  • SECP256K1 - Ethereum-compatible elliptic curve
  • SECP256R1 - NIST P-256
  • BLS - BLS12-381 for aggregated signatures
Post-Quantum Cryptography (NIST Standards)
  • ML-DSA (Dilithium replacement)
    • ML-DSA-87 (high security)
    • ML-DSA-65 (medium security)
    • ML-DSA-44 (low security)
  • SLH-DSA (SPHINCS+ replacement)
    • SLH-DSA-256
    • SLH-DSA-192
    • SLH-DSA-128
  • ML-KEM (Kyber replacement) - For key encapsulation
Hybrid Schemes
  • SECP256K1 + ML-DSA-87 - Classic + PQC
  • BLS + ML-DSA-87 - Aggregatable + PQC

Usage

Basic Wallet Creation
import (
    "github.com/luxfi/sdk/wallet"
    "github.com/luxfi/sdk/wallet/crypto"
)

// Create wallet with classic crypto
factory := crypto.NewFactory()
signer, err := factory.NewSigner(crypto.SECP256K1, privateKey)

// Create wallet with post-quantum crypto
pqcSigner, err := factory.NewSigner(crypto.MLDSA87, privateKey)

// Create multi-chain wallet
w, err := wallet.NewPrimary(uri, signer)
Chain-Specific Operations
// P-Chain operations
pWallet := w.P()
tx, err := pWallet.IssueAddValidatorTx(...)

// X-Chain operations
xWallet := w.X()
tx, err := xWallet.IssueBaseTx(...)

// C-Chain operations
cWallet := w.C()
tx, err := cWallet.IssueImportTx(...)

// EVM operations (Zoo, etc.)
evmWallet := w.EVM(chainID)
tx, err := evmWallet.SendTransaction(...)

Post-Quantum Migration

All wallet operations support PQC transparently:

// Same API, different crypto
classicSigner := crypto.NewSigner(crypto.SECP256K1, key)
pqcSigner := crypto.NewSigner(crypto.MLDSA87, pqKey)

// Both work with same wallet interface
wallet1 := wallet.New(uri, classicSigner)
wallet2 := wallet.New(uri, pqcSigner)

Features

  • ✅ Unified interface across all chains
  • ✅ Classic and PQC crypto support
  • ✅ Hardware wallet compatibility
  • ✅ BIP32/BIP44 key derivation
  • ✅ Address format compatibility
  • ✅ Cross-chain operations
  • ✅ Atomic swaps between chains
  • ✅ Fee estimation
  • ✅ Transaction building and signing

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrInsufficientFunds = errors.New("insufficient funds")
	ErrNoUTXOs           = errors.New("no UTXOs available")
	ErrInvalidAddress    = errors.New("invalid address")
)

Functions

This section is empty.

Types

type TransferInput

type TransferInput struct {
	UTXOID  ids.ID
	AssetID ids.ID
	Amount  uint64
}

TransferInput represents an input to a transfer transaction

type TransferOutput

type TransferOutput struct {
	AssetID   ids.ID
	Amount    uint64
	Recipient ids.ShortID
	Locktime  uint64
}

TransferOutput represents an output from a transfer transaction

type TransferTx

type TransferTx struct {
	NetworkID uint32
	ChainID   ids.ID
	Inputs    []TransferInput
	Outputs   []TransferOutput
	Memo      []byte
}

TransferTx represents a transfer transaction

type UTXO

type UTXO struct {
	ID       ids.ID
	AssetID  ids.ID
	Amount   uint64
	Owner    ids.ShortID
	Locktime uint64
}

UTXO represents an unspent transaction output

type Wallet

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

Wallet manages keys and transactions for personal usage

func New

func New(networkID uint32, chainID ids.ID) *Wallet

New creates a new wallet instance

func (*Wallet) AddUTXO

func (w *Wallet) AddUTXO(utxo *UTXO)

AddUTXO adds a UTXO to the wallet

func (*Wallet) CreateTransferTx

func (w *Wallet) CreateTransferTx(
	to ids.ShortID,
	assetID ids.ID,
	amount uint64,
	memo []byte,
) (*TransferTx, error)

CreateTransferTx creates a transfer transaction

func (*Wallet) GenerateKey

func (w *Wallet) GenerateKey() (ids.ShortID, error)

GenerateKey generates a new key and adds it to the wallet

func (*Wallet) GetAddress

func (w *Wallet) GetAddress() (ids.ShortID, error)

GetAddress returns a wallet address

func (*Wallet) GetAllAddresses

func (w *Wallet) GetAllAddresses() []ids.ShortID

GetAllAddresses returns all wallet addresses

func (*Wallet) GetBLSKey

func (w *Wallet) GetBLSKey() (*bls.SecretKey, error)

GetBLSKey returns the BLS key for validator operations

func (*Wallet) GetBalance

func (w *Wallet) GetBalance(assetID ids.ID) uint64

GetBalance returns the balance for a specific asset

func (*Wallet) GetUTXOs

func (w *Wallet) GetUTXOs(assetID ids.ID, amount uint64) ([]*UTXO, uint64, error)

GetUTXOs returns UTXOs for spending

func (*Wallet) ImportKey

func (w *Wallet) ImportKey(privateKey crypto.PrivateKey) (ids.ShortID, error)

ImportKey imports a private key into the wallet

func (*Wallet) RemoveUTXO

func (w *Wallet) RemoveUTXO(utxoID ids.ID)

RemoveUTXO removes a UTXO from the wallet

func (*Wallet) SetBLSKey

func (w *Wallet) SetBLSKey(key *bls.SecretKey)

SetBLSKey sets the BLS key for validator operations

func (*Wallet) Sign

func (w *Wallet) Sign(ctx context.Context, tx chain.Transaction) error

Sign signs a transaction with the wallet's keys

Directories

Path Synopsis
chain
c
p
x
pqc

Jump to

Keyboard shortcuts

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