Files
zeekayandHanzo Dev b00f4bfea2 Bring the primitive seam back into the tree
chains/cpp/core and quantumvm asked for LUX_GPU_DIR and stopped with a
fatal error when nothing set it, so the public P, X and Q builds could
not configure at all for anyone outside this machine. The seam is an ABI
of four symbols over a complete CPU backend, not a kernel, so it belongs
beside the chains defined over it; the kernels stay private in
lux-gpu/gpu and are still only ever dlopen'd.

The D and F ports move with it, to lux-cpp/chains and lux-rs/chains,
both public. luxfi/compute held nothing its licence did not already
cover, being the same BSD-3-Clause as this repository's.

Co-authored-by: Hanzo Dev <[email protected]>
2026-09-10 21:42:43 -07:00

64 lines
3.1 KiB
TOML

[package]
name = "lux-xvm"
version = "0.1.0"
edition = "2021"
description = "The Lux X-Chain in Rust: the UTXO DAG and asset transfers, ZAP on the wire."
license = "BSD-3-Clause-Eco"
repository = "https://github.com/luxfi/node2"
publish = false
[dependencies]
# The ZAP runtime, emitted by zapgen into `chains/rust/zap` — one copy for
# every chain here, so the reader a chain calls is the reader the Go and C++
# chains call. A path dependency because it is generated in this tree from
# `chains/schema`, and a version between them would be a way to disagree
# about what a byte means.
lux-zap = { path = "../zap" }
# The host. `host::Vm` and `host::Block` are the node's OWN trait definitions,
# not a copy of them: a chain that restated the seam would compile against a
# shape the node never sees, and the day the node changed a method the chain
# would still build. A path dependency because `lux-node` is not published —
# the same reason the node itself reaches `lux-evm` and `lux-pq` by path.
lux-node = { path = "../../../../../lux-rs/node" }
# Named, not used: `lux-node` reaches `libluxcrypto` through this crate, and
# only a DIRECT dependent is handed the `links` metadata that says where that
# library was resolved. Naming it here is what lets `build.rs` repeat the one
# answer instead of searching for a second one, so this crate's test binaries —
# which run the node — can load. `lux-node` names it for the same reason.
lux-pq = { path = "../../../../../lux-rs/sdk/lux-pq" }
# `Id` — `lux_consensus::finality::Id`, `[u8; 32]`. Named from the crate the
# host names it from, so a block this chain builds is named the same way the
# node that certifies it names it, with nothing in between to translate.
lux-consensus = "1.23.0"
# Every primitive the chain is defined over — the three hashes, the RFC 6962
# fold, and public-key recovery — comes from here, and from nowhere else. A tx
# id is SHA-256 of its signed bytes; an address is RIPEMD-160 of the SHA-256 of
# a public key; every state-root leaf is Ethereum Keccak-256; a transfer is
# spendable because the sender is RECOVERED from the signature. This crate is
# also where the choice between computing those and handing them to an installed
# kernel library is made — see gpu/README.md.
lux-gpu = { path = "../../../gpu/rust" }
# Signing. A node never signs a transfer — a wallet does — so this is the test
# and tooling half of the same curve, and is deliberately not behind the
# primitive seam, which exists to make VERIFICATION agree across backends.
k256 = { version = "0.13", default-features = false, features = ["ecdsa", "std"] }
# The one boundary where a chain answers a caller in a shape it did not
# choose. A hand-written parser at a boundary is a vulnerability with a
# schedule.
serde_json = "1"
[dev-dependencies]
# Golden vectors are hex, because that is how the Go generator prints them.
hex = "0.4"
# Publishing a validator, in `tests/node.rs`: the committee the node's engine
# reads is a BLS key and a proof of possession over it, so standing one up
# means holding the same curve the node verifies under.
blst = "0.3"