為什麼 RBF 不包括對輸出的限制?
為什麼 RBF 規範不包括對替換交易的附加約束,例如它需要包含與被替換交易相同的輸出(至少具有原始輸出量)?難道這不能更安全地假設零確認 RBF 交易最終會在鏈上結算嗎?
我能想到的一個缺點是,每次更換 RBF 都需要額外的投入,因為費用增加需要來自某個地方。還有其他人嗎?
為什麼 RBF 規範不包括對替換交易的附加約束,例如它需要包含與被替換交易相同的輸出(至少具有原始輸出量)?
因為這樣做沒有那麼有效。您所描述的被稱為首次看到安全 RBF (FSS-RBF)。然而,這對交易施加了額外的限制,即使不是不可能,也很難增加費用。
FSS-RBF 特別需要花費額外的輸入。然而,如果沒有可用的輸入(例如,使用者有一個輸入,或者正在掃描他們的錢包),那麼交易就不能被替換。或者使用者可能希望通過避免將某些輸入一起花費來保留他們的隱私,因此如果他們沒有他們願意添加到交易中的輸入,那麼它就不能被替換。
此外,這會隨著每次碰撞而增加交易的大小,從而佔用越來越多的塊空間而幾乎沒有效用。不斷提高交易費用的成本也將非線性增長。除了您定位的新費率之外,您還必須為剛剛添加的該費率的輸入付費。
這也意味著不斷提高交易費用很煩人,而且最終是不可能的(由於缺乏輸入)。如果你壓低了費用,然後決定稍後再增加,這仍然太低,再次增加需要另一個輸入。等等等等。像這樣增加費用也會降低您未來進行 FSS-RBF 交易的能力,因為您將合併輸入。
相反,Full RBF 不需要額外的輸入,因此只要您有更改輸出,您就可以不斷遞減以獲取新費用。這意味著費用只會隨著費率的增長而增長,並且不需要更多的區塊空間。由於它不需要更多輸入,因此當您沒有可用的額外輸入時,您可以對碰撞交易進行收費。
難道這不能更安全地假設零確認 RBF 交易最終會在鏈上結算嗎?
不,事實上,這會使情況變得更糟。
假設 0 確認交易是安全的,意味著你願意花費它的輸出。在該支出交易中,您將明確引用其輸出正在被花費的交易的 txid。替換交易(在 RBF 和 FSS-RBF 中)意味著創建一個花費相同輸入的新交易,即雙花。這個新交易將有一個不同的 txid,因為它至少會改變輸出的數量,從而導致不同的數據被散列。因此,如果碰撞交易被確認,那麼任何花費較低費用交易輸出的交易都會立即失效。這根本不安全。
人們會認為如果使用 FSS-RBF(就像您所做的那樣)可以安全地接受未經確認的交易,這一事實遠比 Full RBF 危險得多。使用完整的 RBF,人們知道只需等待確認。使用 FSS-RBF,人們會認為未確認的交易可以安全地接受,花費其輸出,然後發現當原始未確認交易的碰撞版本被探勘時,他們的交易無效。這是一種虛假的安全感。
通常,無論 RBF、FSS-RBF 或根本沒有 RBF,都不能安全地接受未經確認的交易。無論哪種方式,未確認的交易都可能被沖突的交易替換,並導致從原始未確認交易中花費的任何交易變得無效。因為無論 RBF 和使用哪種類型的 RBF,危險都是相同的,所以可以替換任何輸出的完整 RBF 更好,因為它更節省空間和費用。
在BIP 125 本身中有一些關於 Full RBF over FSS-RBF 的動機的討論。