隔离验证钱包开发指南
收藏
分享
微信扫一扫
分享到朋友或朋友圈
隔离验证编程
有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_HASH160 < 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_HASH160 <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_HASH160 < 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_HASH160 <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
免责声明:本文版权归原作者所有,不代表MyToken(www.mytokencap.com)观点和立场;如有关于内容、版权等问题,请与我们联系。
上一篇:使用以太坊智能合约建立代币教程
下一篇:以太坊钱包 Mist 使用教程
相关阅读
专访 Mable Jiang:复盘 Multicoin 投资方法论与 DeFi 洞察
原文标题:《对话 Mable:复盘 Multicoin Capital 的投资方法论与 DeFi 观察 | 链捕手》受访者:Mable Jiang,Multicoin Capital 执行董事撰文:王...
信标链、PoS、分片……接触以太坊 2.0 得先理解这些术语
原文标题:《以太坊 2.0 术语库》整理:ETH 中文网Attestation 证明证明是指验证者所发起的投票,由验证者的签名聚合而成,用以证明区块的有效性,投票通过验证者的余额进行加权。Attest...
手把手教你搭建 IPFS 私有网络
在联盟链的场景下,IPFS 作为去中心化存储的首选方案,本文将介绍如何使用 go-ipfs 搭建一个私有网络并进行简单使用。...