比特幣的交易數(shù)據(jù)結(jié)構(gòu)
比特幣的交易是遵循統(tǒng)一的交易格式的丽已。比特幣的交易數(shù)據(jù)結(jié)構(gòu)如下圖:
理解交易
我們來解析一下這個(gè)比特幣交易數(shù)據(jù)結(jié)構(gòu)中的主要要素,來理解比特幣的交易。
輸入
- 引用被花費(fèi)的UTXO (“交易”與“輸出索引”)
- 輸入腳本 - 公鑰與簽名(”解鎖腳本“)
輸出
- 轉(zhuǎn)賬數(shù)量 (“總量”)
- 輸出腳本 - 檢查公鑰和驗(yàn)證簽名 (“鎖定腳本”)
比特幣如何交易的呢?
通過執(zhí)行輸入腳本和輸出腳本,如下:
- 執(zhí)行輸入腳本:先把簽名壓入棧纠亚,再入棧公鑰
- 執(zhí)行輸出腳本:
- 復(fù)制棧里的公鑰,得到公鑰副本 (公鑰來源于輸入腳本)
- 計(jì)算公鑰副本的哈希值,得到公鑰哈希 PH(公鑰哈希最終來源于輸入腳本)
- 將輸出腳本里的公鑰哈希入棧 PH1(來源于輸出腳本)
- 檢查PH和PH1是否相等划乖。是則繼續(xù),否則中斷執(zhí)行
- 使用棧里留下的公鑰和簽名校驗(yàn)簽名 (都來源于輸入腳本)挤土。成功則返回成功琴庵,否則返回失敗
這樣,比特幣交易就完成了仰美。
附:
1. 輸入腳本(長(zhǎng)成這樣迷殿,例子):
- 3045022100efe12e2584bbd346bccfe67fd50a54191e4f45f945e3853658284358d9c062ad02200121e00b6297c0874650d00b786971f5b4601e32b3f81afa9f9f8108e93c752201
038b29d4fbbd12619d45c84c83cb4330337ab1b1a3737250f29cec679d7551148a
- 這么一長(zhǎng)串其實(shí)只有2個(gè)元素,簽名(sig) 和公鑰 (pubkey)
2. 輸出腳本(長(zhǎng)成這樣咖杂,例子):
- OP_DUP OP_HASH160 be10f0a78f5ac63e8746f7f2e62a5663eed05788 OP_EQUALVERIFY OP_CHECKSIG
- be10f0a78f5ac63e8746f7f2e62a5663eed05788 這串是公鑰哈希贪庙,用來檢查與后筆交易輸入中的公鑰被哈希后是否一致
Reference:
- blog.sina.com.cn/s/blog_d66494300102wzyt.html