選擇性 RBF 常見問題
概覽
- 什麼是選擇性 RBF?
- 這是一個新功能嗎?
- 它用於什麼?
- 它是如何運作的?
- 選擇性 RBF 實作是否改變了「非 RBF」交易被雙重支付的可能性?
- 選擇性 RBF 是否使欺詐性支付顯著更成功?
- 選擇性交易本身是否是專門欺詐者更有用的工具,假設人們在沒有確認的情況下接受它們?
- 為什麼未確認的交易不安全?
- 誰發明了未確認交易替換?這是否違背了 Bitcoin 的「願景」?
- 選擇性 RBF 拉取請求有爭議嗎?
- 這項變更何時以及如何啟動?
- 選擇性 RBF 僅對調整手續費有用嗎?
- 錢包是否需要保持線上以發出更高手續費的替換?
- 選擇性 RBF 是否增加了「懶惰」交易處理器被詐騙的風險?
- 如果我認為 RBF 很糟糕怎麼辦?
- 為什麼實作「選擇性」而不是讓礦工替換任何交易?
- 我聽說選擇性 RBF 的添加幾乎沒有討論
- 這可以用來對未準備好的(舊)錢包進行雙重支付嗎?所有錢包都必須更新嗎?
- 為什麼不使用首次看到安全的手續費替換 (FSS-RBF)
- 什麼是「子為父付」(CPFP)?
- 為什麼不使用 CPFP 來實作 RBF?
什麼是選擇性 RBF?
選擇性手續費替換 (RBF) 允許交易被標記為可替換,直到它們在區塊中被確認。
這是一個新功能嗎?
交易替換是由 Satoshi 在 Bitcoin 軟體的第一個版本中引入的,但後來由於阻斷服務問題而被移除。選擇性 RBF 透過要求替換交易支付更高的手續費來解決這個問題。
它用於什麼?
在交易等待確認的期間,一些錢包希望能夠更新這些交易,以增加其手續費(這可能有助於它們更快得到確認)、將多個交易壓縮為一個、創建背景 coinjoin(以提高隱私)或執行許多其他有用的操作。
它是如何運作的?
選擇性 RBF 是對記憶體池和網路中繼程式碼的變更,允許這些錢包可選擇性地向其交易添加一個信號,告訴完整節點這些特定交易可能會被更新(替換),直到它們在新區塊中得到確認為止。
選擇性 RBF 實作是否改變了「非 RBF」交易被雙重支付的可能性?
不會。交易必須被標記為可替換(序列號低於 MAX-1)才能讓選擇性 RBF 實作將其視為可替換。
選擇性 RBF 是否使欺詐性支付顯著更成功?
選擇性 RBF 對未使用它的交易沒有影響,也沒有人被強制使用它。一旦交易被確認,它就沒有效果。這意味著關心未確認交易的使用者可以繼續不使用 RBF。
選擇性交易本身是否是專門欺詐者更有用的工具,假設人們在沒有確認的情況下接受它們?
我們目前沒有理由相信它們是,至少對於使用已知最有效工具和做法的欺詐者來說不是顯著的。但如果是(或在更清楚它們不是之前),接收者可以透過繼續將具有非最大序列號的交易視為不安全來保護自己,直到它們得到確認為止。
因為使用選擇性 RBF 的支付者有能力增加他們的手續費,並可能減少他們的確認時間,即使有許多交易等待確認,要求他們的交易在為他們提供服務之前得到確認並不是不體貼的。
為什麼未確認的交易不安全?
Bitcoin 交易在異步分散式系統中中繼,在該系統中不存在全域一致的「第一」。Alice 首先看到的,Bob 可能第二個看到。Bitcoin 設計沒有提供機制讓 Alice 和 Bob 就這些交易中哪一個真正先到達成協議;他們所能做的就是等待看到這些交易中哪一個在最佳區塊鏈上的有效區塊中得到確認。
今天複雜的雙重支付攻擊者使用工具透過進行無害的衝突支付並查看哪些版本出現在哪些商家和哪些區塊中來映射網路連接性。這允許他們製作同一交易的兩個版本,一個發送給受害者,一個發送給礦工進行確認。
不可替換支付給商家的存在阻止了他的節點了解雙重支付,直到它出現在礦工開採的區塊中,而該礦工只是開採了他們首先看到的東西。這種簡單、常見的模式有時會被其他技術進一步放大,例如使用未確認的交易鏈、低手續費或非標準交易。
因此,未確認交易的絕大部分安全性不是來自 Bitcoin 系統內部,而是來自外部因素,例如永遠不會試圖欺騙其供應商的大量誠實 Bitcoin 使用者、供應商對少量欺詐的容忍度、供應商訴諸法律系統或其他類型追索權的能力(或威脅),以及與 Bitcoin 協定設計無關的其他因素。
所有這些對於選擇性 RBF 同樣適用(它們與美國的信用卡支付情況並不不同,這些支付在交換後數月內很容易被撤銷,但欺詐率足夠低,幾乎所有重要商家都接受它們)。此外,因為 RBF 有時可以消除長時間的確認延遲,一些以前被迫接受未確認交易以防止不幸延遲的商家將不再需要這樣做,這減少了他們面臨欺詐的風險。
然而,沒有使用選擇性 RBF 的人堅持您同意上述關於未確認交易安全性的觀點。選擇性 RBF 是選擇性的,如果它不符合您的需求,您不需要使用它。
誰發明了未確認交易替換?這是否違背了 Bitcoin 的「願景」?
未確認交易的交易替換是 Bitcoin 第一個版本中的一個功能。交易可以透過設定非最大序列號將自己標記為可替換。後來這被停用,因為攻擊者可以以很小的成本耗盡完整節點之間的所有頻寬,從而造成阻斷服務漏洞。
此外,礦工沒有動機遵循慣例並接受替換,如果交易的早期版本支付了更高的手續費,甚至可能有動機違反慣例。
這兩個因素使替換在幾年內無法恢復,但在 2013 年 Peter Todd 提議要求替換支付嚴格更高的手續費率,並要求替換至少增加中繼新交易所需的最低手續費率。這消除了阻斷服務和激勵相容性問題。
Peter 的原始工作更進一步,將激勵相容性推向其邏輯結論,推論出對於匿名、短暫、自我選擇的礦工,您真正可以依賴的唯一行為是以更高手續費替換。更高的手續費偏好也可以使節點能夠根據手續費率在記憶體池中收斂到一組交易,而這對於只接受他們看到的第一個版本交易的節點來說是不可能的。
由於這些原因,以及因為系統以預期方式運作比系統以「不可預測但平均更好的方式」運作更安全和保護,他提議對所有交易進行替換。他還提議了一個以強烈激勵相容的方式消除雙重支付經濟收益的協定,稱為替換焦土,如果有人試圖對您進行雙重支付,您將所有資金用於手續費,這樣攻擊者就得不到它們。(但這是只有博弈論者才會真正喜歡的那種提議。)
在 Peter 的提議之後,我們收到了來自 Greenaddress 等錢包的請求,他們非常強烈地要求選擇性 RBF,因為他們真的需要一個合理的方式來處理手續費,並將選擇性 RBF 視為一個很好的方法,這就是為什麼提議被更改為符合 Satoshi 的原始選擇性行為。
選擇性 RBF 拉取請求有爭議嗎?
一點也不。經過幾個月前的廣泛非正式討論,PR 於 10 月 22 日開放。隨後在至少四次 Bitcoin 開發每週會議中進行了討論(2015-11-05、2015-11-12、2015-11-19 和 2015-11-26)。
在 PR 討論中,19 人發表了評論(包括至少三個不同錢包品牌的工作人員),14 人明確 ACK 了這項變更,包括至少一位過去曾對完整 RBF 非常直言不諱反對的人。在 PR 開放期間,PR 中(或我們所知的其他地方)沒有提供明確的負面反饋。
這項變更何時以及如何啟動?
選擇性 RBF 並沒有真正的「啟動」,因為它不是 Bitcoin 共識的一部分。這是一種本地政策行為,因此隨著人們採用行為不同的軟體,變更會一次一個節點地發生。網路上已經有一些節點以各種方式執行 RBF,而且已經有一段時間了,可能有數年之久。
Bitcoin Core 0.12 將於 2016 年 2 月左右發布,並將包含選擇性 RBF,之後可能還需要幾個月的時間,這種行為才會變得普遍。這可能會因開發使用它的有趣應用程式而加速。
選擇性 RBF 僅對調整手續費有用嗎?
不,錢包可以使用選擇性 RBF 做的另一件有用的事情是,當第一筆付款尚未確認時,將兩筆或更多筆付款合併為一筆付款。即使替換必須支付比原始交易更高的手續費,這也可以節省大量位元組和交易手續費。
選擇性 RBF 還可以用於實作更高級的合作穩定性方案,例如 交易切割。
各種智慧合約案例也需要替換,但它們通常使用 locktime 來創建更強的排序並解決歷史上替換不可用的問題;這些可能是在其原始設計中支援替換的 Bitcoin 協定的動機。
雖然除了調整手續費之外還有更多有趣的原因,但調整手續費的能力不應被低估。這意味著初始手續費可以使用較低的「最可能」估計,而不必「以防萬一」而多付;這導致即使很少進行替換時手續費也更低。
錢包是否需要保持線上以發出更高手續費的替換?
不需要。替換可以預先計算、時間鎖定,並提供給始終線上的遠端伺服器以供稍後廣播,而沒有伺服器可以竊取任何使用者資金的風險(最壞的情況是它未能廣播)。
例如。在區塊 100 時,錢包想要進行一筆設定為在 3 個區塊內確認的交易。錢包使用其對三區塊確認手續費的最佳估計,製作了一筆鎖定在 101 的交易,同時它還製作了鎖定在高度 104、105、106、107… 的替換交易,每筆支付(比如)上一筆手續費的 1.5 倍。這些可以交給接受高級 locktime 交易的節點。
即使礦工知道將來會支付更高的手續費,理性地他們仍然更喜歡現在可以包含的那個—因為如果他們等待,另一個礦工可能會拿走手續費。上述建議的乘法增加意味著,在最壞的情況下,交易會多付 50%,但仍然可以在少數交易中達到任意高的手續費。
選擇性 RBF 是否增加了「懶惰」交易處理器被詐騙的風險?
似乎不是這樣,至少不是顯著的,而且這是設計使然。選擇性 RBF 使用 nSequence 欄位發出信號,該欄位專門用於涵蓋可替換性。許多一般信任未確認交易的程式和平台已經將低序列號的交易視為可疑,並忽略它們直到它們確認為止。
還有數十種其他方式可以改變交易的確認速度或可靠性,並增加成功進行欺詐性雙重支付的機率:
- 支付低手續費
- 使用非標準標誌或版本
- 花費未確認的輸入
- 表現得像任何數量的阻斷服務攻擊模式
- 創建塵埃 txout
- 等等。
這些標準經常變化,並取決於使用者可配置的節點特定政策。試圖估計未確認付款風險的各方必須追蹤所有這些事情以及更多,並且他們必須主動回應變化。選擇性 RBF 是一個提前數月已知的高度溝通的添加,它覆蓋在已經檢測到的行為上。如果未確認交易警惕所需的努力有任何變化,它可能只是噪音。
除此之外,尚不清楚選擇性 RBF 交易實際上是否比非 RBF 交易對欺詐性雙重支付顯著更有用,至少對於使用複雜工具的攻擊者而言。
一些執行未確認置信度分析的各方已明確表示他們已經準備好了,如果有人知道仍需要幫助適應的軟體,請告訴我們,我們很樂意提供幫助。
如果我認為 RBF 很糟糕怎麼辦?
那就不要使用它:不要在您自己的交易上設定它,並將您收到的所有序列號小於 MAX_INT-1 的交易視為不存在(或已經被雙重支付),直到它們確認為止。選擇性 RBF 是選擇性的。
我們所知道的沒有常用軟體將其序列號設定為低於 MAX_INT-1,許多程式(包括「交易置信度」儀表)已經將低序列號視為可能被雙重支付。畢竟,交易已經被明確標記為可替換,即使沒有 RBF,nLocktime 也可能導致衝突首先得到確認。
如果有人向您發送可替換交易,而您不會零確認記入它,他們的替換可以使它以他們想要的速度得到確認。已經存在類似的情況,發送者使用非標準交易功能或花費未確認的輸出,這使得交易客觀上更容易被雙重支付—但在這些情況下,沒有修復方法可以快速完成交易。
RBF 是一個同意成年人的功能。如果您不想參與其中,您不需要。您對它的不喜歡不是阻止其他人在不涉及您的交易中使用它的理由。
為什麼實作「選擇性」而不是讓礦工替換任何交易?
現在沒有什麼可以阻止礦工替換甚至非選擇性交易,一些礦工以前曾自己嘗試過 RBF。透過提供可以滿足使用者對此功能需求的標準實作,礦工開始用更高手續費率變體替換任何交易的動機可能會減少。
我聽說選擇性 RBF 的添加幾乎沒有討論
最近的 RBF 討論可以追溯到 2015 年 5 月。
Github:
IRC 會議:
還有許多其他 #bitcoin-dev 和 #bitcoin-core-dev 的日誌。
郵件列表討論,沒有特定順序:
- [bitcoin-dev] 選擇性完整手續費替換 (Full-RBF)
- [Bitcoin-development] 首次看到安全的手續費替換
- [Bitcoin-development] 使用手續費替換節省成本,30-90%
- [bitcoin-dev] 雙重支付未確認交易造成的重大損失
- [bitcoin-dev] BIP: 完整手續費替換部署時間表
- [Bitcoin-development] 手續費替換 v0.10.0rc4
- [bitcoin-dev] 錢包如何處理真實的交易手續費
Satoshi 最初引入了未確認交易替換,但由於 DOS 攻擊而被停用(Peter Todd 透過要求每次替換都有更高的手續費來修復)。
這可以用來對未準備好的(舊)錢包進行雙重支付嗎?所有錢包都必須更新嗎?
未確認的交易始終可以被雙重支付,無論有沒有 RBF。欺詐目前很容易,RBF 不會改變這一點。
錢包只有在想要使用選擇性 RBF 時才需要更新。這為錢包提供了一個新的維度,讓他們可以創新並為使用者提供有益的功能。
為什麼不使用首次看到安全的手續費替換 (FSS-RBF)
FSS-RBF 意味著只有在完全花費所有先前輸出時才能修改交易。這可以防止雙重支付,但在實際使用時有三個問題:
-
它會導致交易大小增加,因為您必須為每次替換添加新的輸入。
-
許多錢包沒有備用輸入可以花費,因此他們根本無法使用 FSS-RBF。
-
它會降低隱私,因為它幾乎總是增加找零輸出的價值,公開將該輸出標記為找零。
什麼是「子為父付」(CPFP)?
子為父付是一種透過建立另一個依賴於第一個交易的交易來為交易添加手續費的方法。
為什麼不使用 CPFP 來實作 RBF?
子為父付 (CPFP) 不能解決同樣的問題。RBF 允許支付者增加手續費; CPFP 很有用,因為它允許接收者增加手續費。
RBF 優於 CPFP 的優勢在於它不一定需要使用任何額外的區塊空間,因此效率提高了約 30% 到 90%。
計劃同時支援 CPFP 和選擇性 RBF。
