https://www.jianshu.com/p/7071e68c5262
其實並無什麼比特幣,咱們在交易所裏或者錢包裏顯示的比特幣餘額實際上是UTXO。那到底什麼是UTXO呢,UTXO的全稱爲Unspent Transaction Output,翻譯過來就是未被花費的交易輸出。學習
好像以爲仍是不太理解。。。。?區塊鏈
在比特幣區塊鏈帳本上記錄了一筆一筆的交易,每一筆交易都有若干個交易輸入(轉帳者),也就是資金來源,同時也有若干個交易輸出(收款者),也就是資金去向。每一筆交易都要花費一筆輸入,產生一筆輸出,而產生的這筆輸出,就是UTXO。spa
舉個簡單的例子:
A地址下有1個btc,A要把1個btc轉給B,則帳本上交易的輸入就是A,輸出爲B的地址,這時腳本會校驗A地址是否有1個btc(餘額都不夠怎麼會給你轉),即在某一筆輸出(UTXO)中查詢到了A確實有1個btc。因此A能夠做爲輸入轉給B一個btc,這時就有一筆價值1個btc的輸出指向B地址,直到B進行下一次轉帳前這筆交易都是B未被花費的輸出(UTXO)。後續B要轉給C時又重複A轉B的操做。翻譯
再來一個複雜一點的例子:code
如上圖是一筆交易,有多個輸入TxIn和多個輸出TxOut。orm
第一行挖礦收入交易一般被稱爲coinbase,它沒有輸入,因此TxIn的hash被標記爲00000...000,index爲ffff。
從第二行開始都是一些轉帳交易,任何一個TxIn都會惟一追溯到區塊鏈上在本區塊以前的某個交易hash,以及索引。blog
上圖經過交易hash和索引(從0開始),便可惟一肯定一個未花費的交易輸出,這樣每個Tx In都和以前某個TxOut 關聯起來。其中pkScript爲鎖定腳本,使用該UTXO時須要驗證經過該腳本才能花費這筆UTXO。索引
比特幣並非基於帳戶的方案,而是基於UTXO方案。這個和傳統銀行帳戶的思惟徹底不同。張三擁有10個btc,其實就是當前區塊鏈帳本中,有若干筆交易的輸出(UTXO)收款人都是張三的地址,而這些UXTO的總額爲10。這個地址一共收了多少UTXO,則是要經過比特幣錢包代爲跟蹤計算,因此錢包裏顯示的餘額實際上是有多少價值btc的輸出指向你的地址。pdo