#lightning #bitcoin #vls #operation #externalizes-and-secures #htlc #peer #cryptography #validation

no-std vls-protocol

A library for implementing a Lightning signer, which externalizes and secures cryptographic operations

21 releases

0.14.0-rc.1 May 14, 2025
0.13.0 Feb 14, 2025
0.13.0-rc.1 Jan 22, 2025
0.12.0 Aug 9, 2024
0.2.0 Mar 14, 2023

#1 in #externalizes-and-secures

Download history 523/week @ 2025-03-25 368/week @ 2025-04-01 449/week @ 2025-04-08 281/week @ 2025-04-15 377/week @ 2025-04-22 264/week @ 2025-04-29 246/week @ 2025-05-06 642/week @ 2025-05-13 580/week @ 2025-05-20 159/week @ 2025-05-27 172/week @ 2025-06-03 310/week @ 2025-06-10 182/week @ 2025-06-17 164/week @ 2025-06-24 183/week @ 2025-07-01 269/week @ 2025-07-08

883 downloads per month
Used in 10 crates (8 directly)

Apache-2.0

1.5MB
29K SLoC

Validating Lightning Signer

Please see the VLS Project Overview for more information. Our web site.

Limitations

The following remain to be implemented:

  • vlsd --recover-to can 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

Development Information

Check out our Docs

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

~21MB
~319K SLoC