Implement PayJoin (BIP78) in Grimm App to improve on-chain transaction privacy by allowing the receiver to contribute an input to the transaction.
This breaks common blockchain heuristics (e.g., input ownership assumptions) and makes transactions more private without requiring complex user interaction.
Objectives
- Improve transaction privacy without complex UX
- Break common chain analysis heuristics
- Maintain a seamless payment experience
Scope
1. PayJoin Transaction Flow
2. Receiver Side (Optional – Advanced)
3. Security & Validation
4. UX/UI
Acceptance Criteria
- Wallet detects and processes PayJoin invoices
- Transaction includes inputs from both sender and receiver
- Privacy heuristics (common-input ownership) are broken
- No degradation of UX for non-technical users
- Works on testnet
Risks / Considerations
- Requires receiver support (low adoption currently)
- Endpoint availability issues
- Additional round-trip latency
- Complex validation logic
References
- BIP78 specification
- PayJoin Dev Kit (PDK)
- BIP21 URI scheme
Nice-to-have (Future)
- PayJoin batching
- Integration with merchants
- Stats: “Privacy improved via PayJoin”
Implement PayJoin (BIP78) in Grimm App to improve on-chain transaction privacy by allowing the receiver to contribute an input to the transaction.
This breaks common blockchain heuristics (e.g., input ownership assumptions) and makes transactions more private without requiring complex user interaction.
Objectives
Scope
1. PayJoin Transaction Flow
Detect PayJoin-capable invoices (BIP21 with
pj=parameter)Fallback to normal transaction if PayJoin not available
Build initial PSBT (sender side)
Send PSBT to receiver endpoint
Receive modified PSBT (with receiver input added)
Validate updated transaction:
Sign and broadcast final transaction
2. Receiver Side (Optional – Advanced)
3. Security & Validation
Verify:
Protect against:
4. UX/UI
Acceptance Criteria
Risks / Considerations
References
Nice-to-have (Future)