Unconfirmed-Transactions

在 BIP65 之後,小額支付渠道是否仍然具有延展性?

  • September 13, 2016

在 BIP 65 之後,簡單、單向、MPC 是否仍然受制於交易延展性?

進一步來說:

**收款人是否因為延展性而面臨風險?**如果是,如何?(據我了解,收款人不再有風險)

**付款人是否因為延展性而面臨風險?**如果是,如何?(據我了解,收款人仍有風險)

建構小額支付渠道有多種不同的方式,但我認為有兩種設計與您關於“簡單、單向、小額支付渠道”的問題特別相關:

  • Spillman 式小額支付渠道:這是在BIP65 ( OP_CHECKLOCKTIMEVERIFY, CLTV)之前普遍描述的小額支付渠道設計。Spillman 風格的通道於 2013 年 4 月由 Jeremy Spillman 首次描述,並於2013年在 BitcoinJ 庫中實現。
  • **CLTV 風格的小額支付渠道:**這是一種建構支付渠道的新方式,當 CLTV 於 2015 年 12 月中旬開始實施時,這種方式成為可能。BIP65 作者 Peter Todd 將 CLTV 風格的渠道描述為 BIP 的一部分,並在兩個 1- 2016年2 月的蟒蛇

以下兩節描述了延展性如何與這兩種不同類型的小額支付渠道相關聯。

斯皮爾曼式小額支付渠道的延展性

BIP65 不會改變延展性如何影響 Spillman 風格的小額支付渠道,因此以下描述在 BIP65 實施之前和現在都是正確的(至少對於不使用隔離見證的交易)。

Spillman 風格的小額支付渠道是使用商戶(接收資金的人)和客戶(花費資金的人)之間的以下事件序列建構的:

  1. 商家將他的公鑰提供給客戶。
  2. 客戶使用他的公鑰和商家的公鑰來建構一個多重簽名 P2SH 地址[1],該地址需要商家和客戶雙方的簽名才能將支付給該地址的任何資金用於支付。
  3. 客戶生成(但不傳輸)支付多重簽名 P2SH 地址的交易。
  4. 客戶生成第二筆交易,將第一筆交易花回客戶的一個地址,給該交易一個鎖定時間(因此直到特定時間才能將其添加到區塊鏈中),並簽署該交易。
  5. 客戶將第二筆交易交給商家(沒有給他第一筆交易),商家簽署並將簽署的交易退還給客戶。
  6. 現在,如果商家在達到鎖定時間之前沒有做任何事情,客戶將能夠使用第二筆交易(稱為退款交易)來要求退款。
  7. 在保證了備用退款的情況下,客戶廣播第一筆交易(稱為存款交易),以便將其添加到區塊鏈中。
  8. 現在客戶可以簽署沒有鎖定時間的退款交易的替代方案(稱為支付交易),因此可以立即添加到區塊鏈中,除了它們還需要商家的簽名。通過將這些提供給可以共同簽署它們的商家(無需將它們退還給客戶),商家可以放心,他可以在退款交易生效之前將它們添加到區塊鏈中。

延展性問題出現在上述第七步,即廣播存款交易時。如果添加到區塊鏈的交易與商家在第五步中籤署的退款交易不是逐字節相同,則退款交易不再有效,因為它嘗試使用不同的 txid 進行交易比存款交易。

商家仍然可以自願與客戶合作以退還客戶的錢,但這意味著我們沒有我們想要的去信任式小額支付渠道。

**關於隔離見證 (segwit) 的說明:**由於 segwit 消除了延展性類型,這種延展性允許某人在未經客戶許可的情況下更改存款交易的 txid,因此使用 segwit 的交易可以安全地使用 Spillman 式小額支付渠道而沒有延展性風險-造成了問題。在撰寫本文時,segwit 尚未在主網上實現,但我預計它遲早會實現,所以我在這里為這個答案的未來讀者描述這一點。請注意,在這種情況下,為了消除延展性,隔離見證是客戶必須使用的可選功能,因此隔離見證本身的啟動不會自動消除 Spillman 式渠道中的延展性。

[1] 也可以使用裸多重簽名(沒有 P2SH 地址的多重簽名)。

CLTV 式小額支付渠道的延展性

CLTV 風格的小額支付渠道是使用商家和客戶之間的以下事件序列建構的。這些步驟在啟動隔離見證之前和之後都是相同的。

  1. 商家將他的公鑰提供給客戶。

  2. 客戶使用他的公鑰和商家的公鑰來建構一個 P2SH 地址,該地址需要滿足以下任一條件:

  3. 商家和客戶都簽署從該 P2SH 地址花費的任何交易。

  4. 只需客戶簽署從該 P2SH 支出的任何交易——但這些支出交易的鎖定時間必須大於退款時間。

  5. 客戶生成並立即廣播存款交易。客戶確信他們能夠根據上述條件 2.2的要求生成退款交易。

  6. 現在,客戶可以使用上述條件 2.1 對支付給商家的付款交易進行半簽名(簽署 1-of-2 所需的簽名)。商家可以生成第二個簽名(無需將其提供給客戶)並確保在客戶可以將退款交易添加到根據條件 2.2 的條款生成的區塊鏈之前,他可以廣播最終付款交易。

這個過程消除了對 CLTV 式小額支付渠道的延展性的擔憂,儘管它並沒有消除延展性本身。因為客戶可以根據上述條件 2.2 隨時生成退款交易,所以他不需要預先送出特定的 txid;他可以等到存款交易被添加到區塊鏈中並且其 txid 幾乎不可變,然後再生成退款交易。

如果儘管等待多次確認,但仍然發生延展性,客戶總是可以使用他的私鑰生成並簽署新的退款交易。這是因為根據 P2SH 地址中的條件 2.2,所需要的只是來自授權密鑰的簽名加上某個日期之後的鎖定時間。

如果在接受任何付款後存款交易 txid 發生變化,則商家可能會受到延展性的影響。出於這個原因,最好讓商家在接受任何付款交易之前等待存款交易收到至少一個確認(等待更多確認將提供更多安全性,建議用於高價值)。由於商家應該等待存款交易以任何方式收到確認,以防止客戶重複消費(在 Spillman 風格的渠道中也是如此),這種延展性來源不會顯著影響安全性模型。

結論

BIP65 沒有修復舊的 Spillman 風格渠道的延展性,但它確實使不受交易延展性不利影響的 CLTV 風格的支付渠道成為可能。當存款交易中的所有輸入都來自隔離見證輸出時,隔離見證還將修復 Spillman 式渠道的延展性。

引用自:https://bitcoin.stackexchange.com/questions/48243