日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

比特币交易原理分析

發(fā)布時間:2025/3/21 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 比特币交易原理分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

比特幣交易原理分析

最近一直在自學(xué)區(qū)塊鏈,這段時間開始系統(tǒng)總結(jié)一些學(xué)習(xí)的內(nèi)容,寫成博客內(nèi)容,希望能給初學(xué)者或者想要系統(tǒng)學(xué)習(xí)區(qū)塊鏈技術(shù)的同學(xué)一些幫助。

在這一系列技術(shù)總結(jié)后,會帶大家動手從零開發(fā)一個迷你區(qū)塊鏈。

迷你區(qū)塊鏈體驗地址:?http://miniblockchain.shuwoom.com/index

?

版權(quán)聲明:可以轉(zhuǎn)載,但請備注原文鏈接。

關(guān)鍵字:比特幣、區(qū)塊鏈、交易腳本、智能合約、UTXO賬戶模型、價值轉(zhuǎn)移


1.比特幣的UTXO模型

首先,在講比特幣交易過程之前要說明一個事情。比特幣系統(tǒng)是沒有余額的概念的,它使用的是UTXO模型(Unspent Transaction Outputs,未使用過的交易輸出),我們在交易過程中經(jīng)常說的錢包余額,實際上是一個錢包地址的UTXO集合。所以,在比特幣網(wǎng)絡(luò)中,存儲比特幣余額的是交易輸出,準(zhǔn)確點說就是未使用過的交易輸出,而每一筆交易的輸入實際上引用的是上一筆交易的輸出。下圖是比特幣系統(tǒng)中交易輸入輸出的過程:

圖0 比特幣系統(tǒng)中交易輸入輸出過程

如下圖,每一筆交易記錄了時間、發(fā)送人、接收人和金額。那如果要計算A的余額,那么就要遍歷所有跟A有關(guān)的交易,減去A發(fā)送的每一筆金額,并加上A接收的每一筆金額,可以計算出。

  • A的余額 = 20-10=10

  • B的余額 = 20+10+5-5=30

  • C的余額 = 20-5=15

  • D的余額 = 20+5=25

比特幣系統(tǒng)中計算余額的方法也是類似這樣。所以,要計算一個用戶的比特幣余額,就需要遍歷整個交易的歷史。而以太坊由于采用了Account模型,也就是采用余額的概念,所以不需要溯源整個交易歷史。

圖1 賬本

所以,我們可以將UTXO理解為一個幣:它是有一個金額以及一個擁有者。一筆交易若要有效,就必須滿足兩個條件:

(1)這個交易必須包含一個有效簽名,來自它所花費的UTXO的擁有者

(2)被花費的UTXO的總金額必須大于等于該交易產(chǎn)生的UTXO總金額。

2.交易過程

上面,我們介紹了比特幣的UTXO模型,解釋了比特幣“余額”的概念。接下來,我們正式開始講解比特幣的交易過程,并在接下來的分析過程中我們會回答兩個很重要的問題:

(1)如何保證用戶只能使用自己的比特幣?(比特幣賬本是全網(wǎng)公開的)

(2)如何保證一筆交易的有效性?

下圖,是一筆交易的完整過程。這里面交易有兩種類型,一種是Coinbase交易,也就是挖礦獎勵的比特幣,由于沒有發(fā)送人,所以比較特殊。另一種就是我們常見的普通交易了,包含輸入和輸出的。

圖2 比特幣交易基本過程

這里我們假設(shè),由于Alice挖礦被獎勵了12.5個比特幣。而Alice在一筆交易中,需要轉(zhuǎn)賬給Bob10個比特幣。而Bob最終確認(rèn)并接收了Alice發(fā)送的10個比特幣,而同時由于多出了2.5個比特幣。其實這筆交易最終是生成了2個輸出,一個是發(fā)送給Bob的10個比特幣,另一個是找零產(chǎn)生的發(fā)給Alice的2.5個比特幣(備注:這里不考慮交易費)。

在這里面,發(fā)生了幾個關(guān)鍵的操作:

(1)最開始,Alice由于挖礦被獎勵了12.5個比特幣,從而產(chǎn)生一筆Coinbase交易。這個交易中包含一個輸入和一個輸出。輸出中,包含當(dāng)前輸出的索引、金額、鎖定腳本和接受者的公鑰。這里鎖定腳本的作用是,設(shè)定成只有Alice才能使用這筆輸出。而要使用這個UTXO,就必須要證明自己是Alice。如何證明,我們會在后面講解。

(2)然后,由于Alice要發(fā)送給Bob10個比特幣,那么她首先要做的就是確認(rèn)自己有沒有足夠的“余額”去支付這筆交易。我們在上一節(jié)說了,要計算用戶的余額,就要遍歷Alice的所有交易記錄,這里,我們假設(shè)Alice就只有一筆Coinbase交易,也就是說Alice當(dāng)前的余額是12.5個比特幣。由于12.5大于所要支出的10個比特幣,所以交易可以進(jìn)行。

