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

分析結論:

關鍵洞察:外部觀察者無法確定哪個輸出屬於哪個輸入!

PayJoin 協議詳解

協議版本

PayJoin 有兩個主要版本:

  1. BIP-78 (PayJoin): 標準化的 HTTP 協議
  2. 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 的優勢

隱私優勢

  1. 打破輸入所有權假設:無法確認哪些輸入屬於同一個人
  2. 金額模糊:付款金額被隱藏在更大的總金額中
  3. 難以檢測:看起來像普通的多輸入交易

實際效益

PayJoin 的局限性

檢測可能性

雖然 PayJoin 難以檢測,但並非完全隱形:

  1. 金額模式:特殊的金額組合可能成為指紋
  2. 時間相關性:CoinJoin 協調時間可能有模式
  3. 網路分析:節點識別可能提供線索

實用限制

  1. 需要對手方:需要願意參與的收款方
  2. 技術複雜度:比普通交易複雜
  3. 費用:可能比普通交易稍高

PayJoin 最佳實踐

商家端

  1. 啟用 PayJoin:在錢包/支付處理器中啟用
  2. 推廣使用:告知客戶可以使用 PayJoin
  3. 記錄分離:PayJoin 收到的資金與其他資金分開處理

個人端

  1. 尋找支援的商家:越多商家支援越好
  2. 適當金額:選擇合理的 PayJoin 金額
  3. 持續使用:偶爾使用比從不使用好

與其他隱私技術的比較

技術難度隱私程度需要對手
標準交易
CoinJoin是(多個)
PayJoin是(1個)
洋蔥路由

未來發展

PayJoin 的未來發展方向:

  1. 更廣泛採用:更多錢包和商家的支援
  2. 協議改進:更好的標準和兼容性
  3. 隱私增強:與 Schnorr 簽名等技術結合

常見問題

Q: PayJoin 是否會讓我惹上麻煩?

A: 不會。PayJoin 是一種合法的隱私保護技術,在大多數國家都是合法的。

Q: 我需要多少比特幣才能使用 PayJoin?

A: 理論上任何金額都可以,但金額太小可能不實際。

Q: PayJoin 會失敗嗎?

A: 可能會,如果對手方在過程中放棄或有技術問題。這也是為什麼要使用可靠的錢包。

Q: PayJoin 和 CoinJoin 哪個更好?

A: 兩者有不同的用途。CoinJoin 需要多個參與者,PayJoin 只需要一個交易對手。它們可以疊加使用。

結論

PayJoin 代表了比特幣隱私保護的重要進步。它巧妙地利用比特幣交易結構的特點,在不需要多個參與者的情況下提供強大的隱私保護。

隨著更多錢包和商家的支援,PayJoin 有望成為比特幣隱私的標準實踐。對於注重隱私的用戶來說,了解和使用 PayJoin 是值得考慮的選擇。

本文包含

延伸閱讀與來源

這篇文章對您有幫助嗎?

評論

發表評論

注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。

目前尚無評論,成為第一個發表評論的人吧!