經過第五章的學習,其實對區塊鏈有一個更深的了解,就是,不僅區塊前后相連,而且交易和交易之間也是相連,一個普通交易的輸入部分總是前面某個交易的輸出UTXO。在《比特幣 (1):傳統貨幣和比特幣的區別》中看到的相連,就是普通交易之間的相互連接;在《比特幣 (2):區塊鏈的大致結構》中看到的相連,是區塊之間的相互連接。
假設你已經閱讀完第五章,對于為啥需要腳本也比較清楚了。首先明確一下,交易輸入其實是之前某個交易的某個輸出UTXO,是按照之前那個交易的Hash值加上對應輸出在該交易中的位置標記的。一旦UTXO被選中,錢包會為每個UTXO生成包含簽名的解鎖腳本,換句話說,每個解鎖腳本都對應的是一個之前某個輸出的某個UTXO。
對于解鎖腳本加上鎖定腳本拼在一起,按照棧的方式運算,這個書中第五章已經說得很明確了,最重要的是棧操作的最后一步:
棧內是
其實CHECKSIG很簡單,就是基于一定的規則,看看之前錢包生成的
正如前面所述,正在檢查的這個解鎖腳本,是放在該交易下面的該輸入中,會對應一個之前某個交易的某個輸出UTXO,那么假設,之前這個交易叫 TxPrev,而當前包含這個解鎖腳本的交易叫TxNew(即TxNew的某個輸入是該UTXO)。按照上圖中說明的CHECKSIG的步驟(根據簽名類型SIGHASH_ALL對整個交易進行驗證):
1. 在棧中pop出
2. TxPrev中該UTXO對應的輸出腳本,也即鎖定腳本,會有很多的操作系列,每個操作系列之間使用OP_CODESEPARATOR分隔。取這個腳本最后一個操作系列,也就是倒數第一個OP_CODESEPARATOR和腳本結束之間的部分(上圖與該邏輯不符合),取出來即為Subscript,注意該Subscript對應的是TxPrev下面的一個輸出UTXO。
(3. 在Subscript中去掉簽名)
4. 在Subscript中移除OP_CODESEPARATORS
5. 之前從棧中彈出的
6. 復制TxNew為TxCopy
7. 將交易TxCopy中的所有輸入中的解鎖腳本置為空(因為上面說過,CHECKSIG是和生成
8. TxCopy中正在檢查的解鎖腳本位置,替換為經過步驟4處理完的Subscript
9. 序列化TxCopy,添加4字節的簽名類型,即在步驟5中提到的簽名類型,因為在5中是1個字節,現在變成4個字節,這時候才會涉及大小端問題,存為小端模式。得到的最終信息假設叫verifyThisStr。
10. 之前
至此,交易腳本的驗證過程結束。
這里面最重要的是:
1. 生成verifyThisStr的過程,確保了每次進行加密解密的內容都不一樣
2. 個人錢包使用用戶的私鑰進行加密,其他人利用用戶公開的公鑰進行解密
-
區塊鏈
+關注
關注
110文章
15560瀏覽量
105806 -
比特幣
+關注
關注
57文章
7002瀏覽量
140363
原文標題:區塊鏈系列--比特幣 (5):交易腳本詳解
文章出處:【微信號:AI_shequ,微信公眾號:人工智能愛好者社區】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論