阻隔验证编程

有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(0x0014https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg20-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(0x0020https://bicoin8.com/wp-content/uploads/2023/04/202304211cHpE0.jpg32-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

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注