作者:erhuok / 來源:nervosTalk
最近一直看NX-MAX共識協議,以前沒有看過NC共識,很多基本的概念不是很了解,邊看邊做了些筆記,和大家分享:
Account模型
首先我們來看看Account模型是怎樣的,舉個例子A的銀行賬戶里面有1000元,B有2000元,C有3000元,現做兩個操作:
操作一,在A向B轉賬500
操作二,B向C轉賬1000元。
在正常操作邏輯下,賬戶模型的數據是這樣的:
操作一
賬戶 | 轉賬金額 | 余額 |
---|---|---|
A | 1000 - 500 | 500 |
B | 2000 + 500 | 2500 |
C | 3000 | 3000 |
操作二
賬戶 | 轉賬金額 | 余額 |
---|---|---|
A | 500 | 500 |
B | 2500 - 1000 | 1500 |
C | 3000 + 1000 | 4000 |
現在的銀行系統,證券系統以及我們常點的微信支付,支付寶,都是Account模型,底層數據庫采用關系型數據庫。支持事務處理,ACID特性(原子性,一致性,隔離性,持久性)。其實這個Account模型很容易理解,ETH也大致采用這個模型。
UTXO模型
UTXO的英文全稱為Unspent Transaction Output, 未消費的交易輸出。在UTXO模型,每一筆交易都有交易輸入和交易輸出兩個部分。怎么理解,也同樣舉個例子:
假設A地址有10個比特幣,B地址有5個比特幣,C地址有0個比特幣;現在進行如下操作:
操作一: A向B支付5個比特幣;
操作二: A向C支付2個比特幣;
操作三: B向C支付1個比特幣;
操作四: C向A支付3.5個比特幣;
起UTXO模型中的變化是這樣的:
操作一:
地址 | 交易記錄 | 凈UTXO |
---|---|---|
A | 交易輸入:5 | 5 |
B | 5 | |
C | 交易輸出:5 | 5 |
操作二:
地址 | 交易記錄 | 凈UTXO |
---|---|---|
A | 交易輸入:5。交易輸入:2 | 3 |
B | 5 | |
C | 交易輸出:5, 交易輸出:2 | 7 |
操作三:
地址 | 交易記錄 | 凈UTXO |
---|---|---|
A | 交易輸入:5。交易輸入:2 | 3 |
B | 交易輸入:1 | 4 |
C | 交易輸出:5, 交易輸出:2; 交易輸出:1 | 8 |
操作四:
地址 | 交易記錄 | 凈UTXO |
---|---|---|
A | 交易輸入:5;交易輸入:2;交易輸入:3.5 | 6.5 |
B | 交易輸入:1 | 4 |
C | 交易輸出:5, 交易輸出:2; 交易輸出:1;交易輸入:5;交易輸出:1.5 | 4.5 |
可以看見,在操作四的過程中:C地址有5,2,1三個交易輸出,可以理解為有5,2,1三枚硬幣,當要花出去3.5的時候,這三枚硬幣不可以拆分,所以花出去5,找零1.5. 這個找零的操作是UTXO模型自己自動來處理的。所以,要統計某一個比特幣地址有多少比特幣,起本質是統計這個地址下所有凈未花費的交易輸出個數。