About
payjoin
The Payjoin Dev Kit payjoin library implements both BIP 78 Payjoin V1 and BIP 77 Payjoin V2.
payjoin-cli
The payjoin-cli crate performs no-frills Payjoin as a reference implementation using Bitcoin Core wallet.
payjoin-directory
The payjoin-directory crate implements the Payjoin Directory store-and-forward server required for Payjoin V2's asynchronous operation.
payjoin-test-utils
The payjoin-test-utils crate provides commonly used testing fixtures such as a local OHTTP relay and payjoin directory, bitcoind node and wallets, and official test vectors.
payjoin-ffi
The payjoin-ffi crate provides language bindings that expose the Rust-based Payjoin implementation to various programming languages.
Disclaimer ⚠️ WIP
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!
Development status
Sender (V1 beta, V2 alpha)
- 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
Receiver (V1 beta, V2 alpha)
- 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
Code quality
- Idiomatic Rust code
- Newtypes
- Panic-free error handling
- No
unsafecode or well-tested/analyzed/proven/...unsafecode - Warning-free
- CI
- Integration tests
- Fuzzing
- Coverage measurement
- Mutation testing
Minimum Supported Rust Version (MSRV)
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:
payjoin
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
payjoin-cli
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 time@0.3.36 --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
Contributing
See CONTRIBUTING.md
License
MIT