58 Commits
Author SHA1 Message Date
zeekay d6d5029ffb fix(deps): correct moved-tag hashes for luxfi modules in go.sum
Several luxfi versions carry TWO different contents across this workspace,
because published tags were moved instead of a new patch being cut:
age@v1.5.0, pq@v1.0.3, threshold@v1.9.4, zap@v0.6.0, zap@v0.8.1.

Adjudicated before editing, since "checksum mismatch / SECURITY ERROR" is also
what a real supply-chain attack looks like. It is not one here: sum.golang.org
holds the OLD hash while proxy.golang.org and a direct fetch BOTH serve the same
NEW bytes. Two independent transports agreeing means nothing is rewriting
content in flight — the tag moved at source. The sumdb entry is a fossil:
GOPRIVATE covers github.com/luxfi/* with GOSUMDB=off, so our own modules never
consult the checksum DB and a moved tag splits consumers silently.

The old bytes are served by nothing now, so a stale pin can never build.
Corrected to the only content that exists, in BOTH line forms (h1: and
/go.mod h1:) — Go reports these one at a time, so a partial fix just relocates
the error.

Deliberately no `go mod tidy`: this changes no selected version, only the
recorded hash of versions already chosen.

Verified: `go list -m all` resolves with no checksum error.

The durable fix is upstream: never move a published tag, cut x.y.z+1 instead.
2026-07-26 02:42:51 -07:00
zeekay 6c71523404 chore(deps): bump geth v1.20.1 + luxfi deps — stack unification v0.5.8 2026-07-15 11:12:36 -07:00
zeekayandHanzo Dev 88092f354c deps: zap v1.2.4 — eager-reserve + value ObjectBuilder (X-tx wire build 922->655ns)
Byte-identical wire; all 11 fx round-trip suites green. Composite build now
655ns/5allocs (from 922/11 at zap v1.2.3).

Co-authored-by: Hanzo Dev <dev@hanzo.ai>
v0.5.7
2026-07-14 09:35:08 -07:00
zeekayandHanzo Dev 40d500f6dd wire: export AppendTransferable{Out,In} + TransferableXFromObject
So node ExportTx/ImportTx nest their extra outs/ins as native object-ptr lists
the SAME way XVMBaseTx does — one way to nest a transferable, no standalone
envelope. XVMBaseTx switched to the exported names internally.

Co-authored-by: Hanzo Dev <dev@hanzo.ai>
v0.5.6
2026-07-14 06:35:46 -07:00
zeekayandHanzo Dev b1055294a2 wire: native-nested XVMBaseTx (AddObjectPtr object lists) — 2.8x faster X-tx build
Replace the byte-blob composite (per-container TypeKind/ShapeKind prefix +
OutsBytes/InsBytes concat + parallel u32 length lists) with native ZAP nesting:
XVMBaseTx carries Outs/Ins as AddObjectPtr object-lists, each element a
TransferableOut/In OBJECT living inline in the same buffer. The fx-agnostic
container needs no prefix (fx polymorphism stays on the inner Output/Input
envelope's discriminator, stored zero-copy in the leaf bytes field). Needs zap
v1.2.3 (List.ObjectPtr).

Composite 2in/2out money-move build (vs prior wire):
  v0.5.2 byte-blob:      2551ns / 5328B / 37 allocs
  v0.5.4 pooled+fixed:   1345ns / 2401B / 19 allocs
  v0.5.5 native-nested:  ~913ns / 1328B / 11 allocs   (2.8x / 4x mem / 3.4x allocs vs v0.5.2)

Fully general — all 11 fx round-trip suites green (secp/ed25519/mldsa/slhdsa/
secp256r1/schnorr/bls/nft/property + wire). NewXVMBaseTx now takes
XVMTransferOut/In (AssetID + inner envelope) directly; standalone
NewTransferableOut/In + WrapTransferableOut/In envelopes are gone (they only
ever nested). The remaining 11 allocs are the 4 leaf .Bytes() envelopes + slices;
leaf-inline (per-fx AppendObject) is the zero-alloc follow-up.

Co-authored-by: Hanzo Dev <dev@hanzo.ai>
v0.5.5
2026-07-14 06:33:40 -07:00
zeekayandHanzo Dev 542c597c19 lint: fix remaining 3 math.Mul64 (secp256k1fx/secp256r1fx/slhdsafx)
golangci-lint's max-same-issues:3 truncated the CI display to 3 of 6 Mul64
sites; v0.5.2 fixed the 3 shown, these are the 3 suppressed ones. All safemath
Mul64/Add64 now use the generic math.Mul/Add. CI lint job now clean (the 3
residual staticcheck findings are Go-1.26 crypto-coordinate deprecations in
secp256r1fx/keychain.go that golangci-lint v2.1.6 does not flag; crypto/ecdh
refactor tracked separately). 11/11 packages pass.

Co-authored-by: Hanzo Dev <dev@hanzo.ai>
v0.5.4
2026-07-13 03:50:52 -07:00
zeekayandHanzo Dev 8c27b47bdf wire: pool builders + SetBytesFixed for IDs — 1.9x faster X-tx composition
Write-path hot fix across all 21 wire constructors:
- zap.NewBuilder(capEstimate) -> zap.GetBuilder()/defer PutBuilder: recycle the
  Builder + its grown backing array (needs zap v1.2.2). All 21 return
  writeEnvelopePrefix(...b.Finish()), which COPIES out before the deferred Put,
  so pooling is safe.
- 7 per-byte ID loops (for i<32 { SetUint8(off+i, id[i]) }) -> one SetBytesFixed
  memcpy (TxID/AssetID/BlockchainID in utxo, transferable, xvm_base_tx;
  AttestedHash in attestation).
- rides zap v1.2.2's zero-copy SetBytes (no per-field heap copy).

Composite X-chain money-move (2out+2in, secp256k1fx) wire build:
2551ns/5328B/37allocs -> 1345ns/2401B/19allocs (1.9x faster, 2.2x less mem,
48% fewer allocs). Byte output UNCHANGED — full round-trip suite (11 pkgs) green.

Co-authored-by: Hanzo Dev <dev@hanzo.ai>
v0.5.3
2026-07-13 03:43:05 -07:00
zeekayandHanzo Dev 6efa1285f9 lint: clean all 21 staticcheck findings — CI green, drop last codec reference
- SA1019: math.Mul64/Add64 -> generic math.Mul/Add (ed25519fx, mldsafx,
  schnorrfx inputs; flow_checker; utxo_fetching); prefixdb.NewNested -> New (alias)
- unused: DELETE dead codecVersion const (last codec reference in utxo — full
  ZAP native now), isSortedAndUniqueOrdered (root + secp256k1fx), mldsafx
  Keychain.get, and all 6 redundant TransferOutput.isState() markers (the
  embedded verify.IsState already provides State membership)
- QF1008: drop embedded-field selectors (utxo_wire, ed25519fx, nftfx,
  propertyfx + tests); ST1005: lowercase Schnorr error string

Behavior-identical; 11/11 packages pass.

Co-authored-by: Hanzo Dev <dev@hanzo.ai>
v0.5.2
2026-07-12 22:32:45 -07:00
zeekayandHanzo Dev f106a1abb9 wire: TransferableOut/In envelopes (AssetID + inner fx) — multi-asset XVMBaseTx
X-Chain is multi-asset, but XVMBaseTx.OutAt/InAt returned bare fx
TransferOutput/TransferInput with no AssetID. Add the reserved cross-fx
envelopes TransferableOut (ShapeKindTransferableOut=0x0B) and
TransferableIn (ShapeKindTransferableIn=0x0C) in wire/transferable.go,
mirroring wire/utxo.go's AssetID+Output layout, and rewire OutAt/InAt to
return them so callers recover the per-out/per-in AssetID (and, for
inputs, the spent UTXOID).

- TransferableOut: AssetID 32B @0, Output bytes @32 (size 40);
  TypeKindReserved + ShapeKindTransferableOut.
- TransferableIn: TxID 32B @0, OutputIndex u32 @32, AssetID 32B @36,
  Input bytes @68 (size 76); TypeKindReserved + ShapeKindTransferableIn.
- Both Wrap* reject trailing bytes (msg.Size()!=len) via ErrTrailingBytes,
  matching the proven node block/blockwire.go ErrExtraSpace canonical gate.
- NewXVMBaseTx unchanged (Outs/Ins are pre-built envelopes).

Co-authored-by: Hanzo Dev <dev@hanzo.ai>
v0.5.1
2026-07-11 23:13:51 -07:00
zeekayandHanzo Dev 1ef876c1ed wire: nftfx + propertyfx envelopes (TypeKindNFT/Property + 6 shapes)
Completes the fx wire for the two application fx families so xvm can go
struct-is-wire (LP-023): TypeKindNFT=0x08, TypeKindProperty=0x09; shapes
NFTMintOutput=0x10, NFTTransferOutput=0x11, NFTMintOperation=0x13,
NFTTransferOp=0x14, OwnedOutput=0x15, BurnOperation=0x16 (appended; bare-
owners property MintOutput + credentials reuse the shared shapes). fx-side
Bytes()/Wrap* per type in nftfx/wire.go + propertyfx/wire.go following the
secp256k1fx/wire.go template. NEW wire.NextEnvelope: the ONE packed-envelope
walker (SignedTx creds / XVMBaseTx outs-ins / nft mint owners all use the
same split rule). Round-trip + cross-shape-confusion tests green.

Co-authored-by: Hanzo Dev <dev@hanzo.ai>
2026-07-11 17:55:06 -07:00
zeekayandHanzo Dev 2a0077bde9 fix(deps): repair vanished pins / go.sum drift ( core-bump@latest pq@v1.1.0) + build green
Co-authored-by: Hanzo Dev <dev@hanzo.ai>
v0.5.0 v0.4.0
2026-06-30 14:12:43 -07:00
zeekay 49aecb55f7 Merge branch 'bump/luxdb-v1.19.3' 2026-06-30 14:11:53 -07:00
bfec6da9d7 chore: bump luxfi/database v1.19.3 (#2)
Co-authored-by: zeekay <z@zeekay.io>
2026-06-25 15:24:18 -07:00
zeekay 20e4e03229 chore: bump luxfi/database v1.19.3 2026-06-25 13:06:02 -07:00
Antje WorringandHanzo Dev c4230df92c docs: tidy LLM.md indexes; CLAUDE.md -> LLM.md symlink convention
Co-authored-by: Hanzo Dev <dev@hanzo.ai>
2026-06-17 09:56:57 -07:00
zeekay 2dec8ce94d deps: update to latest real-semver, drop local replaces, fix breaks 2026-06-11 09:09:32 -07:00
Hanzo AI b0e7090a3b go: 1.26.3 → 1.26.4 (security: crypto/x509, mime, net/textproto) 2026-06-06 22:10:16 -07:00
Hanzo AI c635c61804 deps: bump luxfi/vm v1.2.0, sampler v1.1.0, staking v1.5.0 (relicense)
Picks up the 2026-06-06 relicensing:
- luxfi/vm v1.2.0 → Lux Ecosystem License v1.2 (was Lux Research v1.0).
  License-only retag of the extracted runtime; patent reservation
  preserved for runtime optimization surfaces, royalty-free for
  Descending Chains.
- luxfi/sampler v1.1.0 → BSD-3-Clause (was Lux Research v1.0).
  License restored to match the luxfi/node provenance (originally
  extracted from node/utils/sampler).
- luxfi/staking v1.5.0 → BSD-3-Clause (was Lux Research v1.0).
  License restored to match the luxfi/node provenance.

No code changes in this commit — go.mod/go.sum only.
2026-06-06 19:01:36 -07:00
Hanzo AI c3d25292c1 test: TestAddressable.Bytes for ZAP-native UTXO.WireBytes contract
UTXO.WireBytes now requires Out to satisfy the wireSerializable interface
(Bytes() []byte) for ZAP-native envelope construction. TestAddressable
gains an opaque Bytes() that returns Val||Addrs so xvm state tests that
exercise the addressable path compile and pass without crossing into the
production fxs envelope path.
2026-06-06 18:00:44 -07:00
Hanzo AI e99faa8687 deps: bump p2p/node/sdk/vm to current floors (Wave 2G-Cascade)
Drops codec/jsonrpc transitive (p2p v1.19.2 -> v1.21.1).
2026-06-06 06:16:34 -07:00
Hanzo AI 28893d5c53 wire: expose PeekDiscriminator for composite-shape dispatchers
LockedOutput (ShapeKind 0x0F) is the cross-fx wrapper that stakeable
LockOut writes for any allocation with a future locktime. Its TypeKind
is Reserved (0x00) because the lock is fx-agnostic; the inner
TransferOutBytes carries its own (TypeKind, ShapeKind) prefix for the
actual fx family's TransferOutput.

The luxd-side dispatcher in node/vms/components/lux/utxo_parser.go
needs to recurse on that inner envelope to reconstruct the
*stakeable.LockOut. The recursion entry-point requires reading the
inner discriminator without committing to a Wrap* — but
readEnvelopePrefix is unexported.

PeekDiscriminator is the public, allocation-free read for that case.
Returns (TypeKind, ShapeKind, error) and reuses readEnvelopePrefix so
the parser stays a single chokepoint.

This is the wire-side half of the locked-output dispatcher fix. The
node-side half (RegisterLockedOutputHandler + recursion) is in
luxfi/node — without that, every locked allocation UTXO on
mainnet/testnet/devnet P-chain decodes as "unknown
(TypeKind=0x00, ShapeKind=0x0F)" and silently disappears from
getBalance, leaving every vesting-funded address showing 0 LUX even
when locktimes have already past.
2026-06-04 22:10:49 -07:00
Hanzo AI 3dc2964ed2 refactor(fx): TestVM.Clk pointer + nil-safe Logger guard
- secp256k1fx.TestVM.Clk: change from value to pointer so test cases
  can share a single clock without copy. Clock() returns vm.Clk
  directly (nil if unset; tests that exercise time set it).
- secp256k1fx.Fx.Initialize: guard against nil Logger before IsZero()
  check. Previously panicked when VM had no logger; now noops cleanly.
- nftfx, propertyfx, secp256k1fx tests + benches: construct TestVM
  with explicit &mockable.Clock{}.
2026-06-04 17:06:07 -07:00
Hanzo AI 2b50feeb2b wire: add ShapeKindLockedOutput + LockedOutput envelope
Adds canonical wire schema for stakeable.LockOut so the platformvm fx
primitive can satisfy WireSerializable (Bytes() []byte).

Carries (Locktime uint64, TransferOutBytes []byte) — TypeKind is Reserved
(fx-agnostic; inner envelope carries its own fx TypeKind), ShapeKind is
LockedOutput (0x0F). Consumers dispatch into the inner TransferOutput
envelope via WrapTransferOutput.

Unblocks P-Chain syncGenesis on mainnet/testnet when allocations have
unlockSchedule entries after genesis ts (which is every Lux mainnet
allocation today — Dec 2024/2025 unlocks > Oct 2024 ts).

Verified: local luxd boot prints canonical mainnet C-Chain block 0 hash
0x3f4fa2a0b0ce089f52bf0ae9199c75ffdd76ecafc987794050cb0d286f1ec61e.
2026-06-04 15:51:47 -07:00
Hanzo AI 9391ed2242 fxs: strip linearcodec from tests + drop luxfi/codec direct dep
Completes the second cut of FINAL_RIP.md. The first cut (fb7b343) dropped
the codec.Registry field from each fx's VM interface and the public API
codec.Manager params. This cut removes the remaining test-side residue:

- Strip `linearcodec.NewDefault()` Codec field literals from every TestVM
  (the field no longer exists on TestVM).
- Drop the obsolete `TestCredentialSerialize`, `TestTransferInputSerialize`,
  and `TestOutputSerialize` tests in secp256k1fx — they asserted the
  legacy linearcodec wire-byte format. ZAP-native round-trips are covered
  in wire/wire_test.go and the per-fx wire_test.go files.
- `go mod edit -droprequire github.com/luxfi/codec` + tidy — codec is now
  indirect-only (transitively required via github.com/luxfi/vm for the
  verify.State interface).

Build + test clean across all 11 packages. ZAP-native at the activation
boundary 2025-12-25T16:20:00-08:00.
2026-06-03 12:33:04 -07:00
Hanzo AI fb7b343e95 feat: drop CodecRegistry + codec.Manager from public API — ZAP-native at activation 2025-12-25T16:20:00-08:00 2026-06-03 11:04:36 -07:00
Hanzo AI 39a7cdb2f1 feat: ZAP-native wire schemas — activation 2025-12-25T16:20:00-08:00
Adds github.com/luxfi/utxo/wire package + per-fx wire.go adapters so
that luxfi/node's vms/{platformvm,xvm}/txs/codec.go can be deleted.

wire/ package mirrors luxfi/node/vms/wire — every fxs primitive carries
a (TypeKind, ShapeKind) discriminator pair on its wire envelope, then
a ZAP message describing its fields. Decomposes the legacy
codec.Manager slot map (which braided "fx family" and "primitive shape"
into a single dense uint32 slot id) into two orthogonal 1-byte tags.

PQ-specific schemas (pq_output_owners, pq_transfer_output,
pq_mint_output) handle the mldsafx/slhdsafx case where addresses are
full PQ pubkeys (1312-2592 bytes) rather than 20-byte hashed ShortIDs.
The wire layer is stride-agnostic — the per-fx wire.go resolves
SecurityLevel → pubkey stride before parsing.

Per-fx wire.go adapters provide (value T).Bytes() []byte (Go type →
wire envelope) and Wrap*(b []byte) (*T, error) (wire envelope → Go
type). The Initialize(vm)/codec.Manager.RegisterType chain stays in
place pending downstream coordination; this commit gets the wire/
package + adapters in so consumer agents (platformvm/warp,
platformvm/state, xvm) can pin a SHA and start their migrations.

UTXO.WireBytes() builds the outer envelope by calling the polymorphic
Out's Bytes() (any fxs primitive implementing wireSerializable).
WrapUTXOBytes(b) parses the outer envelope; the inner output is
dispatched by the caller via OutputDiscriminator() → fx-package
WrapTransferOutput / WrapMintOutput / WrapAttestationOutput.

Tests: 35 round-trip tests across 9 packages. go vet clean. go test
-race clean. gofmt clean.

Activation: 2025-12-25T16:20:00-08:00 (unix 1766708400). No
backwards compat — pre-activation legacy codec blobs are a
protocol-violation reject after activation.
2026-06-03 09:34:23 -07:00
Hanzo AI fd7ec4890d fix: gofmt -s across repo (CI format check) 2026-06-02 11:39:11 -07:00
Hanzo AI d828ba3dbe chore: brand-neutral cleanup — remove cross-tenant references 2026-05-25 15:12:43 -07:00
Hanzo AI 3ff09caea5 ci: add Go test+lint workflow (ubuntu+macos, go 1.26.3) 2026-05-25 10:31:06 -07:00
Hanzo AI bb56be5530 utxo: strip Eth/Keccak aliases — EVMAddrs / EVMAddresses() / GetByEVM only
Forward-only per user "no aliases!!! just keep evm address and utxo address"
and CLAUDE.md "no backwards compatibility only forwards perfection".

Removed from secp256k1fx.Keychain:
- KeccakAddrs / EthAddrs fields (were Deprecated aliases sharing map)
- KeccakAddresses() / EthAddresses() methods (were Deprecated)
- GetByKeccak() / GetEth() methods (were Deprecated)
- private keccakAddrToKeyIndex (renamed evmAddrToKeyIndex)
- private luxAddrToKeyIndex (renamed utxoAddrToKeyIndex — was already
  UTXO data but the naming braided in the brand)

Canonical surface (the only API):
- Addrs       set.Set[ids.ShortID]            — UTXO-native ShortIDs
- EVMAddrs    set.Set[gethcommon.Address]     — EVM-runtime 20-byte addrs
- Addresses() set.Set[ids.ShortID]            — keychain.Keychain interface
- EVMAddresses() set.Set[gethcommon.Address]
- Get(ShortID) — UTXO-side lookup
- GetByEVM(gethcommon.Address) — EVM-side lookup
- Add(*PrivateKey) — populates both sides

Downstream callers across cli, kms, mpc, state must update to use
EVMAddrs / EVMAddresses() / GetByEVM only. Lockstep break-fix in
this wave.

Deps: crypto v1.19.15 → v1.19.16 (matches crypto's alias-strip).

Per CLAUDE.md x.x.x+1.
2026-05-23 23:55:45 -07:00
Hanzo AI 32d3c529c9 utxo: reconcile — EVMAddrs / EVMAddresses() / GetByEVM canonical
The user's call: utxo and keccak are orthogonal axes. UTXO is a data
model; Keccak is a hash primitive. They don't belong in the same name.
The previous v0.3.1 \"KeccakAddrs\" naming conflated derivation
primitive with semantic purpose.

What the second address set on a secp256k1fx Keychain IS:
- A 20-byte account address used by EVM-runtime chains
- Internally derived via Keccak256, but that's HOW it's computed,
  not WHAT it is

In a multi-chain keychain the relevant contrast is UTXO data model
(Addrs, ShortID, hash160-derived) vs EVM data model (EVMAddrs,
20-byte, Keccak-derived). Naming by data model = decomplect by axis.

Renames (canonical now matches the state team's evmAddr convention):
- Field EVMAddrs is canonical
- KeccakAddrs and EthAddrs retained as Deprecated aliases sharing
  the SAME underlying map (set.Set is a map type — reference semantics)
- Method EVMAddresses() is canonical
- KeccakAddresses() and EthAddresses() Deprecated aliases delegate
- Method GetByEVM is canonical
- GetByKeccak and GetEth Deprecated aliases delegate
- Private field evmAddrToKeyIndex (was keccakAddrToKeyIndex)

All three names work today; downstream callers migrate at their
own pace. Bumped crypto v1.19.13 → v1.19.15 to consume the parallel
crypto reconcile (EVMAddress canonical on PrivateKey / PublicKey).

Per CLAUDE.md x.x.x+1.
2026-05-23 22:07:58 -07:00
Hanzo AI a49ac47bd9 utxo: decomplect — secp256k1fx Keychain eth* → Keccak
Wave 1 of the workspace-wide eth* naming purge tracked from
crypto v1.19.13. Same Rich Hickey decomplect principle: name
primitives after the VALUE (the Keccak-256 hash of the secp256k1
pubkey), not the BRAND (Ethereum) of one downstream consumer.

Renames:
- Public field `EthAddrs` → `KeccakAddrs` (canonical)
- Public method `EthAddresses()` → `KeccakAddresses()` (canonical)
- Public method `GetEth()` → `GetByKeccak()` (canonical)
- Private field `ethAddrToKeyIndex` → `keccakAddrToKeyIndex`
- Local var `ethAddr` → `keccakAddr`

Deprecated aliases retained (no breakage for downstream callers
across mpc, cli, kms, state, node):
- `EthAddrs` field shares the SAME underlying map as KeccakAddrs
  (set.Set is a map type — reference semantics). Add via either
  field visible from both. Single write at `Add()` updates both.
- `EthAddresses()` method delegates to KeccakAddresses
- `GetEth()` method delegates to GetByKeccak

All marked `// Deprecated:` so linter flags downstream migrations.

Side effects:
- go.mod: bumped luxfi/compress, luxfi/metric, luxfi/p2p, luxfi/vm
  and others to current versions (pre-existing v0.0.2 of compress
  had an undefined metric.NewOptimizedCounter / zstd.Level error
  blocking the build).
- luxfi/crypto bumped to v1.19.13 to consume the upstream
  decomplect (KeccakAddress on secp256k1.PrivateKey/PublicKey).

Per CLAUDE.md x.x.x+1.
2026-05-23 19:28:05 -07:00
Hanzo DevandGitHub ab90690bba Merge pull request #1 from luxfi/licensing/canonical-pointer
docs: add LICENSING.md pointer to canonical Lux IP strategy
2026-05-15 16:44:05 -07:00
Hanzo Dev 9027573ea3 docs: add LICENSING.md pointing at canonical Lux IP strategy
Single LICENSING.md file referencing the canonical three-tier IP and
licensing strategy at github.com/luxfi/.github/blob/main/profile/README.md.

LICENSE file is unchanged; this only adds a navigational pointer.
2026-05-15 16:43:59 -07:00
Hanzo AI 5a5e2941a6 deps: luxfi/crypto v1.19.0 2026-05-13 11:57:47 -07:00
Hanzo AI 3106d3fbfc go.mod: bump go directive to 1.26.3 (security advisory) 2026-05-12 21:31:55 -07:00
Hanzo AI 5f82126db7 deps: tidy go.sum (clean fetch) 2026-05-05 16:54:26 -07:00
Hanzo AI 9667fd669c utxo/LLM.md: T-Chain → M-Chain per LP-134 2026-05-05 16:54:19 -07:00
Hanzo AI 90a868e23b feat: add BLS12-381 FX implementation 2026-04-19 17:07:57 -07:00
Hanzo AI 834eb8543d deps: bump luxfi/crypto to v1.17.56 for SignCtx/VerifySignatureCtx 2026-04-13 07:36:02 -07:00
Hanzo AI 2b30fa0048 feat: add ed25519fx, schnorrfx, secp256r1fx, slhdsafx + mldsafx updates
Adds four new Fx (feature-extension) packages for X-Chain UTXO signing
schemes beyond secp256k1:
  - ed25519fx    — Ed25519 (EdDSA on Curve25519)
  - schnorrfx    — Schnorr (classical)
  - secp256r1fx  — P-256 / NIST
  - slhdsafx     — SLH-DSA (FIPS 205 hash-based PQ)

Plus mldsafx updates to match (ML-DSA / FIPS 204 lattice PQ).

Each fx package exports Fx, Credential, Keychain, OutputOwners, Input
following the existing secp256k1fx pattern.

Gitignore .DS_Store.
2026-04-13 07:33:34 -07:00
Hanzo AI f84a291c6a feat: add InitRuntime forwarder on TransferableInput
Required by node consumers (platformvm, xvm) that delegate a runtime
context down to feature-extension input types. No-op for inputs that
do not implement the runtime-aware interface.

Brings parity with the in-tree node/vms/components/lux/transferables.go
that this package supersedes.
v0.2.7
2026-04-13 06:48:31 -07:00
Hanzo AI 566a3f4fed feat: complete mldsafx — ML-DSA-65 PQ signing for X-Chain UTXO 2026-04-13 05:34:03 -07:00
Hanzo AI 4ef60fb2b0 fix: resolve X/C chain aliases from Runtime fields when BCLookup fails v0.2.6 2026-04-01 18:42:19 -07:00
Hanzo AI 37dde5f62f fix: ParseAddress resolves chain aliases via BCLookup
The ParseAddress method tried ids.FromString on chain aliases like
'X' which fails for short aliases. Now uses Runtime.BCLookup.Lookup()
first to resolve aliases to blockchain IDs, falling back to raw ID
parsing for full CB58 chain IDs.
v0.2.5
2026-04-01 16:51:53 -07:00
Hanzo AI a03e498502 chore: symlink AGENTS.md and CLAUDE.md to LLM.md
Canonical project context lives in LLM.md. Symlinks ensure
agentic coding tools (agent, Cursor, etc.) find context
automatically regardless of which filename they look for.
2026-04-01 14:10:07 -07:00
Hanzo Dev 64ec5944ff chore: bump Go 1.26.0 → 1.26.1
Fixes 5 stdlib CVEs (html/template, os, net/url, crypto/x509 x2).
2026-03-12 01:10:48 -07:00
Hanzo Dev b097cc7f3a docs: add LLM.md project guide 2026-03-11 10:36:37 -07:00
Hanzo Dev 9e70b4dc99 chore: update Go module dependencies 2026-03-03 11:22:45 -08:00
Zach Kelling 919ebecbf4 chore: add BSD-3-Clause LICENSE 2026-02-14 05:26:25 -08:00