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