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

66 lines
2.8 KiB
TOML

# SPDX-License-Identifier: BSD-3-Clause-Eco
[package]
name = "lux-platformvm"
version = "0.1.0"
edition = "2021"
description = "The Lux P-Chain in Rust — validators, staking, permissionless entry, L1s"
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" }
# `Id` is the host seam's own id type — `lux_consensus::finality::Id`, which is
# `[u8; 32]`. Naming it from the same crate the host names it from is what makes
# a chain here plug into `lux-rs/node`'s `Vm` with no conversion at the join.
lux-consensus = "1.23.0"
# The seam itself. `lux-rs/node` states `Vm` and `Block` once, in `src/vm.rs`,
# and this chain names that declaration rather than restating it: a second
# declaration of the same trait is a second seam, and the two can drift while
# both compile. A path dependency because the node and the chains it runs move
# together and a version number between them would be a way to disagree about
# what a block is.
lux-node = { path = "../../../../../lux-rs/node" }
# Every primitive the chain is defined over — SHA-256, which names a tx and a
# block; RIPEMD-160 over it, which is the second half of an address; and
# public-key recovery, which is how a transaction that carries signatures and
# no keys can be checked at all. A second implementation of any of them would be
# a second answer to "which block". This crate is also where the choice between
# computing them and handing them to an installed kernel library is made — see
# gpu/README.md.
lux-gpu = { path = "../../../gpu/rust" }
# The signature a validator proves possession of. Same curve, same domain tag as
# the Go P-Chain's proof of possession — a second BLS is a second network.
blst = "0.3"
# Signing. A chain verifies signatures and never makes them, so this is the
# test and tooling half of the same curve, deliberately outside the primitive
# seam — that seam exists to make VERIFICATION agree across backends.
k256 = { version = "0.13", features = ["ecdsa"] }
# JSON-RPC is the shape the seam's `call` speaks in. Hand-parsing at a boundary
# is a vulnerability with a schedule.
serde_json = "1"
[dev-dependencies]
# The wire vectors build a proof of possession, which needs the same curve the
# chain verifies under.
blst = "0.3"
serde = { version = "1", features = ["derive"] }
# An independent second opinion, only in tests: the address check recomputes
# ripemd160(sha256(key)) by hand rather than asking the seam whether the seam
# is right.
ripemd = "0.1"
sha2 = "0.10"