【區塊鏈整理】二、比特幣交易腳本


比特幣規定客戶端可運行五種標准交易腳本,分別為 P2PKH、P2PK、P2SH、MS 和 OP_Return,不同的腳本對應着不同的特性和用途。

<比特幣交易腳本基於堆棧的執行語言>

1. P2PKH(Pay to Public Key Hash)

該腳本為比特幣網絡大多數交易所采用的交易腳本。該腳本包含一個鎖定腳本,對交易輸出進行鎖定,即公鑰和對應的公鑰哈希(PKH)。該腳本鎖定的輸出通過鍵入公鑰和經相應私鑰創設的數字簽名解鎖。

鎖定腳本

假如 Bob 給 Alice 轉賬 0.1 BTC,Bob 會在交易中創建一個輸出腳本:

OP_DUP OP_HASH160 < Alice Public Key Hash > OP_EQUAL OP_CHECKSIG

腳本對輸出交易解鎖條件需要提供簽名和公鑰,因為簽名是用戶私鑰生成,所以僅 Alice 能夠創建解鎖該腳本的驗證簽名。

解鎖腳本

Alice 花費該交易 0.1 BTC 時,提供相應的解鎖腳本:

< Alice Signature > < Alice Public Key >

合並腳本

腳本合並,解鎖腳本在前,鎖定腳本在后:

< Alice Signature > < Alice Public Key > OP_DUP OP_HASH160 < Alice Public Key Hash > OP_EQUAL OP_CHECKSIG

此腳本根據逆波蘭表達式進行計算

腳本執行步驟

  1.  Alice Signature, Alice Public Key 壓入棧;
  2. OP_DUP 復制棧頂元素並壓入棧頂;
  3. OP_HASH160 計算棧頂元素的哈希值,並將結果壓入棧頂;
  4. Alice Public Key Hash  操作數直接壓入棧頂;
  5. OP_EQUAL 對兩個操作數判斷,相等則通過;
  6. OP_CHECKSIG 對公鑰和簽名進行檢查,確認簽名是由公鑰對應的私鑰生成的,執行完畢結果壓入棧中。

 僅當解鎖腳本與鎖定腳本相匹配時,組合腳本執行結果才會為 True ,即解鎖腳本提供了 Alice 的有效簽名。

2. P2PK(Pay to Public Key)

該模式是比較簡單的交易腳本模式。相對於 P2PKH ,未對公鑰進行哈希,所以可能會泄露用戶公鑰。Coinbase 的交易常使用該模式。

鎖定腳本

鎖定腳本形式如下:

< Public Key > OP_CHECKSIG

解鎖腳本

解鎖腳本僅包含一個操作數,即使用者簽名

< Signature of A >

組合腳本

組合腳本形式如下:

< Signature of A > < Public Key > OP_CHECKSIG

調用 OP_CHECKSIG 操作符,對經過用戶 A 的私鑰的簽名和 A 私鑰對應的公鑰進行驗證,結果為真即通過校驗。

3. P2SH(Pay to Script Hash)

該腳本僅記錄20字節的腳本哈希,從而對具體的腳本細節進行了保護。需要使用通過該類腳本鎖定的 UTXO 時,出示對應哈希值的原始腳本,並保證腳本運行結果為真。

鎖定腳本

鎖定腳本形式如下:

HASH160 PUSHDATA (目標腳本哈希) EQUAL

解鎖時提供對應的目標腳本。

4. 多重簽名(Multi-Signature)

多重簽名提供的解鎖場景:在相關的 N 個公鑰中,需要提供 M 個公鑰對應的簽名,才可以對相應的 UTXO 進行解鎖。此腳本在涉及多方協商交易的場景下較為有效。其中 N 為公鑰總數,M 為至少提供的簽名數量。

鎖定腳本

多重簽名鎖定腳本形式如下:

M < Public Key 1 > < Public Key 2 > ... < Public Key N > N OP_CHECKMULTISIG

解鎖腳本

解鎖腳本形式如下:

OP_0 < Signature k > < Signature j > ...

鎖定腳本和解鎖腳本結合,即可對提供的簽名進行驗證,達到多重簽名鎖定的目的。

5. 數據記錄輸出(OP_Return)

數據記錄輸出腳本主要用於對比特幣功能的拓展。開發者可通過該腳本添加80字節的非交易數據信息。

在P2PKH(pay to pubKey hash)交易中,可以將output里的驗證腳本換成其它數據。這么做會導致這筆交易里的比特幣不能再被花費,因為很難再找到滿足條件的調用腳本(需要反求哈希)。缺點是,未被花費的交易(UTXO)都會被存儲在內存中,因此這種交易就會占用許多內存空間,影響比特幣網絡的效率。

所以,我們可以使用比特幣的 OP_RETURN 指令。包含這一指令的交易也是不可花費的,但節點可以將其安全地移出UTXO集合,這筆交易可以在 OP_RETURN 中存儲一定數量的字節。

 

參考資料:

《區塊鏈技術及應用》——華為區塊鏈技術開發團隊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM