5 releases
| 0.14.0 | Nov 7, 2025 |
|---|---|
| 0.14.0-rc.2 | Sep 25, 2025 |
| 0.14.0-rc.1 | May 14, 2025 |
| 0.13.0 | Feb 14, 2025 |
| 0.13.0-rc.1 | Jan 22, 2025 |
#4 in #vls
2,193 downloads per month
Used in 13 crates
(4 directly)
7KB
74 lines
Validating Lightning Signer
Please see the VLS Project Overview for more information. Our web site.
Limitations
The following remain to be implemented:
vlsd --recover-tocan only handle a simple force-close by us. It cannot sweep a force-close or a breach by the peer. It also cannot sweep HTLC outputs.- there is no facility to recover from loss of signer state.
- on-chain tracking is not fully implemented, so a malicious node can steal funds by failing to remedy a breach (for example)
Additional Crates
- a
no_stdVLS wire protocol encoder/decoder - in ./vls-protocol - a
no_stdprotocol handler for VLS - in ./vls-protocol-signer - a replacement for the UNIX CLN
hsmdbinary, implemented in Rust in ./vls-proxy.
Development Information
Recommended Rust Version
We recommend using the nightly version of Rust only in specific cases, such as for cargo fmt and no-std. Otherwise, we explicitly recommend using the stable version.
Formatting Code
Enable formatting precommit hooks:
./scripts/enable-githooks
For some reason, the ignore configuration for rustfmt is only available on the nightly channel,
even though it's documented as stable.
rustup install nightly
cargo +nightly fmt
Building Validating Lightning Signer
Build VLS and related crates:
cargo build
Running Unit Tests
cargo test
To enable logging for a failing test (adjust log level to preference):
RUST_LOG=trace cargo test
Using llvm-cov for Code Coverage
Dependencies:
cargo +stable install cargo-llvm-cov --locked
Run coverage:
./scripts/run-llvm-cov
Changing linker to mold instead of ld:
cp .cargo/config.sample.toml .cargo/config.toml
Benchmarks
Running Benchmarks
cargo bench -p vls-core --bench secp_bench
Note that you might need to add --features=test_utils if you want to run all benches in vls-core.
Without optimizations:
cargo bench -p vls-core --bench secp_bench --profile=dev
Expect something like:
test fib1_bench ... bench: 1 ns/iter (+/- 0)
test fib_bench ... bench: 17,247 ns/iter (+/- 198)
test hash_bench ... bench: 258 ns/iter (+/- 2)
test secp_create_bench ... bench: 49,981 ns/iter (+/- 642)
test sign_bench ... bench: 25,692 ns/iter (+/- 391)
test verify_bench ... bench: 31,705 ns/iter (+/- 1,445)
i.e. around 30 microseconds per secp256k1 crypto operation. We also see that creating a secp context is expensive, but not prohibitively so.
Dependencies
~6.5MB
~88K SLoC