(3)接下來,就是要創(chuàng)建一筆交易。這筆交易包含1個輸入、2個輸出(一個發(fā)送給Alice,一個找零發(fā)給自己)。

由于比特幣采用UTXO模型,一筆交易的輸入實際上使用的是上一筆交易的輸出(UTXO)。輸入中也包含發(fā)送者的公鑰,這里是Alice的公鑰。這里,有一個很重要的問題,我們怎么知道Alice使用的是自己的UTXO呢?如果Alice使用的是別人的UTXO,我們怎么去校驗?zāi)?#xff1f;

這里,我們看到輸入中除了引用上一個交易輸出和發(fā)送者Alice的公鑰,還包含了一個解鎖腳本。解鎖腳本里包含了Alice的對上一筆交易輸出的簽名和自己的公鑰。在《區(qū)塊鏈快速入門》中,我們知道通過數(shù)字簽名技術(shù),我們可以使用公鑰對用戶的簽名(私鑰加密)進(jìn)行驗證從而證明簽名者是否用戶本人。如下圖,我們就可以通過解鎖腳本中提供的Alice的簽名和公鑰去驗證Alice使用的是否是自己的UTXO。

圖3 數(shù)字簽名技術(shù)(簽名和驗證)

(4)上一步,我們驗證了該交易中輸入所引用的上一筆UTXO確實是Alice的,從而證明了該輸入的有效性。接下來,就需要創(chuàng)建2個輸出,一個是給Bod的10個比特幣,同時包含一個鎖定腳本,該鎖定腳本限定只有Bod才能使用;另一個是找零產(chǎn)生的輸出,發(fā)送給Alice的2.5個比特幣,同樣的也包含一個鎖定腳本,并且限定只有Alice本人才能使用。

(5)最后交易創(chuàng)建完成后,就向比特幣網(wǎng)絡(luò)廣播出去,當(dāng)比特幣網(wǎng)絡(luò)確認(rèn)這筆交易并且將這筆交易在下一次挖礦競賽中,將該交易打包進(jìn)區(qū)塊中并得到全網(wǎng)共識確認(rèn)后,這筆交易就確認(rèn)有效了。

比特幣的基本交易過程就基本這樣。

下圖我們可以了解下,一個比特幣真實交易是包含哪些數(shù)據(jù)的?

b6f6b339b546a13822192b06ccbdd817afea5311845f769702ae2912f7d94ab5交易

圖4 普通交易

3.關(guān)鍵概念

一個交易包含以下信息:

  • 輸入:一個或多個交易輸入

  • 輸出:一個或多個交易輸出

  • 時間:交易時間戳UNIX

3.1 交易分類

交易分為2類:

  • Coinbase交易:挖礦獎勵,沒有輸入,只有輸出。如下圖5所示。

  • 普通交易:用戶之間的普通轉(zhuǎn)賬交易,如上圖4所示

圖5 Coinbase交易

3.2 交易輸入

交易的輸入結(jié)構(gòu)如下:

圖6 交易輸入結(jié)構(gòu)

3.3 交易輸出

交易的輸出結(jié)構(gòu)如下:

圖7 交易輸出結(jié)構(gòu)

3.4 交易腳本

(1)概念

比特幣客戶端使用一個用類Forth腳本語言編寫的腳本去驗證比特幣的交易,這個腳本語言不是圖靈完備的,不具備循環(huán)等復(fù)雜的特性。它是一種基于堆棧的執(zhí)行語言,該腳本語言的簡單特性,雖然使得它不能實現(xiàn)復(fù)雜的功能,但是也提高了交易腳本的安全性(設(shè)計簡單,減少了攻擊面)。而以太坊就是詬病比特幣交易腳本功能有限,所以設(shè)計了一個圖靈完備的腳本語言,也就是我們常說的智能合約腳本語言,能實現(xiàn)更復(fù)雜的功能,但同時也增加了安全隱患。

當(dāng)一筆比特幣交易被驗證時,每一個輸入中的解鎖腳本與其所引用的輸出中的鎖定腳本同時執(zhí)行,從而檢查這筆交易是否有效。如圖8所示,是最為常見類型的比特幣交易的解鎖和鎖定腳本。

圖8 解鎖腳本和鎖定腳本

(2)驗證過程

當(dāng)我們拿到一筆交易時,如何驗證這個交易輸入是否有效,也就是如何校驗該輸入所引用的輸出是否有效。

首先,將當(dāng)前輸入的解鎖腳本,和該輸入所引用的上一筆交易輸出的鎖定腳本如圖8一樣組合在一起,并進(jìn)行下的驗證過程,最終若返回TRUE,說明交易有效。

