Bitcoin-Core

為什麼比特幣核心支持交易索引而不支持地址索引?

  • August 23, 2021

Bitcoin Core 具有 CLI 選項-txindex來維護 RPC 呼叫的完整交易索引。這聽起來對某些案例很有用,比如區塊鏈瀏覽器。似乎完全合乎邏輯的是,還應該有一個啟用地址索引的選項,這將允許查找地址餘額和交易歷史,但沒有。這是為什麼?為什麼-txindex首先包含在內?

交易索引之所以存在,是因為它是比特幣核心用於驗證新區塊和交易的方式遺留下來的。在 0.8.0 之前,Bitcoin Core 維護交易索引,在驗證交易時,會通過進入交易索引查找輸出,找到正在花費的交易,然後找到它的輸出。交易指數在驗證交易中是不可或缺的。

0.8.0 引入了一個名為 ultraprune 的功能,它為我們提供了我們今天擁有的驗證模型。ultraprune 所做的是擺脫了對交易索引的依賴,而是將 UTXO 儲存在單獨的數據庫中。新事務將通過在另一個數據庫中查找 UTXO 來驗證,當 UTXO 用完時,它會從數據庫中刪除。引入這是因為它更快,並且允許不建構事務索引,從而“修剪”數據庫。

但不是刪除所有交易索引程式碼,而是決定將該功能放在-txindex選項後面。這是因為已經有使用者依賴於查找任意交易的能力,所以如果 Bitcoin Core 只是從他們下面刪除這個功能就不好了。這就是我們今天擁有交易索引的方式——它不是因為人們想要它而實現的功能,而是比特幣最初工作方式的遺留物。

(旁注:我認為如果 Bitcoin Core 最初使用了 ultraprune 並且過去不需要交易索引,那麼就不會有交易索引功能。)


地址索引沒有以前存在的好處,所以它必須是全新的東西。並且有幾次嘗試實現地址索引,據我計算,4 次嘗試。它們都沒有被合併。

主要反對意見實際上是比特幣核心項目的範圍之一。為每個使用者提供區塊鏈瀏覽器真的在 Bitcoin Core 的範圍內嗎?這真的有必要嗎?如果是,那麼維護該功能是否值得?因為一旦添加了該功能,它基本上必須永久維護。

要了解為什麼許多貢獻者不贊成添加地址索引,我們需要了解案例是什麼。

正如您所提到的,它允許查找地址餘額,但這已經可以在沒有地址索引的情況下完成。完全沒有必要建立所有地址及其交易歷史的索引來計算它們的餘額;餘額計算可以使用 UTXO 集本身(每個節點都必須維護)來完成。事實上,Bitcoin Core 已經通過scantxoutsetRPC 實現了這一點。所以這個案例實際上並不需要地址索引。

正如您所提到的,它將允許查找地址的交易歷史記錄。但到目前為止,還沒有人真正想出一個令人信服的理由來說明為什麼這是有用的。能夠查看地址交易歷史當然很酷,但它是否很酷,以至於有必要將其實施到比特幣核心中,現在讓核心開發人員負擔永久維護它?

對於我看到的許多地址索引案例,似乎每個案例都需要稍微不同的數據,或者以稍微不同的方式格式化的數據。例如,Electrum 伺服器需要地址索引。目前他們有自己的(多個)軟體來建構地址索引並使用 Electrum 協議。但由於 Electrum 協議的一些怪癖,所有內容都以雜湊(而不是地址)的形式提供。因此,為了讓 Bitcoin Core 中的地址索引對 Electrum 有用,它還必須通過腳本雜湊進行索引。否則,Electrum 仍然需要編寫自己的軟體來建構自己的地址索引。

對於在地址索引之上建構此類服務,對於製作這些服務的人來說,自己建構地址索引似乎更合理。這樣他們就可以完全按照他們需要的方式儲存數據,而不是希望上游項目的開發人員以他們可以使用的方式儲存數據。

所以這真的歸結為這樣一個事實,沒有人想出一個令人信服的理由讓比特幣核心實現地址索引。對於所有需要地址索引的事物,他們可以建構自己的地址索引並根據需要對其進行定制。

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