[轉帖]比特幣本質實際上是UTXO

比特幣本質實際上是UTXO

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

 
  • 第一個交易#1001號是張三挖礦所得的coinbase交易,coinbase交易就是挖礦交易,當礦機找到一個合格的區塊後,它就得到一個特權,能創造一個coinbase交易,而且把交易輸出寫上本身的地址,張三經過挖礦得到了12.5個btc,即價值12.5個btc的UTXO指向的是他的地址。
  • 第二個交易張三轉帳2.5個btc給李四,張三就發起了#2001號交易,資金的輸入爲#1001(1),而在本次交易輸出的UTXO中,把2.5個btc的收款人地址爲李四。可是這筆交易必須把上一個UTXO所有消耗,因此還剩下的10btc的交易輸出的收款地址爲張三本身。
  • 第三個交易張三和李四一塊兒轉給王五5個btc,張三或李四發起#3001號交易,輸入來源有兩個部分,一個是#2001(1)和#2001(2),輸出爲王五的收款地址。而且張三還剩下的7.5個btc輸出到本身的地址。後續王五若是須要花費他的5個btc,輸入就須要爲#3001(1)

一筆交易數據例子

 

如上圖是一筆交易,有多個輸入TxIn和多個輸出TxOut。orm

  • prev hash,表示該輸入是在哪一個交易hash輸出的。
  • index,表示在prev hash的那個交易的索引。
  • btc,到帳btc個數
  • pkScript,即publicKey Script,鎖定腳本,花費該UTXO時須要執行。

第一行挖礦收入交易一般被稱爲coinbase,它沒有輸入,因此TxIn的hash被標記爲00000...000,index爲ffff。
從第二行開始都是一些轉帳交易,任何一個TxIn都會惟一追溯到區塊鏈上在本區塊以前的某個交易hash,以及索引。blog

 

上圖經過交易hash和索引(從0開始),便可惟一肯定一個未花費的交易輸出,這樣每個Tx In都和以前某個TxOut 關聯起來。其中pkScript爲鎖定腳本,使用該UTXO時須要驗證經過該腳本才能花費這筆UTXO。索引

驗證交易腳本是如何進行驗證的?ip

總結

比特幣並非基於帳戶的方案,而是基於UTXO方案。這個和傳統銀行帳戶的思惟徹底不同。張三擁有10個btc,其實就是當前區塊鏈帳本中,有若干筆交易的輸出(UTXO)收款人都是張三的地址,而這些UXTO的總額爲10。這個地址一共收了多少UTXO,則是要經過比特幣錢包代爲跟蹤計算,因此錢包裏顯示的餘額實際上是有多少價值btc的輸出指向你的地址。pdo

 
 
1人點贊
 
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息