Supercharged payment batching to save you fees and preserve your privacy.
The Payjoin Dev Kit payjoin
library implements both BIP 78 Payjoin V1 and BIP 77 Payjoin V2.
The payjoin
crate is compatible with many wallets like LND in nolooking and Bitcoin Dev Kit in Mutiny Wallet and in BitMask
The payjoin-cli
crate performs no-frills Payjoin as a reference implementation using Bitcoin Core wallet.
The payjoin-directory
crate implements the Payjoin Directory store-and-forward server required for Payjoin V2's asynchronous operation.
Use at your own risk. This crate has not yet been reviewed by independent Rust and Bitcoin security professionals.
While I don't think there is a huge risk running it, be careful relying on its security for now!
Seeking review of the code that verifies there is no overpayment. Contributions are welcome!
- Basic logic
- Most checks implemented
- Documentation
- Unit test with official test vectors passes
- Many unit tests
- Fee contribution support
- Example client using bitcoind
- Tested and works with BTCPayServer
- Tested and works with JoinMarket
- Minimum fee rate enforcement
- Independent review
- Independent testing
- Basic logic
- Most checks implemented
- Documentation
- Unit test with official test vectors passes
- Many unit tests
- Fee contribution support
- Example server using bitcoind
- Tested and works with BTCPayServer
- Tested and works with WasabiWallet
- Tested and works with Blue Wallet
- Tested and works with Sparrow
- Tested and works with JoinMarket
- Minimum fee rate enforcement
- Discount support
- Independent review
- Independent testing
- Idiomatic Rust code
- Newtypes
- Panic-free error handling
- No
unsafe
code or well-tested/analyzed/proven/...unsafe
code - Warning-free
- CI
- Integration tests
- Fuzzing
- Coverage measurement
The payjoin
library and payjoin-cli
should always compile with any combination of features on Rust 1.63.0.
To build and test with the MSRV you will need to pin the below dependency versions:
cargo update -p cc --precise 1.0.105
cargo update -p regex --precise 1.9.6
cargo update -p reqwest --precise 0.12.4
cargo update -p url --precise 2.5.0
cargo update -p tokio --precise 1.38.1
cargo update -p tokio-util --precise 0.7.11
cargo update -p which --precise 4.4.0
cargo update -p zstd-sys --precise 2.0.8+zstd.1.5.5
cargo update -p cc --precise 1.0.105
cargo update -p clap_lex --precise 0.3.0
cargo update -p regex --precise 1.9.6
cargo update -p reqwest --precise 0.12.4
cargo update -p [email protected] --precise 0.3.20
cargo update -p tokio --precise 1.38.1
cargo update -p tokio-util --precise 0.7.11
cargo update -p url --precise 2.5.0
cargo update -p which --precise 4.4.0
cargo update -p zstd-sys --precise 2.0.8+zstd.1.5.5
We test a few different features combinations in CI. To run all of the combinations locally, have Docker running and run contrib/test.sh
.
If you are adding a new feature please add tests for it.
If your change requires a dependency to be upgraded you must please run contrib/update-lock-files.sh
before submitting any changes.
We use the nightly Rust formatter for this project. Please run rustfmt
using the nightly toolchain before submitting any changes.
We use clippy
for linting. Please run contrib/lint.sh
using the nightly toolchain before submitting any changes.
MIT