utxo模型 UTXO模型

2021-10-13 04:38:40 字數 1568 閱讀 7305

位元幣的區塊鏈由乙個個區塊串聯構成,而每個區塊又包含乙個或多個交易。

如果我們觀察任何乙個交易,它總是由若干個輸入(input)和若干個輸出(output)構成,乙個input指向的是前面區塊的某個output,只有coinbase交易(礦工獎勵的鑄幣交易)沒有輸入,只有憑空輸出。所以,任何交易,總是可以由input溯源到coinbase交易。

這些交易的input和output總是可以串聯起來:

│block #1 │ │block #2 │ │block #3 │ │block #4 │

││cb│50.0│out├┼──┐ ││cb│50.0│out├┼──┐ ││cb│50.0│out├┼──┐ ││cb│50.0│out││

│ │ │ ││ │8.70│out├┼──┼──>│in│ │ ││ └──>│in│25.0│out││

│ │ └──>│in├────┼───┤│ │ │├──┤58.7│out││ │├──┼────┼───┤│

│ │ ││ │41.3│out├┼─┐└──>│in│ │ ││ ┌──>│in│66.3│out││

還沒有被下乙個交易花費的output被稱為utxo:unspent tx output,即未花費交易輸出。給定任何乙個區塊,計算當前所有的uxto金額之和,等同於自創世區塊到給定區塊的挖礦獎勵之和。

因此,位元幣的交易模型和我們平時使用的銀行賬號有所不同,它並沒有賬戶這個說法,只有utxo。想要確定某個人擁有的位元幣,並無法通過某個賬戶查到,必須知道此人控制的所有utxo金額之和。

遇到某筆交易的某個output是錢包管理的位址之一,則錢包餘額增加;

遇到某筆交易的某個input是錢包管理的位址之一,則錢包餘額減少。

錢包的當前餘額總是錢包位址關聯的所有utxo金額之和。

如果剛裝了乙個新錢包,匯入了一組私鑰,在錢包掃瞄完整個位元幣區塊之前,是無法得知當前管理的位址餘額的。

那麼,給定乙個位址,要查詢該位址的餘額,難道要從頭掃瞄幾百gb的區塊鏈資料?

當然不是。

要做到瞬時查詢,我們知道,使用關聯式資料庫的主鍵進行查詢,由於用了索引,速度極快。

addressbalancelastupdatedatblock

address-150.00

addressbalancelastupdatedatblock

address-150.00

address-240.03

address-350.03

address-410.03

如果我們把mysql這樣的資料庫看作可修改的,那麼區塊鏈就是不可修改,只能追加的唯讀資料庫。但是,mysql這樣的資料庫雖然其狀態是可修改的,但它的狀態改變卻是由修改語句(insert/update/delete)引起的。把mysql的binlog日誌完整地記錄下來,再進行重放,即可在另一台機器上完整地重建整個資料庫。把區塊鏈看作不可修改的binlog日誌,我們只要把每個區塊的所有交易重放一遍,即可重建乙個位址-餘額的資料庫。

可見,位元幣的區塊鏈記錄的是修改日誌,而不是當前狀態。

小結位元幣區塊鏈使用utxo模型,它沒有賬戶這個概念;

重建整個位址-餘額資料庫需要掃瞄整個區塊鏈,並按每個交易依次更新記錄,即可得到當前狀態。

utxo模型 UTXO 從魚到壽司

任何 鏈活動的核心之一是跟蹤和記錄價值物品從源頭到消費的過程。任務的複雜度取決於我們想要跟蹤的事物的型別。如果我們希望跟蹤從魚的捕獲到交給魚販的過程,從整體看,任務相對是簡單的。現在,想象一下,一位非常挑剔的壽司食客堅持要看到所有食材都有可驗證的 考慮到一條魚從捕獲到作為壽司食材的過程。這個過程,魚...

UTXO模型和Account模型

目錄 utxo模型 優點 缺點 account模型 優點 缺點 總結 utxo模型和account模型是區塊鏈中記錄儲存的兩種方式。unspent transaction output 未經使用的交易輸出。位元幣採用的是此模型。在utxo模型中,交易只代表了utxo集合的變更。如下圖所示 計算在鏈外...

理解UTXO賬戶模型

1 什麼是utxo?utxo的英文全稱為unspent transaction output,漢語翻譯過來則為 未消費的交易輸出。我們可以把utxo理解為交易過程中的乙個資料結構。未花費的交易輸出utxo是乙個包含交易資料和執行 的資料結構,可以通俗的理解為某倉庫 某位址 已經收到的但是尚未花費出去...