PayJoin 交互實戰:隱藏交易金額的進階技術
深入理解 PayJoin (P2EP) 協議,如何在點對點交易中隱藏輸入輸出關聯,打破區塊鏈分析假設。
PayJoin 交互實戰:隱藏交易金額的進階技術
PayJoin(又稱 P2EP - Pay to Endpoint)是比特幣隱私保護的高階技術,它利用巧妙的交易結構設計,使區塊鏈分析無法簡單地假設交易的輸入都屬於同一個所有者。
為什麼需要 PayJoin?
比特幣區塊鏈分析的基本假設是:
- 一筆交易的所有輸入屬於同一個人
- 輸出金額總是小於等於輸入金額(扣除費用)
這個假設讓區塊鏈分析變得相對簡單。PayJoin 打破了這個假設。
PayJoin 的核心原理
傳統交易 vs PayJoin
傳統交易(2 輸入 2 輸出):
輸入: A (1 BTC), B (1 BTC) → 輸出: C (1.5 BTC), D (0.49 BTC)
↓
費用: 0.01 BTC
分析結論:A 和 B 很可能是同一個人(或有關聯)。
PayJoin 交易(2 輸入 3 輸出):
輸入: A (1 BTC), B (1 BTC) → 輸出: C (1.8 BTC), D (0.1 BTC), E (0.09 BTC)
↓
費用: 0.01 BTC
分析結論:
- C 的金額(1.8)大於任何單一輸入,無法確定誰是付款方
- D 的金額很小,可能是找零
- E 可能是收款方的找零
關鍵洞察:外部觀察者無法確定哪個輸出屬於哪個輸入!
PayJoin 協議詳解
協議版本
PayJoin 有兩個主要版本:
- BIP-78 (PayJoin): 標準化的 HTTP 協議
- Original P2EP: 較早期的實現
BIP-78 PayJoin 工作流程
┌─────────────────┐ ┌─────────────────┐
│ 付款方 (Payer) │ │ 收款方 (Payee) │
└────────┬────────┘ └────────┬────────┘
│ │
│ 1. 發送接收地址 + 金額 │
│ ─────────────────────────────────────────→ │
│ │
│ 2. 返回 BIP-78 URL (包含公鑰) │
│ ←───────────────────────────────────────── │
│ │
│ 3. 構建交易(包含自己的輸入) │
│ ─────────────────────────────────────────→ │
│ │
│ 4. 添加自己的輸入、修改輸出 │
│ ←───────────────────────────────────────── │
│ │
│ 5. 簽名並廣播 │
│ ─────────────────────────────────────────→ │
│ │
詳細步驟
步驟 1:請求支付
付款方向收款方請求 PayJoin 付款頁面:
GET /pay?amount=0.1&label=Payment%20for%20coffee
收款方返回:
{
"payment_url": "bitcoin:bc1q...?amount=0.1&pj=https://example.com/pj",
"outputs": [
{
"script": "0020...",
"amount": 10000000
}
]
}
步驟 2:創建部分簽名交易
付款方創建交易並添加自己的輸入:
// 付款方的輸入
const payerInput = {
txid: "abc123...",
vout: 0,
amount: 15000000, // 0.15 BTC
scriptPubKey: "0020..."
};
// 收款方的輸出
const payeeOutput = {
script: "0020...", // 收款方地址
amount: 10000000 // 0.1 BTC
};
// 付款方的找零輸出
const changeOutput = {
script: "0020...", // 付款方找零地址
amount: 4900000 // 0.049 BTC (扣除費用)
};
// 費用
const fee = 100000; // 0.001 BTC
步驟 3:收款方添加輸入
收款方添加自己的輸入並調整輸出:
// 收款方添加自己的輸入
const payeeInput = {
txid: "def456...",
vout: 1,
amount: 5000000, // 0.05 BTC
scriptPubKey: "0020..."
};
// 修改後的輸出
const outputs = [
{
script: "0020...", // 收款方地址
amount: 11000000 // 0.11 BTC (多付 0.01 BTC)
},
{
script: "0020...", // 付款方找零地址
amount: 3900000 // 0.039 BTC
},
{
script: "0020...", // 收款方找零地址
amount: 3900000 // 0.039 BTC
}
];
步驟 4:簽名與廣播
雙方完成簽名後廣播交易。
實際使用 PayJoin
支援的錢包
| 錢包 | PayJoin 支援 | 說明 |
|---|---|---|
| JoinMarket | 是 | 完整支援 BIP-78 |
| Samourai Wallet | 是 | 透過 ricochet |
| BlueWallet | 是 | 接收端支援 |
| BTCPay Server | 是 | 商家解決方案 |
| Wasabi Wallet | 開發中 | 即將支援 |
使用 JoinMarket
JoinMarket 是最完整的 PayJoin 實現:
# 安裝 JoinMarket
git clone https://github.com/JoinMarket-Org/joinmarket-clientserver
cd joinmarket-clientserver
./install.sh
# 啟動錢包
python wallet_tool.py create
# 發起 PayJoin 支付
python pay-join.py --maker-amount 0.05 --taken-amount 0.01
接收 PayJoin 付款
使用 BTCPay Server 的商家可以輕鬆接收 PayJoin:
# BTCPay Server 會自動處理 PayJoin
# 客戶掃描 QR 碼即可發起 PayJoin
PayJoin 的優勢
隱私優勢
- 打破輸入所有權假設:無法確認哪些輸入屬於同一個人
- 金額模糊:付款金額被隱藏在更大的總金額中
- 難以檢測:看起來像普通的多輸入交易
實際效益
- 商家和客戶都能受益:雙方都獲得隱私提升
- 無需特殊信任:協議設計防止欺詐
- 可疊加使用:可以與 CoinJoin 等其他技術疊加
PayJoin 的局限性
檢測可能性
雖然 PayJoin 難以檢測,但並非完全隱形:
- 金額模式:特殊的金額組合可能成為指紋
- 時間相關性:CoinJoin 協調時間可能有模式
- 網路分析:節點識別可能提供線索
實用限制
- 需要對手方:需要願意參與的收款方
- 技術複雜度:比普通交易複雜
- 費用:可能比普通交易稍高
PayJoin 最佳實踐
商家端
- 啟用 PayJoin:在錢包/支付處理器中啟用
- 推廣使用:告知客戶可以使用 PayJoin
- 記錄分離:PayJoin 收到的資金與其他資金分開處理
個人端
- 尋找支援的商家:越多商家支援越好
- 適當金額:選擇合理的 PayJoin 金額
- 持續使用:偶爾使用比從不使用好
與其他隱私技術的比較
| 技術 | 難度 | 隱私程度 | 需要對手 |
|---|---|---|---|
| 標準交易 | 低 | 低 | 否 |
| CoinJoin | 中 | 中 | 是(多個) |
| PayJoin | 中 | 高 | 是(1個) |
| 洋蔥路由 | 中 | 高 | 否 |
未來發展
PayJoin 的未來發展方向:
- 更廣泛採用:更多錢包和商家的支援
- 協議改進:更好的標準和兼容性
- 隱私增強:與 Schnorr 簽名等技術結合
常見問題
Q: PayJoin 是否會讓我惹上麻煩?
A: 不會。PayJoin 是一種合法的隱私保護技術,在大多數國家都是合法的。
Q: 我需要多少比特幣才能使用 PayJoin?
A: 理論上任何金額都可以,但金額太小可能不實際。
Q: PayJoin 會失敗嗎?
A: 可能會,如果對手方在過程中放棄或有技術問題。這也是為什麼要使用可靠的錢包。
Q: PayJoin 和 CoinJoin 哪個更好?
A: 兩者有不同的用途。CoinJoin 需要多個參與者,PayJoin 只需要一個交易對手。它們可以疊加使用。
結論
PayJoin 代表了比特幣隱私保護的重要進步。它巧妙地利用比特幣交易結構的特點,在不需要多個參與者的情況下提供強大的隱私保護。
隨著更多錢包和商家的支援,PayJoin 有望成為比特幣隱私的標準實踐。對於注重隱私的用戶來說,了解和使用 PayJoin 是值得考慮的選擇。
本文包含
相關文章
- CoinJoin 實戰:比特幣混合交易完整教學 — 從零開始學習 CoinJoin 實際操作流程,包括 Wasabi Wallet 與 Samourai Wallet 的使用教學與注意事項。
- 灰塵攻擊與狼煙協議:比特幣隱私保護進階 — 了解灰塵攻擊 (Dust Attack) 的運作原理,以及如何使用狼煙協議 (Dust Protection) 進行防禦與追蹤。
- 比特幣隱私保護實作指南 — 從基礎到進階的比特幣隱私保護實作教學,包含 CoinJoin、PayJoin、Taproot 地址的實際操作流程與注意事項。
- 比特幣隱私技術完全實踐指南:從基礎到進階操作 — 提供比特幣隱私技術的完整實踐指南,涵蓋地址管理、UTXO 策略、CoinJoin、PayJoin、Taproot 隱私應用與主流隱私工具的實際操作教學。
- 比特幣隱私保護機制:進階實務教學 — 深入介紹 CoinJoin、PayJoin、Taproot 等隱私技術的運作原理與實務操作,提供隱私風險評估與保護策略。
延伸閱讀與來源
這篇文章對您有幫助嗎?
請告訴我們如何改進:
評論
發表評論
注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。
目前尚無評論,成為第一個發表評論的人吧!