区块链芝士丨隔离验证钱包开发指南(1)

隔离验证编程

有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中指向前一个交易的输出。

本文由 零点财经 作者:tao 发表,其版权均为 零点财经 所有,文章内容系作者个人观点,不代表 零点财经 对观点赞同或支持。如需转载,请注明文章来源。
分享生成图片
58

发表回复

区块链芝士丨隔离验证钱包开发指南(1)

2021-06-22 10:58:59

隔离验证编程

有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中指向前一个交易的输出。