Transactions

地址餘額如何計算?

  • October 22, 2021

掃描區塊鏈上的每筆交易以確定賬戶餘額似乎並不實際。隨著區塊鏈的發展,這似乎更加困難和消耗資源。也許所有的交易都被分組到我們以前稱為記錄的東西中,特別是可變長度的記錄。最後一筆交易的地址..trans1、trans2 等…transN。

比特幣使用所謂的UTXO(未花費交易輸出)模型。

第一次不是很直覺,因為它不同於傳統的會計模型,您只需從賬戶中消費並發送到賬戶。

想想那些無法裝滿的完整存錢罐,並且您必須先打開才能使用內容:

  1. Bob 有 1 個存錢罐,他想用存錢罐的一半來支付 Alice。
  2. 他打破了他的存錢罐。
  3. 他拿了一半給了愛麗絲,愛麗絲會把它全放在一個屬於她的新存錢罐裡。
  4. 你把剩下的一半放在一個屬於你的新的小存錢罐裡,它正等著被拆開。

每個存錢罐/UTXO 都連結到一個地址。比特幣使用者當然可以有幾個與他的地址相關的 UTXO。UTXO 的總和給出了該地址擁有的比特幣數量(這是錢包的功能之一)。

每個交易輸入都是先前交易的輸出。儘管錢包軟體給人的感覺是你“轉移”了比特幣或聰,但你並沒有從花費 UTXO的賬戶中消費。

您從之前對您進行的交易中花費。

考慮餘額計算的一種更直覺的方法是認為您使用的是實際的法定錢包。

如果你想看看你現在有多少錢,你會打開你的錢包,拿出所有不同面額的紙幣,然後總結一下。這給你你的平衡。

比特幣做了類似的事情,地址類似於你的物理錢包。一個地址可能有多個連結到它的 utxos。該地址的餘額是所有 utxos 的總和。

這裡的關鍵是比特幣只跟踪使用的交易輸出。因此,要獲得地址的餘額,它只需要遍歷區塊鏈,在創建時添加新輸出,並在使用時刪除舊輸出。此外,這是一個可擴展的過程。如果您知道塊 100 的 utxo 集,則無需從塊 0 重新計算以使用塊 101 中的數據進行更新。您可以簡單地從塊 100 更新您的集合。

這又類似於我們使用實體錢包的方式。沒有人跟踪他們過去擁有的所有紙幣和硬幣(花費的交易輸出)。他們只跟踪他們目前擁有的東西(utxo)。當發生新交易時(比如你買牛奶),你只需通過刪除一張紙條並把零錢放回去來更新你錢包的目前狀態。你不需要從你第一次用錢開始計算它。

比特幣更進一步,並有一個賬戶的概念,賬戶是多個地址,充當一個錢包。一個類似的類比是,如果你家裡的每個人都從他們所有的錢包裡拿出錢,這樣你就可以把它當作一個人來消費。同樣,賬戶餘額只是其中地址餘額的總和。

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