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.
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>
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>
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>
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>
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>
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>