隔離驗證錢包開發指南

買賣虛擬貨幣


隔離驗證程式設計

有2種實現隔離驗證的方式:

原生的隔離驗證指令碼

原生的隔離驗證指令碼定義為一個scriptpubkey,格式為1位元組的push指令(op_0, op_1, ..., op_16)後面跟著2到32位元組資料.

巢狀在p2sh中

隔離驗證指令碼巢狀在p2sh中是用一個redeemscript存放隔離驗證指令碼,也是一個scriptpubkey,格式為1位元組的push指令(op_0, op_1, ..., op_16)後面跟著2到32位元組資料.

交易序列化

如果一個交易不包含隔離驗證資料,那麼序列化格式使用以前的格式.

如果一個交易包含隔離驗證資料,一個新的序列化格式必須被使用:

[nversion][marker][flag][txins][txouts][witness][nlocktime]

這幾個欄位包括nversion, txins, txouts, and nlocktime 和以前的定義是一致的.

marker 欄位必須是 0x00.

flag 必須是1位元組的非0值. 當前必須是0x01.

witness 是一個交易的所有有witness資料的序列化.每個txin關聯到一個witness欄位.witness欄位以var_int開始,var_int的值表示txin需要佔用棧的數量,緊跟著棧的成員值,每個棧成員都以var_int開頭.witness資料不是指令碼也沒有520位元組的壓棧限制.

一個非witness的txin必須關聯一個空的witness欄位,表示為0x00.如果所有的txin都沒有witness程式,那麼交易必須使用舊的格式序列化(例外:coinbase交易).

transaction id
交易id

每個交易有2個id

txid含義沒有改變,還是交易序列化資料的2次sha256雜湊運算值

一個新的 wtxid 定義為: 包含新的witness資料的序列化資料的2次sha256雜湊運算值. 如果一個交易沒有任何witness資料, 那麼 wtxid 等於 txid.

txid仍然表示交易的id,特別是也用來在txin中指向前一個交易的輸出。

standard script types
標準指令碼型別

pay-to-public-key-hash (p2pkh)

p2pkh是最常用的模板 scriptpubkey 被中本聰定義,允許簡單的支付給一個單一的公鑰.格式為:

scriptpubkey (25 bytes): op_dup op_hash260 < 20-byte-pubkey-hash > op_equalverify op_checksig

花費p2pkh的輸出,scriptsig格式為

scriptsig: < sig > < pubkey >

ripemd160(sha256(pubkey)) 等於scriptpubkey 中的 20-byte-pubkey-hash.

pay-to-script-hash (p2sh)

p2sh定義在bip16.它允許付款到任意複雜的指令碼用一個修改長度的scriptpubkey. 格式為:

scriptpubkey (23 bytes): op_hash260 <20-byte-script-hash> op_equal

花費p2sh的輸出,scriptsig格式為

scriptsig: <...> <...> <...> < redeemscript >

ripemd160(sha256(redeemscript)) 等於在scriptpubkey中的 20-byte-script-hash. redeemscript是反序列化並且當作剩下的資料在scriptsig中.

pay-to-witness-public-key-hash (p2wpkh)

p2wpkh是bip141新定義的. 類似p2pkh, 它允許簡單支付到一個公鑰, 格式為:

scriptpubkey (22 bytes): op_0 < 20-byte-pubkey-hash >

花費p2wpkh的輸出,scriptsig必須是空的,並且witness為

witness: < sig > < pubkey >

ripemd160(sha256(pubkey)) 等於scriptpubkey 中的 20-byte-pubkey-hash.

p2wpkh in p2sh (p2sh-p2wpkh)

p2sh-p2wpkh 是一個使用p2wpkh 指令碼作為 redeemscript 的 p2sh. p2sh-p2wpkh的 scriptpubkey 看起來和通常的p2sh是相同的:

scriptpubkey (23 bytes): op_hash260 < 20-byte-script-hash > op_equal

花費p2sh-p2wpkh 的輸出,scriptsig必須只包含一個 redeemscript, 並且witness 是和p2wpkh相同的:

scriptsig (23 bytes): < op_0 < 20-byte-pubkey-hash > >
witness: < sig > < pubkey >

ripemd160(sha256(pubkey)) 等於 20-byte-pubkey-hash, 並且ripemd160(0x0014{20-byte-pubkey-hash}) 等於 20-byte-script-hash.

pay-to-witness-script-hash (p2wsh)

p2sh-p2wpkh 是bip141定義的另一個新的指令碼格式, 類似p2sh. 它允許付款到任意複雜的指令碼. 格式為:

scriptpubkey (34 bytes): op_0 < 32-byte-script-hash >

花費p2wsh的輸出,scriptsig必須是空的,並且witness為

witness: <...> <...> <...> < witnessscript >

ripemd160(sha256(witnessscript)) 等於scriptpubkey中的 32-byte-script-hash, witnessscript是反序列化並且當作剩下的資料在witness中.

p2wsh in p2sh (p2sh-p2wsh)

p2sh-p2wpkh 是使用一個p2wsh指令碼作為p2sh的 redeemscript. p2sh-p2wpkh 的 scriptpubkey 看起來和p2sh是一樣的:

scriptpubkey (23 bytes): op_hash260 <20-byte-script-hash> op_equal

花費p2sh-p2wpkh的輸出, scriptsig必須只包含一個 redeemscript, 並且witness 是和p2wsh是相同的:

scriptsig (35 bytes): < op_0 < 32-byte-script-hash > > \
witness: <...> <...> <...> < witnessscript >

sha256(witnessscript) 等於 32-byte-script-hash, 並且 ripemd160(0x0020{32-byte-pubkey-hash}) 等於 20-byte-script-hash.

新的簽名演算法

花費一個witness程式的輸出,當產生ecdsa簽名時一個新的簽名演算法必須被使用, 一個詳細的例子能在bip143中找到.

新的支付地址

2個新的支付地址型別被定義了. 完整的規範可以在bip142中找到.

英文:https://bitcoincore.org/en/segwit_wallet_dev/
來自:https://github.com/danielsocials/website/blob/segwit-cn/_posts/zh_cn/pages/2016-01-18-segwit-wallet-dev.md

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;