在本文中,我們將詳細(xì)討論比特幣交易的工作原理。我們將看到,比特幣交易與現(xiàn)實世界中的交易略有不同。
1. 交易通常如何工作?什么是帳戶/余額模型?
大多數(shù)時候,當(dāng)我們談到交易時,我們習(xí)慣于想到帳戶/余額系統(tǒng)。這意味著系統(tǒng)中的每個用戶都有一個帳戶,每個帳戶都與一個余額相關(guān)聯(lián),該余額決定帳戶擁有多少錢或數(shù)字。
當(dāng)系統(tǒng)中的一個用戶通過向系統(tǒng)中的另一個用戶發(fā)送金錢來進(jìn)行交易時,帳戶余額將被更新。例如,如果A最初有10個比特幣,B有5個比特幣,如果A向B發(fā)送2個比特幣進(jìn)行交易,A最終得到10 - 2=8個比特幣,B最終得到5+2=7個比特幣。
交易如何在帳戶/余額系統(tǒng)中運作
2. 什么是UTXO(未使用的交易輸出)?
比特幣使用UTXO(未使用的交易輸出)模型,而不是賬戶/余額系統(tǒng)。這意味著區(qū)塊鏈并不直接跟蹤每個比特幣地址的比特幣余額。相反,區(qū)塊鏈存儲了比特幣交易數(shù)據(jù)的整個歷史,而比特幣網(wǎng)絡(luò)跟蹤網(wǎng)絡(luò)中所有UTXO的集合,稱為mempool或交易池。特定比特幣地址的余額是通過檢查和求和與該地址相關(guān)的所有UTXO來計算。當(dāng)使用UTXO時,它將從交易池中刪除,這將在計算余額時反映出來。
一個可視化的演示如何在UTXO系統(tǒng)中計算平衡
在比特幣中,UTXO是一個離散的比特幣單元,它可以包含任何數(shù)量的固定不變值。一個UTXO可以代表0.1個比特幣,1個比特幣,甚至100個比特幣。無論該值本身的大小如何,該值都與惟一的UTXO關(guān)聯(lián),UTXO可以通過其id來識別。根據(jù)定義,每個UTXO都是交易輸出的結(jié)果,并與一個特定的比特幣地址關(guān)聯(lián)。
UTXO的基本特性是它們不能被分解——如果不進(jìn)行交易處理,就不能將一個UTXO轉(zhuǎn)換成兩個或更多更小的UTXO。例如,如果A希望支付B 0.5 BTC,但A只有一個包含1 BTC的UTXO,那么A就不能神奇地將他的UTXO轉(zhuǎn)換成值為0.5 BTC的兩個UTXO,并且只能通過將其中之一發(fā)送給B進(jìn)行一次交易。相反,當(dāng)A將他的UTXO分成兩個UTXO,每個0.5個BTC,A將需要在兩個獨立的交易中使用兩個UTXO:她將發(fā)送一個給B作為付款,另一個給她自己。這個問題將在下一個問題中得到更清楚的說明。
3.比特幣交易究竟是如何運作的?
比特幣的每一筆交易都有一些輸入和輸出。輸入是屬于交易發(fā)送方的UTXO,而交易的輸出是分配給接收方的新生成的UTXO。
每個UTXO都使用一個鎖定腳本ScriptPubKey鎖定。這個腳本確保只有交易的預(yù)期接收者才能訪問發(fā)送給他們的比特幣(UTXO)。ScriptPubKey由《PubKeyHash》組成,它是接收方公鑰的哈希值,與接收方的比特幣地址相關(guān)。
比特幣交易的鎖定和解鎖機制。
交易的接收者可以通過使用解鎖腳本ScriptSig訪問他們的UTXO,該腳本被UTXO的接收者用來證明他們擁有UTXO中的比特幣。ScriptSig由使用ECDSA生成的用戶比特幣簽名《Sig》和用戶公鑰《PubKey》組成。對《PubKey》進(jìn)行哈希,并與ScriptPubKey中的《PubKeyHash》進(jìn)行比較,以檢查試圖訪問UTXO的用戶是否確實擁有與比特幣地址關(guān)聯(lián)的公鑰。接下來,將《Sig》與《PubKey》進(jìn)行比較,以驗證用于生成比特幣簽名的私鑰確實是生成(已正確驗證)公鑰的私鑰。
只有使用ScriptSig才能解鎖UTXO并將其用作交易的輸入。在生成交易的輸出時,發(fā)送方再次使用接收方的ScriptPubKey鎖定UTXO。因此,比特幣交易是一個鎖定和解鎖UTXO的連續(xù)循環(huán)。
4. 我能舉個比特幣交易的例子嗎?
我們可以用一個例子來理解比特幣交易是如何進(jìn)行的。蛋糕買家希望從蛋糕賣家那里購買一個價值5比特幣的蛋糕。由于買蛋糕的人沒有一個恰好是5 BTC的UTXO,她選擇了2個UTXO來覆蓋5 BTC的價格,生成了5 BTC的輸出發(fā)送給蛋糕賣家,0.5 BTC的變化返回給蛋糕買家。
演示如何在交易中創(chuàng)建和使用UTXOs的可視化程序。
在交易級別上,蛋糕購買者使用ScriptSig(作為輸入)解鎖UTXO_3和UTXO_5的ScriptPubKey。一旦這樣做,就會生成兩個輸出并使用自己的ScriptPubKey鎖定它們。當(dāng)?shù)案怃N售商想要使用這個UTXO時,他必須使用他的ScriptSig來解鎖它。
買蛋糕的人打開她以前的UTXO用于消費,并創(chuàng)建新的UTXO發(fā)送給蛋糕銷售者和她自己。
5. 如何向節(jié)點廣播交易?
對于大多數(shù)用戶,沒有必要這樣做。您只需使用一個比特幣walletclient,輸入您希望進(jìn)行的交易的詳細(xì)信息,然后單擊send??蛻舳藢槟鷱V播交易。
由于比特幣是一個對等網(wǎng)絡(luò),客戶端搜索發(fā)送交易的對等點(節(jié)點)。當(dāng)它找不到任何對等點時,就回到硬編碼到客戶機的可靠備份對等點列表中。
6. 每個比特幣塊可以有多少交易?
每個比特幣塊可能擁有的交易數(shù)量取決于該塊中包含的單個交易的類型和大小。最初的塊大小限制是1兆字節(jié)。如果每筆交易都是任意小的,那么一個比特幣塊可以有任意多的交易。
實際上,到2019年1月,每個區(qū)塊的平均交易數(shù)量約為2100筆。這個數(shù)字可能比它應(yīng)該的低,因為存在著正在開采的空塊。
(注:Segwit(隔離見證)是比特幣網(wǎng)絡(luò)中的一個軟分支,它允許將交易數(shù)據(jù)存儲在一個擴展塊中,允許大于2兆字節(jié)的塊存儲更多的交易數(shù)據(jù)。截至2019年2月,Segwit交易約占比特幣交易總額的40%。)
結(jié)束語
在本文中,我們研究了UTXO模型的細(xì)節(jié)以及比特幣交易的工作原理。在下一篇文章中,我們將解釋比特幣的最后一塊:采礦。我們將看看采礦是如何工作的,以及采礦在比特幣中扮演的角色。
評論