2026-02-10 20:28:13 -05:00
[ workspace . package ]
license = "MIT or Apache-2.0"
2024-09-27 15:29:49 +03:00
[ workspace ]
2025-09-04 14:54:48 +03:00
resolver = "3"
2024-09-27 15:29:49 +03:00
members = [
2025-08-09 06:36:13 -03:00
"integration_tests" ,
2026-06-09 16:02:56 +03:00
2026-06-02 14:14:42 -03:00
"lez/storage" ,
2026-06-01 17:10:46 -03:00
"lee/key_protocol" ,
"lee/state_machine" ,
"lee/state_machine/core" ,
2026-06-09 16:02:56 +03:00
"lee/privacy_preserving_circuit" ,
"lee/state_machine/test_methods" ,
"lee/state_machine/test_methods/guest" ,
"lez" ,
"lez/system_accounts" ,
2026-06-02 14:14:42 -03:00
"lez/sequencer/core" ,
"lez/sequencer/service" ,
"lez/sequencer/service/protocol" ,
"lez/sequencer/service/rpc" ,
"lez/indexer/core" ,
"lez/indexer/service" ,
"lez/indexer/service/protocol" ,
"lez/indexer/service/rpc" ,
"lez/explorer_service" ,
"lez/testnet_initial_state" ,
"lez/indexer/ffi" ,
"lez/keycard_wallet" ,
2026-06-09 16:02:56 +03:00
"lez/mempool" ,
"lez/wallet" ,
"lez/wallet-ffi" ,
"lez/common" ,
"lez/programs" ,
"lez/programs/amm" ,
"lez/programs/associated_token_account" ,
"lez/programs/authenticated_transfer" ,
"lez/programs/bridge" ,
"lez/programs/clock" ,
"lez/programs/faucet" ,
"lez/programs/pinata" ,
"lez/programs/pinata_token" ,
"lez/programs/token" ,
"lez/programs/vault" ,
"test_programs" ,
"test_programs/guest" ,
"examples/program_deployment" ,
"examples/program_deployment/methods" ,
"examples/program_deployment/methods/guest" ,
"build_utils" ,
2026-05-20 10:08:24 +02:00
"test_fixtures" ,
2026-06-09 16:02:56 +03:00
2026-05-14 18:14:37 +02:00
"tools/cycle_bench" ,
2026-05-18 17:13:07 +02:00
"tools/crypto_primitives_bench" ,
2026-05-20 11:04:06 +02:00
"tools/integration_bench" ,
2024-09-27 15:29:49 +03:00
]
[ workspace . dependencies ]
2026-06-01 17:10:46 -03:00
lee = { path = "lee/state_machine" }
lee_core = { path = "lee/state_machine/core" }
2026-06-02 14:14:42 -03:00
common = { path = "lez/common" }
mempool = { path = "lez/mempool" }
storage = { path = "lez/storage" }
2026-06-01 17:10:46 -03:00
key_protocol = { path = "lee/key_protocol" }
2026-06-02 14:14:42 -03:00
sequencer_core = { path = "lez/sequencer/core" }
sequencer_service_protocol = { path = "lez/sequencer/service/protocol" }
sequencer_service_rpc = { path = "lez/sequencer/service/rpc" }
sequencer_service = { path = "lez/sequencer/service" }
indexer_core = { path = "lez/indexer/core" }
indexer_service = { path = "lez/indexer/service" }
indexer_service_protocol = { path = "lez/indexer/service/protocol" }
indexer_service_rpc = { path = "lez/indexer/service/rpc" }
wallet = { path = "lez/wallet" }
wallet-ffi = { path = "lez/wallet-ffi" , default-features = false }
indexer_ffi = { path = "lez/indexer/ffi" }
lez = { path = "lez" }
2026-06-09 16:02:56 +03:00
programs = { path = "lez/programs" , default-features = false , features = [
"artifacts" ,
] }
system_accounts = { path = "lez/system_accounts" }
clock_core = { path = "lez/programs/clock/core" }
token_core = { path = "lez/programs/token/core" }
token_program = { path = "lez/programs/token" }
amm_core = { path = "lez/programs/amm/core" }
amm_program = { path = "lez/programs/amm" }
associated_token_account_core = { path = "lez/programs/associated_token_account/core" }
ata_program = { path = "lez/programs/associated_token_account" }
authenticated_transfer_core = { path = "lez/programs/authenticated_transfer/core" }
faucet_core = { path = "lez/programs/faucet/core" }
bridge_core = { path = "lez/programs/bridge/core" }
vault_core = { path = "lez/programs/vault/core" }
build_utils = { path = "build_utils" }
test_programs = { path = "test_programs" }
2026-06-02 14:14:42 -03:00
testnet_initial_state = { path = "lez/testnet_initial_state" }
keycard_wallet = { path = "lez/keycard_wallet" }
2026-05-20 10:08:24 +02:00
test_fixtures = { path = "test_fixtures" }
2025-12-16 17:44:10 +03:00
2026-03-09 22:52:40 +03:00
tokio = { version = "1.50" , features = [
2025-12-16 17:44:10 +03:00
"net" ,
"rt-multi-thread" ,
"sync" ,
"fs" ,
] }
2026-01-24 04:05:59 +03:00
tokio-util = "0.7.18"
2026-05-22 18:05:06 +03:00
risc0-zkvm = { version = "3.0.5" , default-features = false , features = [ 'std' ] }
2026-02-16 12:26:42 -03:00
risc0-build = "3.0.5"
2025-08-09 19:49:07 -03:00
anyhow = "1.0.98"
2026-04-10 20:23:25 +03:00
derive_more = "2.1.1"
2024-09-27 15:29:49 +03:00
num_cpus = "1.13.1"
openssl = { version = "0.10" , features = [ "vendored" ] }
openssl-probe = { version = "0.1.2" }
2025-12-16 17:44:10 +03:00
serde = { version = "1.0.60" , default-features = false , features = [ "derive" ] }
2024-09-27 15:29:49 +03:00
serde_json = "1.0.81"
2026-01-29 22:20:42 +03:00
serde_with = "3.16.1"
2024-09-30 05:49:46 +03:00
actix = "0.13.0"
2026-03-09 22:52:40 +03:00
actix-cors = "0.7.1"
2026-01-24 04:05:59 +03:00
jsonrpsee = "0.26.0"
2024-09-30 05:49:46 +03:00
futures = "0.3"
2024-12-26 11:38:00 +02:00
actix-rt = "*"
2025-04-18 08:16:56 -04:00
lazy_static = "1.5.0"
2026-03-09 22:52:40 +03:00
env_logger = "0.11"
2025-09-04 14:18:44 +03:00
log = "0.4.28"
2026-03-09 22:52:40 +03:00
lru = "0.16.3"
thiserror = "2.0"
2024-10-10 14:09:31 +03:00
sha2 = "0.10.8"
2024-10-25 14:15:00 +03:00
hex = "0.4.3"
2025-12-16 17:44:10 +03:00
bytemuck = "1.24.0"
2026-02-24 19:41:01 +03:00
bytesize = { version = "2.3.1" , features = [ "serde" ] }
2026-02-24 20:52:14 +03:00
humantime-serde = "1.1"
2026-06-23 14:33:38 +03:00
arc-swap = "1.7"
2026-02-24 20:52:14 +03:00
humantime = "2.1"
2024-10-30 12:32:36 +02:00
aes-gcm = "0.10.3"
2026-03-09 22:52:40 +03:00
toml = "0.9.8"
2024-12-02 00:50:21 +01:00
bincode = "1.3.3"
2024-12-09 03:56:33 +01:00
tempfile = "3.14.0"
2025-03-16 11:05:27 -04:00
light-poseidon = "0.3.0"
ark-bn254 = "0.5.0"
ark-ff = "0.5.0"
2025-07-25 10:46:32 +03:00
tiny-keccak = { version = "2.0.2" , features = [ "keccak" ] }
2025-08-12 12:18:13 -03:00
base64 = "0.22.1"
2025-09-04 17:49:55 +03:00
bip39 = "2.2.0"
2025-09-05 14:47:58 +03:00
hmac-sha512 = "1.1.7"
2025-09-03 10:29:51 +03:00
chrono = "0.4.41"
2025-09-25 11:53:42 +03:00
borsh = "1.5.7"
2025-10-23 17:33:25 +03:00
base58 = "0.2.0"
2025-12-04 14:55:45 +03:00
itertools = "0.14.0"
2026-06-02 00:42:41 +03:00
num-bigint = "0.4.6"
2026-02-10 20:28:13 -05:00
url = { version = "2.5.4" , features = [ "serde" ] }
tokio-retry = "0.3.0"
2026-03-09 22:52:40 +03:00
schemars = "1.2"
2026-01-29 22:20:42 +03:00
async-stream = "0.3.6"
2026-01-08 09:10:00 +02:00
2026-06-15 12:22:00 +02:00
logos-blockchain-common-http-client = { git = "https://github.com/logos-blockchain/logos-blockchain.git" , rev = "d8711bbc3d43d3ef9755ef9b73af32fd0f703160" }
logos-blockchain-key-management-system-service = { git = "https://github.com/logos-blockchain/logos-blockchain.git" , rev = "d8711bbc3d43d3ef9755ef9b73af32fd0f703160" }
logos-blockchain-core = { git = "https://github.com/logos-blockchain/logos-blockchain.git" , rev = "d8711bbc3d43d3ef9755ef9b73af32fd0f703160" }
logos-blockchain-chain-broadcast-service = { git = "https://github.com/logos-blockchain/logos-blockchain.git" , rev = "d8711bbc3d43d3ef9755ef9b73af32fd0f703160" }
logos-blockchain-chain-service = { git = "https://github.com/logos-blockchain/logos-blockchain.git" , rev = "d8711bbc3d43d3ef9755ef9b73af32fd0f703160" }
logos-blockchain-zone-sdk = { git = "https://github.com/logos-blockchain/logos-blockchain.git" , rev = "d8711bbc3d43d3ef9755ef9b73af32fd0f703160" }
logos-blockchain-http-api-common = { git = "https://github.com/logos-blockchain/logos-blockchain.git" , rev = "d8711bbc3d43d3ef9755ef9b73af32fd0f703160" }
2024-09-27 15:29:49 +03:00
2026-07-06 17:30:49 -04:00
keycard-rs = { git = "https://github.com/keycard-tech/keycard-rs" , rev = "52cb832a6334ab84ea0a0e1f42aeabcf8a3b4337" } # includes the handshake signature-normalization fix (marvin/normalize-signature, merged)
refactor(keycard_wallet): replace keycard-py (pyo3) with native keycard-rs
Rewrites the Keycard integration to talk to the LEE-flavored applet
directly from Rust via keycard-rs (pinned git dependency), dropping the
pyo3 shim, python_path.rs, and the vendored keycard-py Python library
entirely. Verified end-to-end against real hardware: pairing, PIN
verification, mnemonic loading, BIP340 Schnorr signing, and transfers
between keycard and public/private accounts.
Also cleans up the pyo3 usage that had leaked into wallet's signing
path (signing.rs, account_manager.rs) beyond the keycard CLI itself,
and trims wallet_with_keycard.sh's Python setup down to just pyscard,
which is only needed by the force_unpower.py test helper now.
2026-07-03 15:47:05 -04:00
2025-12-04 23:42:03 +11:00
rocksdb = { version = "0.24.0" , default-features = false , features = [
2024-10-30 00:53:12 +01:00
"snappy" ,
2025-12-17 01:10:25 +03:00
"bindgen-runtime" ,
2024-10-30 00:53:12 +01:00
] }
2025-12-16 17:44:10 +03:00
rand = { version = "0.8.5" , features = [ "std" , "std_rng" , "getrandom" ] }
2026-07-06 17:30:49 -04:00
pcsc = "2"
2025-12-16 17:44:10 +03:00
k256 = { version = "0.13.3" , features = [
"ecdsa-core" ,
"arithmetic" ,
"expose-field" ,
"serde" ,
"pem" ,
2026-06-16 09:18:31 -04:00
"schnorr" ,
2025-12-16 17:44:10 +03:00
] }
2026-06-03 14:40:06 -04:00
ml-kem = { version = "0.3" , features = [ "hazmat" ] }
2025-12-16 17:44:10 +03:00
elliptic-curve = { version = "0.13.8" , features = [ "arithmetic" ] }
2026-03-09 22:52:40 +03:00
actix-web = { version = "4.13.0" , default-features = false , features = [
2025-12-16 17:44:10 +03:00
"macros" ,
] }
clap = { version = "4.5.42" , features = [ "derive" , "env" ] }
2026-01-08 09:10:00 +02:00
reqwest = { version = "0.12" , features = [ "json" , "rustls-tls" , "stream" ] }
2026-06-05 17:35:10 -04:00
zeroize = "1"
criterion = { version = "0.8" , features = [ "html_reports" ] }
2026-02-10 20:28:13 -05:00
# Profile for leptos WASM release builds
[ profile . wasm-release ]
inherits = "release"
opt-level = 'z'
lto = true
codegen-units = 1
2026-03-03 14:17:34 +03:00
2026-04-17 16:10:20 +02:00
# Keep backtraces but drop full DWARF type info to avoid LLD OOM/SIGBUS when
# linking large integration-test binaries on resource-constrained CI runners.
[ profile . dev ]
debug = "line-tables-only"
[ profile . test ]
debug = "line-tables-only"
2026-03-03 14:17:34 +03:00
[ workspace . lints . rust ]
warnings = "deny"
[ workspace . lints ]
2026-03-03 23:21:08 +03:00
clippy . all = { level = "deny" , priority = -1 }
2026-03-04 18:42:33 +03:00
# Pedantic
2026-03-03 23:21:08 +03:00
clippy . pedantic = { level = "deny" , priority = -1 }
# Reason: documenting every function returning Result is too verbose and doesn't add much value when you have good error types.
clippy . missing-errors-doc = "allow"
# Reason: most of the panics are internal and not part of the public API, so documenting them is not necessary.
clippy . missing-panics-doc = "allow"
# Reason: this isn't always bad and actually works well for our financial and cryptography code.
clippy . similar-names = "allow"
# Reason: this lint is too strict and hard to fix.
clippy . too-many-lines = "allow"
2026-03-04 18:42:33 +03:00
# Reason: std hasher is fine for us in public functions.
2026-03-03 23:21:08 +03:00
clippy . implicit-hasher = "allow"
2026-03-04 18:42:33 +03:00
# Restriction
clippy . restriction = { level = "deny" , priority = -1 }
# Reason: we deny the whole `restriction` group but we allow things that don't make sense for us.
# That way we can still benefit from new lints added to the `restriction` group without having to
# explicitly allow them.
# As a downside our contributors don't know if some lint was enabled intentionally or just no one
# else faced it before to allow it but we can handle this during code reviews.
clippy . blanket-clippy-restriction-lints = "allow"
# Reason: we can't avoid using unwrap for now.
clippy . unwrap-used = "allow"
# Reason: we can't avoid using expect for now.
clippy . expect-used = "allow"
# Reason: unreachable is good in many cases.
clippy . unreachable = "allow"
# Reason: this is ridiculous strict in our codebase and doesn't add any value.
clippy . single-call-fn = "allow"
# Reason: we use panic in some places and it's okay.
clippy . panic = "allow"
# Reason: shadowing is good most of the times.
clippy . shadow-reuse = "allow"
# Reason: implicit return is good.
clippy . implicit-return = "allow"
# Reason: std is fine for us, we don't need to use core.
clippy . std-instead-of-core = "allow"
# Reason: std is fine for us, we don't need to use alloc.
clippy . std-instead-of-alloc = "allow"
# Reason: default methods are good most of the time.
clippy . missing-trait-methods = "allow"
# Reason: this is too verbose and doesn't help much if you have rust analyzer.
clippy . pattern-type-mismatch = "allow"
# Reason: decreases readability.
clippy . assertions-on-result-states = "allow"
# Reason: documenting every assert is too verbose.
clippy . missing-assert-message = "allow"
# Reason: documenting private items is too verbose and doesn't add much value.
clippy . missing-docs-in-private-items = "allow"
# Reason: we use separated suffix style.
clippy . separated_literal_suffix = "allow"
# Reason: sometimes absolute paths are more readable.
clippy . absolute-paths = "allow"
# Reason: sometimes it's as readable as full variable naming.
clippy . min-ident-chars = "allow"
# Reason: it's very common and handy.
clippy . indexing-slicing = "allow"
# Reason: we use little endian style.
clippy . little-endian-bytes = "allow"
# Reason: we use this style of pub visibility.
clippy . pub-with-shorthand = "allow"
# Reason: question mark operator is very cool.
clippy . question-mark-used = "allow"
# Reason: it's fine to panic in tests and some functions where it makes sense.
clippy . panic-in-result-fn = "allow"
# Reason: we don't care that much about inlining and LTO should take care of it.
clippy . missing_inline_in_public_items = "allow"
# Reason: it's okay for us.
clippy . default-numeric-fallback = "allow"
# Reason: this is fine for us.
clippy . exhaustive-enums = "allow"
# Reason: this is fine for us.
clippy . exhaustive-structs = "allow"
# Reason: this helps readability when item is imported in other modules.
clippy . module-name-repetitions = "allow"
# Reason: mostly historical reasons, maybe we'll address this in future.
clippy . mod-module-files = "allow"
# Reason: named module files is our preferred way.
clippy . self-named-module-files = "allow"
# Reason: this is actually quite handy.
clippy . impl-trait-in-params = "allow"
# Reason: this is often useful.
clippy . use-debug = "allow"
# Reason: this is sometimes useful.
clippy . field-scoped-visibility-modifiers = "allow"
# Reason: `pub use` is good for re-exports and hiding unnecessary details.
clippy . pub-use = "allow"
# Reason: we prefer semicolons inside blocks.
clippy . semicolon-outside-block = "allow"
# Reason: we don't do it blindly, this is mostly internal constraints checks.
clippy . unwrap-in-result = "allow"
# Reason: we don't see any problems with that.
clippy . shadow-same = "allow"
# Reason: this lint is too verbose.
clippy . let-underscore-untyped = "allow"
# Reason: this lint is actually bad as it forces to use wildcard `..` instead of
# field-by-field `_` which may lead to subtle bugs when new fields are added to the struct.
clippy . unneeded-field-pattern = "allow"
2026-03-09 18:27:56 +03:00
# Nursery
clippy . nursery = { level = "deny" , priority = -1 }
# Reason: this is okay if it compiles.
clippy . future-not-send = "allow"
# Reason: this is actually a good lint, but currently it gives a lot of false-positives.
clippy . significant-drop-tightening = "allow"
2026-03-09 21:40:34 +03:00
# Correctness
clippy . correctness = { level = "deny" , priority = -1 }
2026-03-09 21:42:04 +03:00
# Complexity
clippy . complexity = { level = "deny" , priority = -1 }
2026-03-09 21:43:28 +03:00
# Perf
clippy . perf = { level = "deny" , priority = -1 }
2026-03-09 21:44:48 +03:00
# Suspicious
clippy . suspicious = { level = "deny" , priority = -1 }
2026-03-09 21:46:05 +03:00
# Style
clippy . style = { level = "deny" , priority = -1 }
2026-03-09 22:35:54 +03:00
# Cargo
clippy . cargo = { level = "deny" , priority = -1 }
# Reason: we're not at this stage yet and it will be a pain to create a new crate.
clippy . cargo-common-metadata = "allow"
# Reason: hard to address right now and mostly comes from dependencies
# so the fix would be just a long list of exceptions.
clippy . multiple-crate-versions = "allow"