一個比特幣地址的餘額如何快速計算?
據我了解,一個比特幣地址的餘額是該地址在整個區塊鏈中的 UTXO 的總和。目前區塊鏈的大小約為 350GB。如何快速計算特定地址的 UTXO 總數?我想遍歷整個區塊鏈中的每筆交易並將 UTXO 與給定地址進行比較需要大量時間。比特幣地址餘額的計算是這樣的嗎?礦工是否對每筆交易重複此過程以檢查該地址的可用餘額是否足夠?
在協議層面,比特幣沒有“餘額”或“地址”的概念,它們的常見解釋與驗證無關。
每筆交易都會花費“硬幣”並將它們重新打造為新的“硬幣”(稱為 UTXO)。每個 UTXO 都有一個值(以 satoshis 為單位)和一個鎖定腳本。UTXO 總是全部用完。如果你只有一個 1 BTC UTXO 並且想發送 0.1 BTC 給某人,你的錢包將在後台創建一個交易,該交易有一個輸入(你的 1 BTC UTXO)和兩個輸出(一個 0.1 BTC UTXO,帶有從創建的鎖定腳本接收者的地址,以及一個帶有鎖定腳本的 0.9 BTC UTXO,您可以自己解鎖)。從協議的角度來看,這個 UTXO 沒有什麼特別之處,它可以追溯到你自己(稱為“更改輸出”)——它只是另一個 UTXO。
交易根據創建它們的 txid,而不是基於鎖定腳本,明確辨識他們正在花費哪些先前的代幣。因此,具有特定鎖定腳本的 UTXO 的值的總和是多少無關緊要;當硬幣被提及作為另一筆交易的輸入時,它們就會被花費。這意味著唯一重要的是:
- 輸入的 UTXO 是否存在?
- 是輸入的UTXO值的總和(無論它們是否具有相同的鎖定腳本)不小於新創建的UTXO的值的總和。
現在,像區塊瀏覽器這樣的網站確實會顯示余額。它們是更高級別且具有誤導性的抽象。他們通過簡單地維護每個地址的索引來做到這一點,該索引具有與該地址相對應的腳本作為鎖定腳本,以及花費此類輸出的所有交易。
出於隱私原因,錢包一直在建構新地址(通常每個傳入交易一個),因為創建更多地址是免費的。因此,從每個地址的角度來看會產生誤導,並導致人們賠錢(當他們認為“X 是我的地址,我只需要它的私鑰”時 - 你需要所有地址的密鑰,甚至更改地址,你的錢包使用)。