“族群交易池” 的好處

作者:Murch

來源:https://x.com/murchandamus/status/1854678133896626293

每一個全節點都在自己的 “內存池” 中存儲著未確認的交易。(內存池)這種緩存是節點的一項重要的資源,它帶來了點對點的交易轉發網絡。通過在新區塊宣佈之前瞭解和驗證(其中將包含的)絕大部分交易,區塊傳播也能更快。

通過觀察哪些交易先出現在交易池中、然後又得到區塊確認,節點可以單方面估計未成功競標一段區塊空間、讓一筆交易得到確認的必要手續費率。

節點轉發交易給它所有的對等節點,對用戶隱私性和網絡的審查抗性至關重要。快速且不受限制地獲取未確認交易,允許任何人構造有競爭力的區塊模板、免許可地成為礦工。

當前,Bitcoin Core 從 “祖先” 的角度來跟蹤每一筆交易。先挑選具有最高祖先集合費率的交易進入區塊、然後更新所有受影響的後代交易的祖先集合以及費率,如此不斷重複,貪婪地組裝起一個區塊模板。

Gbz75fxWUA4YyFd

這種方法有個缺點:我們需要在構造區塊模板的同時不斷更新交易數據,而且,我們只能在考慮了所有的相關因素之後才能預測一筆交易的挖礦分數(把它選入一個區塊的費率)。

有些時候,對區塊空間的需求會變得非常迫切,以至於我們的節點會收到超過它能緩存的數量的交易。而一旦交易池溢出,我們就需要驅逐對挖礦最沒有吸引力的交易。

不幸的是,由於一筆交易可能依賴於其它交易,我們只能在計算出所有排在它前面的交易之後,才能準確預測哪一筆交易是最沒有吸引力的。如果每次驅逐一筆交易都要付出這麼大的計算量,那是無法接受的。

因此,我們採用啟發式方法來不完美地評估哪個交易應該先被驅逐。此外,我們還會從 “後代集合” 的角度來跟蹤每一筆交易,使用後代集合分數的低分作為驅逐交易的指標。

Gb0DoqUWIAkhtFp

如果我們交易池中一筆單體交易或者一個葉子交易的後代集合費率是最低的,那麼,這個結果是準確的 —— 可以驅逐它。然而,這種啟發式方法可能無法正確識別出最後被選入區塊模板的交易。

Gb0EeLvXgAg3_S6

在上面的交易圖案例中,“交易 J” 的祖先集合費率最高,將跟它的祖先 “交易 F” 一起挖出;但是 F 本身具有最低的後代集合費率,所以將連同它所有的後代交易(也包括 J)被驅逐。

Gb0HfFlWEAYm722

最後,眾所周知,Bitcoin Core 所用的 RBF(交易的手續費替換)規則受 BIP-125 啟發,並不總能產生激勵兼容的替換交易。我們確切地知道有些情況下,替代交易被接受並不能提升交易池狀況;而有些情況下,能夠提升交易池狀況的替代交易會被拒絕。

Gb0K-aTXIA4MW7b

- 為了展示一些具體的激勵兼容問題,來看這樣一個例子,“交易 A” 和 “交易 B” 已經在交易吃中,而 “交易 A' ”(與交易 A 衝突)到來了。 -

這就要講到 “族群交易池(Cluster Mempool)” 提議了(感謝 Suhas Daftuar 和 Pieter Wuille):如果我們總是能夠知道整個交易池 的排序、總是知道每一筆交易的挖礦分數,那是多麼美妙?

我們不再使用 “祖先集合” 和 “後代集合” 這樣的視角來跟蹤交易,而是跟蹤交易的 “族群” —— 相關交易整個 “家庭” 。

Gb0L7uNXkAQjVbg

每一筆交易都只屬於一個族群。從屬於一個族群的任何一筆交易開始,加入它所有的子交易和親交易(以及這些子交易的子交易、親交易的親交易,週而復始),就能完整地找出這個族群。

然後,我們可以 “線性化” 每個族群:我們可以將交易圖轉化為一個列表,將它們按照可能會選入區塊模板的優先級給它們排序。

Gb0PQxHX0Ag6St6

到目前為止,我們可以將族群線性化視作在一個族群中運行一次區塊構造算法並記錄這些交易進入區塊的順序。

在一個規模巨大、結構複雜的族群中計算線性化可能是計算密集的。

在族群上運算的計算成本限制了它們的規模。我們可以暫時擱置這個問題,但如果你想了解更多,Pieter Wuille 在 Delving Bitcoin 論壇上些了一篇討論如何高效地線性化集群的論文:Introduction to cluster linearization

以前,我們使用祖先集合來發現(比如說)CPFP 中的子交易讓同時打包親交易和子交易變得有吸引力的情形。

Gb0iITJXgAIy8OR

而族群線性化,則讓我們可以輕易識別出自然會一同打包到區塊中的交易片段。當高費率交易跟在低費率交易的後面,我們就可以將它們劃分為 “分家”。

Gb0VK1nWAAMU8pF

這些分家對比祖先集合,有巨大的優勢:(1)對比親交易帶有更高費率的多筆子交易,可以自然形成一個分家,這個分家的分率會高於任何一個子交易的祖先集合費率!

Gb0bE7WWUAAc2tP

(2)一個分家的費率只取決於分家內的交易。甚至當某個祖先被選入區塊,一個分家的費率也將保持不變 —— 我們可以預先計算出分家的費率,並讀取它們作為分家內所有交易的挖礦分數!

從而,區塊構造將直接變成在所有族群中重複地挑選出帶有最高費率的分家,直到區塊模板滿載。這也給了我們對整個交易池的隱式全局排序。

Gb0dn8nXAAslUGj

這同時也意味著,我們完全直到哪個分家會被最後挖出。驅逐直接變成了在所有族群中將費率最低的分家移除。

Gb0jAIFXQAYsb94

結論是,“族群交易池” 給了我們:

  • 更快的區塊構築速度
  • 總是可用的挖礦分數
  • 近乎最優小莊的驅逐
  • 更好的框架(所謂的 “費率圖”)來思考交易包 RBF

代價僅僅是一些預先計算的成本以及對族群的規模施加約束。

Gb0fXcgWAAsx6yi

(完)

相关赛道:
來源
免責聲明:以上內容僅為作者觀點,不代表Followin的任何立場,不構成與Followin相關的任何投資建議。
喜歡
收藏
評論