長槍如龍9星評價
2021-04-20 16:58:49
1.比特幣交易鏈條
比特幣不是基于賬戶的密碼貨幣,而是基于交易的密碼貨幣。在基于賬戶的貨幣中,我們可以通過賬戶直接查詢余額;但在比特幣系統(tǒng)中,我們需要通過未花費(fèi)交易輸出(UTXO)來統(tǒng)計(jì)該地址余額。
每一筆交易都是由交易輸入和交易輸出構(gòu)成。交易輸入里面的字段主要是腳本簽名(包含本次交易的簽名和付款人公鑰)、UTXO的索引,該字段表明了付款人信息和付款人的金額來源。其中,數(shù)字簽名使用ECDSA,付款人先將本次交易關(guān)鍵數(shù)據(jù)(例如:UTXO索引、交易金額和收款人公鑰)作為哈希函數(shù)的輸入,計(jì)算相應(yīng)的哈希值,再使用私鑰對哈希值簽名;交易輸出里面的字段主要是腳本公鑰(包含若干個腳本指令和收款人公鑰地址的哈希值)、地址和金額。該字段主要表明收款人的地址和收款金額。
2.比特幣交易步驟
(1)驗(yàn)證本次交易是否是可支付的。比特幣的所有交易記錄提供了比特幣UTXO查詢,只有當(dāng)本次交易的UTXO對應(yīng)的金額大于或等于收款金額時,該筆交易才是可支付的。
(2)用私鑰簽署這筆交易,并將簽名放置在交易的腳本簽名中。
(3)將該交易單廣播出去,尋求其他實(shí)體的認(rèn)可。所有合法的比特幣交易最終都會被封裝在歷史區(qū)塊之中。但是上述轉(zhuǎn)賬過程存在一個問題:收款人很難確認(rèn)比特幣所有者是否對該比特幣進(jìn)行雙重支付。
3.雙重支付
(1)無雙重支付的情形。假設(shè)A有1枚比特幣,要將其轉(zhuǎn)給B。A首先構(gòu)造一筆交易Tx1:使用私鑰簽署該筆交易,并將交易單Tx1廣播出去。其他實(shí)體收到信息后,通過UTXO索引計(jì)算A是否有能力支付1枚比特幣,如果有能力支付,則認(rèn)為此次交易是合法。最后,A的錢包地址減少1枚比特幣,B的錢包地址增加1枚比特幣。
(2)有雙重支付的情形。如果A利用同一個UTXO構(gòu)造2筆交易(Tx1:從A地址轉(zhuǎn)1枚比特幣給B地址;Tx2:從A地址轉(zhuǎn)1枚比特幣給C地址),并用私鑰分別簽署這2筆交易。由于消息傳送具有隨機(jī)性與先后性,有些實(shí)體先收到第1條交易,而有些實(shí)體會先收到第2條交易,那么比特幣系統(tǒng)會出現(xiàn)交易混亂,必須防止此類雙花的出現(xiàn)。