请选择 进入手机版 | 继续访问电脑版
×

关注微信公众号

[钱包教程] 隔离验证钱包开发指南

[复制链接]
发表于 2017-12-30 20:43:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转矿工社区

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
隔离验证编程

有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中找到.

努力挖矿...目标一币十嫩模,签到咯...
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表