圖9 交易有效性校驗過程

從上面的校驗過程,其實我們可以發(fā)現(xiàn),如果要實現(xiàn)多人簽名的校驗以及定時消費的校驗(規(guī)定多久后才能使用),同樣可以采用上述的原理進(jìn)行。

(3)實例分析

下面,我們通過分析一筆比特幣真實交易,來加深了解比特幣的交易腳本驗證過程。

地址:

https://webbtc.com/tx/cca7507897abc89628f450e8b1e0c6fca4ec3f7b34cccf55f3f531c659ff4d79

圖10?cca7507897abc89628f450e8b1e0c6fca4ec3f7b34cccf55f3f531c659ff4d79交易數(shù)據(jù)

為了校驗該交易有效,我們需要對

cca7507897abc89628f450e8b1e0c6fca4ec3f7b34cccf55f3f531c659ff4d79中輸入所引用的上一筆輸出的鎖定腳本與當(dāng)前輸入中的解鎖腳本進(jìn)行校驗。

解鎖腳本(SriptSig):

8b4830450221009908144ca6539e09512b9295c8a27050d478fbb96f8addbc3d075544dc41328702201aa528be2b907d316d2da068dd9eb1e23243d97e444d59290d2fddf25269ee0e0141042e930f39ba62c6534ee98ed20ca98959d34aa9e057cda01cfd422c6bab3667b76426529382c23f42b9b08d7832d4fee1d6b437a8526e59667ce9c4e9dcebcabb

翻譯后:

PUSHDATA(72)[30450221009908144ca6539e09512b9295c8a27050d478fbb96f8addbc3d075544dc41328702201aa528be2b907d316d2da068dd9eb1e23243d97e444d59290d2fddf25269ee0e01] PUSHDATA(65)[042e930f39ba62c6534ee98ed20ca98959d34aa9e057cda01cfd422c6bab3667b76426529382c23f42b9b08d7832d4fee1d6b437a8526e59667ce9c4e9dcebcabb]

?

該解鎖腳本包含了發(fā)送者的簽名(綠色部分)和公鑰(紅色部分)。

?

該輸入引用的上一筆輸出的鎖定腳本:

  • 上一個交易ID:a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d

  • 輸出索引:0

可以找到輸入所引用的上一筆交易輸出是如下:

其鎖定腳本為:1976a91446af3fb481837fadbb421727f9959c2d32a3682988ac

翻譯后:

OP_DUP OP_HASH160?46af3fb481837fadbb421727f9959c2d32a36829?OP_EQUALVERIFY OP_CHECKSIG

我們將解鎖腳本和鎖定腳本組合在一起進(jìn)行校驗:

PUSHDATA(72)[30450221009908144ca6539e09512b9295c8a27050d478fbb96f8addbc3d075544dc41328702201aa528be2b907d316d2da068dd9eb1e23243d97e444d59290d2fddf25269ee0e01] PUSHDATA(65)[042e930f39ba62c6534ee98ed20ca98959d34aa9e057cda01cfd422c6bab3667b76426529382c23f42b9b08d7832d4fee1d6b437a8526e59667ce9c4e9dcebcabb]

OP_DUP OP_HASH160?46af3fb481837fadbb421727f9959c2d32a36829?OP_EQUALVERIFY OP_CHECKSIG

然后逐一執(zhí)行指令:

指令

說明

?

PUSH DATA 3045…0e01

將3045…0e01(簽名)入棧

3045…0e01

PUSH DATA 042e…cabb

將042e…cabb(公鑰)入棧

042e…cabb

3045…0e01

OP_DUP 042e…cabb

復(fù)制棧頂數(shù)據(jù)

042e…cabb

042e…cabb

3045…0e01

OP_HASH160

對棧頂數(shù)據(jù)先采用SH256哈希算法,隨后對其運用RIPEMD160算法,得到:

46af3fb481837fadbb421727f9959c2d32a36829

46af…6829

042e…cabb

3045…0e01

PUSH DATA 46af…6829

將46af…6829入棧

46af…6829

46af…6829

042e…cabb

3045…0e01

OP_EQUALVERIFY

校驗棧頂兩個數(shù)據(jù)是否相等

042e…cabb

3045…0e01

OP_CHECKSIG

驗證簽名

TRUE

RESULT

返回為TRUE,說明交易有效

最終交易腳本返回TRUE,證明了交易的有效性。

?

備注:如果想要詳細(xì)了解比特幣的腳本語言,可以查看:https://en.bitcoin.it/wiki/Script

??????????如果想在線校驗交易,可以查看:https://webttc.com


總結(jié)

以上是生活随笔為你收集整理的比特币交易原理分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。