Skip to content

Commit ec5817e

Browse files
Merge pull request #105 from thebrandonlucas/fix-docusaurus-build
Fix Docusaurus build + blog improvements + bump version
2 parents 06a3116 + 505204a commit ec5817e

12 files changed

Lines changed: 704 additions & 664 deletions

blog/2023-06-27-pdk-an-sdk-for-payjoin-transactions.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@
22
title: "PDK: A Payjoin SDK"
33
description: Learn how PDK makes using Payjoin easy and the direction it will develop in our new blog.
44
date: 2023-06-27
5-
authors:
6-
- name: Dan Gould
5+
authors: dangould
76
tags: [Bitcoin, PDK]
87
---
98

9+
1010
PDK is here to make Payjoin a drop in upgrade for all software touching Bitcoin. I cover the project's history, why you should consider it to add Payjoin to your stack, and some of the project's priorities moving forward. The PDK team will be updating this new blog with development updates, feature forecasts and the details of releases.
1111

12+
<!-- truncate -->
13+
1214
## What is PDK?
1315

1416
PDK began as a Rust Payjoin side project library developed by Martin Habovštiak, [@Kixunil](https://github.com/kixunil) in [2021](https://github.com/payjoin/rust-payjoin/commit/d70c447af622e2b9db34b833fe22a80ff3b2d223). Up until then, Payjoin had been cast as a merchant / client privacy tool, but Martin saw payjoin as something more. He showcased Payjoin as a generic interactive transaction coordinator early on. One of Martin's Rust Payjoin applications, [loptos](https://github.com/Kixunil/loptos), receives Payjoin to open batches of lightning channels from an external Payjoin sender, reducing fees and eliminating one whole transaction from typical channel funding flow. I now view Payjoin as the simplest way to deploy Greg Maxwell's 2013 [transaction cut-through](https://bitcointalk.org/index.php?topic=281848.0) idea to scale bitcoin and preserve privacy through fee saving incentives.

blog/2024-05-22-payjoin-v1-infrastructure.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@
22
title: Notes on Payjoin V1 Infrastructure
33
description: A guide on setting up a payjoin receiver on signet
44
date: 2024-05-22
5-
authors:
6-
- name: spacebear
5+
authors: spacebear
76
tags: [PDK, Infrastructure]
87
---
98

9+
1010
[Payjoin V1](https://github.com/bitcoin/bips/blob/master/bip-0078.mediawiki) coordinates transactions between two parties who communicate over a public server endpoint secured by either TLS or Tor hidden service hosted by the receiver. This requires setting up either an HTTPS proxy or a Tor proxy when testing payjoins across different implementations.
1111

12+
<!-- truncate -->
13+
1214
## Setting up a HTTPS payjoin server with nginx
1315

1416
This guide requires a dedicated server that you can `ssh` into, with the ability to `sudo`, and a domain name pointing to that server.

blog/2025-03-18-the-evolution-of-payjoin.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@
22
title: "The Evolution of Payjoin: From Two-Party Protocol to Multiparty Framework"
33
description: "Learn how Payjoin is evolving from a simple two-party protocol into a sophisticated multiparty transaction batching framework"
44
date: "2025-03-18"
5-
authors:
6-
- name: Conor Okus
5+
authors: conorokus
76
tags: [V3]
87
---
98

9+
1010
Payjoin is a transformative protocol that enables wallets to communicate and create collaborative, smarter, and more efficient Bitcoin transactions. It offers payment batching technology that exchanges and payment processors can use to [save on fees](https://payjoin.org/docs/how-payjoin-saves) and protect their own and their users' financial [privacy](https://payjoin.org/docs/why-payjoin/privacy) while [scaling](https://payjoin.org/docs/why-payjoin/scaling) Bitcoin.
1111

12+
<!-- truncate -->
13+
1214
BTCPayServer already supports PayJoin and in 2024, the project made significant progress with the implementation of [Async Payjoin in the Bull Bitcoin Mobile Wallet](https://www.bullbitcoin.com/blog/bull-bitcoin-wallet-payjoin) and ongoing development work in [Cake Wallet](https://github.com/cake-tech/cake_wallet/pull/1889).
1315

1416
# The Evolution of Payjoin
@@ -21,7 +23,7 @@ Building on this idea, [Bustapay (BIP 79)](https://github.com/bitcoin/bips/blob/
2123

2224
## Payjoin V1 (BIP 78): The Foundation
2325

24-
Building on Bustapay, [Payjoin V1 (BIP 78)](https://payjoin.org/docs/how-it-works/payjoin-v1-bip-78) refined sender-receiver transaction collaboration into an even more practical and extensible protocol. By standardizing wallet communication over an HTTP protocol, the standard Bitcoin URI request format, and leveraging [Partially Signed Bitcoin Transactions (PSBT)]((https://en.bitcoin.it/wiki/BIP_0174)), BIP 78 made adopting [the Payjoin experience](https://bitcoin.design/guide/case-studies/payjoin/) interoperable across different wallets and hardware devices.
26+
Building on Bustapay, [Payjoin V1 (BIP 78)](https://payjoin.org/docs/how-it-works/payjoin-v1-bip-78) refined sender-receiver transaction collaboration into an even more practical and extensible protocol. By standardizing wallet communication over an HTTP protocol, the standard Bitcoin URI request format, and leveraging [Partially Signed Bitcoin Transactions (PSBT)](https://en.bitcoin.it/wiki/BIP_0174), BIP 78 made adopting [the Payjoin experience](https://bitcoin.design/guide/case-studies/payjoin/) interoperable across different wallets and hardware devices.
2527

2628
However, Payjoin V1 has limitations. It requires both sender and receiver to be online simultaneously (synchronous communication), and for the receiver to host a server to facilitate coordination. Despite these challenges, real-world implementations of Payjoin in payment processing software demonstrate its viability, laying the groundwork for improved interactive transaction batching.
2729

blog/2025-03-31-payjoin-probing-attacks.md

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
title: "Payjoin Probing Attacks: Facts, Mitigations, and Why Payjoin Still Wins for Privacy"
33
description: ""
44
date: "2025-03-31"
5-
authors:
6-
- name: Dan Gould
5+
authors: dangould
76
tags: [privacy, integrations]
87
---
98

9+
1010
The following is a conclusive address of concerns around UTXO probing attacks on
1111
Payjoin, clarification of why current mitigations are effective, and definitive
1212
argument for Payjoin adoption. Payjoin, the fundamental interactive
@@ -15,6 +15,7 @@ transfers and improves privacy by disrupting common blockchain surveillance
1515
heuristics. While probing attacks exist in theory, they're costly to pull off,
1616
mitigated in practice, and are not a meaningful barrier to adoption.
1717

18+
<!-- truncate -->
1819

1920
## The Probing Attack Explained
2021

@@ -28,10 +29,8 @@ The earliest payjoin specifications explicitly address these attacks. See these
2829
79](https://github.com/bitcoin/bips/blob/master/bip-0079.mediawiki#contributed-input-choice)
2930
and [in BIP 78](https://github.com/bitcoin/bips/blob/master/bip-0078.mediawiki#on-the-receiver-side-utxo-probing-attack).
3031

31-
3232
## Current Probing Mitigations
3333

34-
3534
### Minimum-value Policy
3635

3736
Minimum-value policies impose a floor price above which receivers will respond
@@ -49,7 +48,6 @@ Receivers may choose only to respond to senders providing a fallback transaction
4948
transferring the receiver a minimum amount. If a sender aborts, the receiver may
5049
broadcast, costing the sender their transfer amount plus fees.
5150

52-
5351
### Fallback Broadcast
5452

5553
Payment processors operating as Payjoin receivers should be the most concerned about
@@ -68,21 +66,18 @@ as an additional precaution. A broadcast may be triggered manually or
6866
automatically after an appropriate amount of time passes, for example, after an Async
6967
Payjoin session expires.
7068

71-
7269
### Input Replay
7370

7471
Automated payment processors should respond to senders using fallback transactions containing
7572
the same sender inputs with the same receiver input of their own. This secures
7673
the floor cost imposed by the above mitigations.
7774

78-
7975
### Session Policy Binding
8076

8177
In Async Payjoin, receive sessions are bound to the bitcoin URI used to request them.
8278
Receivers may bind specific policies to specific URIs given to
8379
individual senders depending on the perceived level of trust.
8480

85-
8681
## Refuting Core Concerns
8782

8883
- **Claim**: Probing is costless<br/>
@@ -124,7 +119,6 @@ individual senders depending on the perceived level of trust.
124119
- **Improves global privacy**: Payjoins can look like non-payjoins,
125120
compounding difficulty for surveillance adversaries.
126121

127-
128122
## Edge Cases and Real-World Context
129123

130124
Attacks exist in theory, particularly if implementation guidelines aren't
@@ -134,15 +128,13 @@ Payjoin Dev Kit guides implementors to make misuse difficult.
134128
While subtle attacks like dusting do occur on Bitcoin, probing Payjoin at scale
135129
is costly and practically limited.
136130

137-
138131
## How to Secure your Payjoin Implementation
139132

140133
- Use Payjoin Dev Kit to follow best practices by default.
141134
- For custom implementations, follow the BIP guidelines and mitigation checklist in this article.
142135
- Ask the Payjoin Dev Kit team for help to ensure your implementation takes
143136
appropriate precautions like request persistence and fallback broadcast.
144137

145-
146138
## Why Payjoin Wins
147139

148140
Payjoin's savings and privacy benefits vastly outweigh theoretical probing

blog/2025-04-08-payjo-in-redis-misconfiguration.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
title: "Payjo.in Directory Security Incident: Misconfiguration May Have Exposed Some Payjoin v1 Messages"
33
description: Due to a docker misconfiguration the `payjo.in` directory server had an open redis database, allowing unauthorized parties to observe exchanges between pairs of senders which only support BIP 78 and receivers which support BIP 77.
44
date: 2025-04-08
5-
authors:
6-
- name: Yuval Kogman
5+
authors: nothingmuch
76
tags: [security]
87
---
98

9+
1010
Due to a docker misconfiguration, the `payjo.in` directory server had an open
1111
redis database, allowing unauthorized parties to observe exchanges between pairs
1212
of senders which only support BIP 78 and receivers which support BIP 77.
@@ -16,6 +16,8 @@ BIP 78 senders during this period may thus not have the common input ownership
1616
heuristic protection they otherwise would, but the unauthorized access does
1717
not change the nature of the risk regarding the user custody of funds.
1818

19+
<!-- truncate -->
20+
1921
## Background
2022

2123
The payjoin directory is a store and forward server that allows BIP 77

blog/2025-04-16-liana-payjoin.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@
22
title: Automatically Refresh Liana Inheritance Timelocks with Payjoin
33
description: Liana combines Payjoin and time locked inheritance to help you keep your Bitcoin private now and safe for those who'll need it later.
44
date: 2025-04-16
5-
authors:
6-
- name: Armin Sabouri
5+
authors: arminsabouri
76
tags: [privacy, integrations, cut-through]
87
---
98

9+
1010
[Liana](https://wizardsardine.com/liana/) secures bitcoin such that after time passes, if and only if you haven't yet spent your coins, your heirs can spend them. This condition is called a "timelock" contract. To prevent unintentional activation of this inheritance policy, these timelocked coins require periodic refreshing by being spent into a new timelock. Liana's Payjoin integration automates timelock refresh as payments are received, boosting privacy and cutting costs.
1111

12+
<!-- truncate -->
13+
1214
Timelock contracts define some time in the future when funds can be spent by heirs. Before that, only the primary owner can spend the funds. However, there's a catch: most users do not frequently spend their Bitcoin. A [2024 study](https://www.sciencedirect.com/science/article/pii/S0378437124008045) found that the age of unspent coins follows a power-law distribution (see Figure 3 that study). In practice, this means coins are typically either spent soon after receipt or held for long periods. [Data also suggests](https://charts.bitbo.io/hodl-waves/) that most coins remain unspent for months or years. To avoid unintentionally triggering a recovery path, users often resort to reconciliation of their coins to reset timelocks.
1315

1416
<img alt="Liana time locked coins" src="/img/liana-expiring.png" />

blog/2025-08-08-announcing-payjoin-foundation.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,17 @@
22
title: Announcing Payjoin Foundation
33
description: Launching our non-profit organization to recruit and accept donations
44
date: 2025-08-08
5-
authors:
6-
- name: Dan Gould
5+
authors: dangould
76
tags: [Announcement, Foundation]
87
---
98

9+
1010
Commercial attempts to solve Bitcoin’s privacy problems have faced tremendous barriers. Short-term profit motives have delivered partial and temporary solutions, but transacting privately on Bitcoin remains a challenge.
1111

1212
We formed Payjoin Foundation to pursue the long-term mission of addressing Bitcoin’s privacy problems. Our non-profit exists to develop open-source protocols that align economic incentives with network-wide privacy protection. We believe that users have a right to choose whether or not to reveal their on-chain activity, and that such protocols can even offer a more convenient and delightful experience than those that don't respect this choice.
1313

14+
<!-- truncate -->
15+
1416
We are fortunate to have been graced by dozens of volunteer contributors with thousands of commits to our open-source Payjoin Dev Kit software stack. The Payjoin Foundation enables us to recruit and fund talent aligned with our mission. [Armin Sabouri](https://github.com/arminsabouri) and [Spacebear](https://github.com/spacebear21) will continue to lead contributors in research and development. [Satsie](https://satsie.dev) of The Bitcoin Dev Project, Justin of Localhost Research, and myself are serving as the inaugural board.
1517

1618
Initial funding for Payjoin Foundation is graciously provided to us by [OpenSats](https://opensats.org/blog/elevent-wave-of-bitcoin-grants). Support for the Payjoin project from [Spiral](https://spiral.xyz), [Human Rights Foundation](https://hrf.org), and [Maelstrom](https://maelstrom.fund/bitcoin-grant-program) has been invaluable to our mission. Special thanks to [Chaincode Labs](https://learning.chaincode.com/) for incubating so many scrappy, consistent Payjoin contributors through the ₿OSS program. Our gratitude goes out to those supporters and contributors without which this organization would not be possible. Thank you.

blog/2025-09-23-yuval-kogman-foundation-advisor.md

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
title: Yuval Kogman Joins Payjoin Foundation as Advisor
33
description: Payjoin Foundation Appoints Spiral Bitcoin Wizard to Advisory Board
44
date: 2025-09-23
5-
authors:
6-
- name: Dan Gould
5+
authors: dangould
76
tags: [Announcement, Foundation, Advisor]
87
---
98

9+
1010
Spiral Bitcoin Wizard and longtime Bitcoin privacy developer Yuval Kogman joins
1111
Payjoin Foundation as the first Advisory Board member. He draws on more than two
1212
decades of programming experience. Few others can boast Yuval's dedication to
@@ -18,6 +18,8 @@ implementations](https://groups.google.com/g/bitcoindev/c/CbfbEGozG7c),
1818
including those touting WabiSabi integration, demonstrates his commitment to the
1919
underlying principles.
2020

21+
<!-- truncate -->
22+
2123
Prior to his current focus on Payjoin, Yuval had already been working on a decentralized, multiparty
2224
transaction batching protocol. We have joined forces to develop [this
2325
next-generation batching](https://payjoindevkit.org/2025/03/18/the-evolution-of-payjoin/)
@@ -58,7 +60,7 @@ solutions where everybody wins and invests heavily in budding talent.
5860
He is uncompromising when it comes to his values, so his advice keeps us
5961
focused on the mission.
6062

61-
[Spiral](spiral.xyz)'s unwavering support for the Payjoin mission began in 2023, when they initially
63+
[Spiral](https://spiral.xyz)'s unwavering support for the Payjoin mission began in 2023, when they initially
6264
[extended me a grant](https://nitter.net/spiralbtc/status/1747663472836431925) to lead Payjoin development. Since then, they have
6365
funded multiple developers, including [Spacebear](https://nitter.net/spiralbtc/status/1961473589049245895), our team's integrations
6466
expert. Payjoin also owes a debt of gratitude to Spiral for their

blog/authors.yml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
dangould:
2+
name: Dan Gould
3+
url: https://github.com/DanGould
4+
image_url: https://github.com/DanGould.png
5+
email: d@ngould.dev
6+
socials:
7+
github: DanGould
8+
9+
nothingmuch:
10+
name: Yuval Kogman
11+
url: https://github.com/nothingmuch
12+
image_url: https://github.com/nothingmuch.png
13+
socials:
14+
github: nothingmuch
15+
16+
arminsabouri:
17+
name: Armin Sabouri
18+
url: https://github.com/arminsabouri
19+
image_url: https://github.com/arminsabouri.png
20+
socials:
21+
github: arminsabouri
22+
23+
spacebear:
24+
name: spacebear
25+
url: https://github.com/spacebear21
26+
image_url: https://github.com/spacebear21.png
27+
socials:
28+
github: spacebear21
29+
30+
conorokus:
31+
name: Conor Okus

docusaurus.config.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,11 @@ const config: Config = {
2020
projectName: "payjoin.org", // Usually your repo name.
2121

2222
onBrokenLinks: "throw",
23-
onBrokenMarkdownLinks: "warn",
2423
markdown: {
2524
mermaid: true,
25+
hooks: {
26+
onBrokenMarkdownLinks: "warn"
27+
}
2628
},
2729
themes: ['@docusaurus/theme-mermaid'],
2830

0 commit comments

Comments
 (0)