Blockchain

使用瘦客戶端的人如何在不知道完整塊的情況下知道他們發送的交易的正確默克爾路徑?

  • December 11, 2021

使用者 A 向使用者 B 發送交易。這些交易被捆綁到一個默克爾樹中。使用者 A 和 B 都可以使用交易加上 merkle 根,加上 merkle 路徑來證明區塊頭中的 merkle 根是正確的。

我明白這一切.. 我不明白的是 A 和 B 如何在不需要整個塊的情況下知道正確的 merkle 路徑?

他們是否需要一個集中的提供者來處理這些塊來為他們計算這些塊?是否有可能以分散的方式進行?

A 和 B 如何在不需要整個區塊的情況下知道正確的 merkle 路徑?

許多輕客戶端將同步到最長的標頭鏈,假設網路上的其他節點將檢查這些塊的全部內容的有效性。(考慮一下:如果每個節點都是輕客戶端,礦工可能會在塊中包含無效交易,而輕客戶端都不會知道!)

通過從具有完整塊的節點請求默克爾樹的中間狀態,輕客戶端可以驗證使用者感興趣的交易確實包含在作為最長鏈一部分的塊中,以更有效的方式方式而不是驗證整個塊本身(警告是上面提到的有效性假設)。

他們是否需要一個集中的提供者來處理這些塊來為他們計算這些塊?是否有可能以分散的方式進行?

這完全取決於實現。例如,一些輕錢包可能只是回調到某個伺服器,由錢包的開發人員操作。其他輕客戶端可能會嘗試從網路上的隨機節點中提取此資訊。有些甚至可以連接到您自己的節點。

最終,最高級別的確定性將來自您自己執行一個完全驗證的節點(即,一個完整的節點)。正如比特幣人喜歡說的那樣:不要信任,請驗證。

使用者 A 向使用者 B 發送交易。這些交易被捆綁到一個默克爾樹中。使用者 A 和 B 都可以使用交易加上 merkle 根,加上 merkle 路徑來證明區塊頭中的 merkle 根是正確的。

讓我重新表述你的問題以確保我們在同一頁面上:

Alice 向 Bob 付款。當 Alice 將她的交易送出到網路時,它仍然沒有被確認。交易通過包含在一個塊中得到確認。塊頭包含 merkle 根,它是對包含的交易集的加密承諾(按順序)。

此時 Alice 和 Bob 都不知道默克爾路徑。根據他們執行的瘦客戶端,他們的錢包將請求一個完整的節點對等來標記與編碼他們興趣的布隆過濾器匹配的交易(BIP 37(不推薦)),他們相信服務提供商知道他們的地址(Electrum,各種集中式錢包服務),或者他們下載緊湊的客戶端塊過濾器,他們可以在本地使用這些過濾器來查看一個塊是否包含任何感興趣的東西(BIP 157/158)。

一旦瘦客戶端了解了他們感興趣的事務,瘦客戶端要麼專門為該事務請求 merkle 塊,要麼從全節點對等節點或其服務提供商處請求完整的塊。Merkle 塊資料結構具有所有必要的散列夥伴來追溯從交易葉到根的完整分支以及塊頭(當然完整塊也是如此)。他們就是這麼知道的!

正如 chytrik在另一個答案中所寫,大多數瘦客戶端通過同步塊頭鏈來跟隨網路。由於他們不解析完整的區塊,他們不跟踪比特幣餘額的完整分類賬(未使用的交易輸出集),因此無法驗證交易。然而,他們可以對塊執行基本的有效性檢查,例如它們是否滿足目前的難度要求,以及塊頭的內容是否實際上與給定的雜湊匹配。

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