crates/adapters/lighter/README.md
NautilusTrader adapter for the Lighter decentralized spot and perpetuals exchange.
The nautilus-lighter crate implements the Lighter adapter for NautilusTrader, including
typed HTTP and WebSocket clients, REST and stream models, venue parsing, data and execution
client wiring, and an in-tree L2 signer for the official Lighter API.
Lighter is a high-throughput central-limit-order-book decentralized crypto exchange for spot and perpetual futures, settling on Ethereum via a custom zero-knowledge rollup. Order matching is performed off-chain by a sequencer, with ZK proofs published on-chain to guarantee correctness of matching, fills, and liquidations.
Trading is non-custodial: users hold their assets in Lighter's smart contracts and authorise trades with their own keys.
NautilusTrader is an open-source, production-grade, Rust-native engine for multi-asset, multi-venue trading systems.
The system spans research, deterministic simulation, and live execution within a single event-driven architecture, providing research-to-live semantic parity.
This crate provides feature flags to control source code inclusion during compilation:
python: Enables Python bindings from PyO3.extension-module: Builds as a Python extension module.Python bindings are intentionally narrow: configuration, enums, factory wiring, and the integrator revocation helper. Data and execution clients are consumed directly through the Rust trait surface.
High-precision mode (128-bit value types) is enabled by default.
Submitted create and modify order transactions carry the NautilusTrader integrator account index in
Lighter's L2TxAttributes. This helps us gauge real usage of the integration and prioritize
ongoing maintenance. Maker and taker integrator fees are set to zero, so attribution adds no trading
cost.
Lighter requires an ApproveIntegrator approval before these attributes can be attached to orders.
During startup, the execution client submits the required zero-fee approval for the configured
L2 account. See the
Lighter integration guide
for approval and revocation details.
The crate ships an in-tree implementation of the Lighter L2 signer (Schnorr over the ECgFp5 curve, Goldilocks field, Poseidon2 binding). Correctness is gated by independent layers:
elliottech/poseidon_crypto)
for every algebra layer.lighter-python SDK, covering end-to-end outputs for the four supported tx
kinds.pornin/ecgfp5), pulled in as a zero-transitive-dep #[cfg(test)]
dev-dep. Every public algebra operation is asserted byte-for-byte against
it under proptest, with a coverage-guided fuzz soak in
fuzz/ for continuous validation. Pornin's reference
accompanies the curve's design paper (IACR ePrint 2022/274), has been
public and reused by downstream zero-knowledge projects since 2022, and
shares no code lineage with our implementation: a bug that slips the
gate would have to be present in both implementations in the same way.Round-trip testing against Lighter itself remains the final correctness gate for what the sequencer accepts.
Coverage-guided fuzz targets for the L2 signer live in fuzz/. They require the
workspace-pinned cargo-fuzz binary and a Rust nightly toolchain; install them from the repository
root with make install-tools and rustup toolchain install nightly.
See the docs for more detailed usage.
The source code for NautilusTrader is available on GitHub under the GNU Lesser General Public License v3.0.
Reference attributions for cryptographic parameter sets and reproduced test vectors
used by the L2 transaction signer are listed in
licenses/THIRD_PARTY_LICENSES.md.
NautilusTrader™ is developed and maintained by Nautech Systems, a technology company specializing in the development of high-performance trading systems. For more information, visit https://nautilustrader.io.
Use of this software is subject to the Disclaimer.
© 2015-2026 Nautech Systems Pty Ltd. All rights reserved.