|
13 | 13 | <a href="https://github.com/payjoin/rust-payjoin/actions/workflows/rust.yml"><img alt="CI Status" src="https://github.com/payjoin/rust-payjoin/actions/workflows/rust.yml/badge.svg"></a> |
14 | 14 | <a href="https://coveralls.io/github/payjoin/rust-payjoin?branch=master"><img src="https://coveralls.io/repos/github/payjoin/rust-payjoin/badge.svg?branch=master"/></a> |
15 | 15 | <a href="https://blog.rust-lang.org/2025/02/20/Rust-1.85.0/"><img alt="Rustc Version 1.85.0+" src="https://img.shields.io/badge/rustc-1.85.0%2B-lightgrey.svg"/></a> |
| 16 | + <a href="https://discord.gg/6rJD9R684h"><img alt="Chat on Discord" src="https://img.shields.io/discord/753336465005608961?logo=discord"></a> |
16 | 17 | </p> |
17 | 18 |
|
18 | 19 | <h4> |
|
22 | 23 |
|
23 | 24 | ## About |
24 | 25 |
|
25 | | -### `payjoin` |
| 26 | +`payjoin/rust-payjoin` contains multiple crates implementing Payjoin as defined in [BIP 77: Async Payjoin](https://github.com/bitcoin/bips/blob/master/bip-0077.mediawiki) and [BIP 78: Simple Payjoin](https://github.com/bitcoin/bips/blob/master/bip-0078.md), and associated OHTTP Relay and Payjoin Directory infrastructure. |
26 | 27 |
|
27 | | -The Payjoin Dev Kit `payjoin` library implements both [BIP 78 Payjoin V1](https://github.com/bitcoin/bips/blob/master/bip-0078.mediawiki) and [BIP 77 Payjoin V2](https://github.com/bitcoin/bips/blob/master/bip-0077.md). |
| 28 | +Find the description of each crate below. |
28 | 29 |
|
29 | | -### `payjoin-cli` |
| 30 | +### [`payjoin`](https://github.com/payjoin/rust-payjoin/tree/master/payjoin) |
30 | 31 |
|
31 | | -The [`payjoin-cli`](https://github.com/payjoin/rust-payjoin/tree/master/payjoin-cli) crate performs no-frills Payjoin as a reference implementation using Bitcoin Core wallet. |
| 32 | +The main Payjoin Dev Kit library which provides tools for implementing both Async and Simple Payjoin. `payjoin` implements Payjoin session persistence support and IO utilities for interacting with OHTTP relays in Async Payjoin integrations. |
32 | 33 |
|
33 | | -### `payjoin-directory` |
| 34 | +**Disclaimer: This crate has not been reviewed by independent Rust and Bitcoin security professionals (yet). Use at your own risk.** |
34 | 35 |
|
35 | | -The [`payjoin-directory`](https://github.com/payjoin/rust-payjoin/tree/master/payjoin-directory) crate implements the Payjoin Directory store-and-forward server required for Payjoin V2's asynchronous operation. |
| 36 | +### [`payjoin-cli`](https://github.com/payjoin/rust-payjoin/tree/master/payjoin-cli) |
36 | 37 |
|
37 | | -### `payjoin-test-utils` |
| 38 | +A CLI tool which performs no-frills Payjoin. It is a reference implementation of the Payjoin Dev Kit which uses a Bitcoin Core wallet. |
38 | 39 |
|
39 | | -The [`payjoin-test-utils`](https://github.com/payjoin/rust-payjoin/tree/master/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. |
| 40 | +### [`ohttp-relay`](https://github.com/payjoin/rust-payjoin/tree/master/ohttp-relay) |
40 | 41 |
|
41 | | -### `payjoin-ffi` |
| 42 | +A Rust implementation of an Oblivious HTTP (OHTTP) relay resource. |
42 | 43 |
|
43 | | -The [`payjoin-ffi`](https://github.com/payjoin/rust-payjoin/tree/master/payjoin-ffi) crate provides language bindings that expose the Rust-based Payjoin implementation to various programming languages. |
| 44 | +**Disclaimer: Both this crate and the [IETF paper](https://ietf-wg-ohai.github.io/oblivious-http/draft-ietf-ohai-ohttp.html) are undergoing active revision. Use at your own risk.** |
44 | 45 |
|
45 | | -### Disclaimer ⚠️ WIP |
| 46 | +### [`payjoin-directory`](https://github.com/payjoin/rust-payjoin/tree/master/payjoin-directory) |
46 | 47 |
|
47 | | -**Use at your own risk. This crate has not yet been reviewed by independent Rust and Bitcoin security professionals.** |
| 48 | +A reference implementation for a Payjoin Directory which stores and forwards HTTP client messages between the sender and the receiver to allow for Async Payjoin transactions. Async Payjoin clients make requests to the directory using [Oblivious HTTP (OHTTP)](https://www.ietf.org/rfc/rfc9458.html) which prevents the directory from being able to link payjoins to specific client IP addresses. |
48 | 49 |
|
49 | | -While I don't think there is a _huge_ risk running it, be careful relying on its security for now! |
| 50 | +### [`payjoin-test-utils`](https://github.com/payjoin/rust-payjoin/tree/master/payjoin-test-utils) |
50 | 51 |
|
51 | | -Seeking review of the code that verifies there is no overpayment. Contributions are welcome! |
| 52 | +The test utilities library which provides commonly used testing fixtures such as a local OHTTP relay and Payjoin directory, bitcoind node and wallets, and official test vectors. |
52 | 53 |
|
53 | | -### Development status |
| 54 | +### [`payjoin-ffi`](https://github.com/payjoin/rust-payjoin/tree/master/payjoin-ffi) |
54 | 55 |
|
55 | | -#### Sender (V1 beta, V2 alpha) |
| 56 | +The language bindings which expose the Rust-based Payjoin implementation to various programming languages. |
56 | 57 |
|
57 | | -- [x] Basic logic |
58 | | -- [x] Most checks implemented |
59 | | -- [x] Documentation |
60 | | -- [x] Unit test with official test vectors passes |
61 | | -- [x] Many unit tests |
62 | | -- [x] Fee contribution support |
63 | | -- [x] Example client using bitcoind |
64 | | -- [x] Tested and works with BTCPayServer |
65 | | -- [x] Tested and works with JoinMarket |
66 | | -- [x] Minimum fee rate enforcement |
67 | | -- [ ] Independent review |
68 | | -- [x] Independent testing |
| 58 | +Currently supported languages: |
69 | 59 |
|
70 | | -#### Receiver (V1 beta, V2 alpha) |
71 | | - |
72 | | -- [x] Basic logic |
73 | | -- [x] Most checks implemented |
74 | | -- [x] Documentation |
75 | | -- [x] Unit test with official test vectors passes |
76 | | -- [x] Many unit tests |
77 | | -- [x] Fee contribution support |
78 | | -- [x] Example server using bitcoind |
79 | | -- [x] Tested and works with BTCPayServer |
80 | | -- [x] Tested and works with WasabiWallet |
81 | | -- [x] Tested and works with Blue Wallet |
82 | | -- [x] Tested and works with Sparrow |
83 | | -- [x] Tested and works with JoinMarket |
84 | | -- [x] Minimum fee rate enforcement |
85 | | -- [ ] Discount support |
86 | | -- [ ] Independent review |
87 | | -- [ ] Independent testing |
88 | | - |
89 | | -#### Code quality |
90 | | - |
91 | | -- [x] Idiomatic Rust code |
92 | | -- [x] Newtypes |
93 | | -- [x] Panic-free error handling |
94 | | -- [x] No `unsafe` code or well-tested/analyzed/proven/... `unsafe` code |
95 | | -- [x] Warning-free |
96 | | -- [x] CI |
97 | | -- [x] Integration tests |
98 | | -- [ ] Fuzzing |
99 | | -- [x] Coverage measurement |
100 | | -- [x] Mutation testing |
| 60 | +- Dart |
| 61 | +- Javascript |
| 62 | +- Python |
101 | 63 |
|
102 | 64 | ## Minimum Supported Rust Version (MSRV) |
103 | 65 |
|
104 | | -The `payjoin` library and `payjoin-cli` should always compile with any combination of features on Rust **1.85.0**. |
| 66 | +All crates in this repository should always compile with any combination of features on Rust **1.85.0**. |
105 | 67 |
|
106 | 68 | ## Contributing |
107 | 69 |
|
108 | | -See [`CONTRIBUTING.md`](.github/CONTRIBUTING.md) |
| 70 | +See [`CONTRIBUTING.md`](.github/CONTRIBUTING.md). |
109 | 71 |
|
110 | 72 | ## License |
111 | 73 |
|
|
0 commit comments