主页 > 下载imtoken钱包 > 来学习一下区块链技术系列之一比特币的标准交易
来学习一下区块链技术系列之一比特币的标准交易
在发现比特币早期版本的一些危险问题后,增加了一项测试以确保在比特币网络上只接受特定格式的交易。 这些格式是几种公认的安全脚本模板。 这些交易的签名脚本和公钥脚本必须是 只需要匹配这些模板,假设交易的其他部分没有问题。 这就是 IsStandard() 测试,通过该测试的事务称为标准事务。
非标准交易无法通过此测试,但可能会被其 Bitcoin Core 未使用默认设置的节点接受。 如果非标准交易包含在一个区块中,它们将免于此测试并被处理。
该测试的引入不仅使通过广播垃圾交易攻击比特币变得更加困难,而且还阻止了用户今天创建交易并使将来难以添加新功能。 例如,每个事务都包含一个版本号,如果用户任意修改这个版本号,它作为引入向后不兼容特性的工具就变得毫无用处。
对于 Bitcoin Core 0.9 及之后的版本,标准的公钥脚本类型包括:
1 支付给公钥哈希 (P2PKH)
P2PKH 是最常用的用于向一个或多个比特币地址转账的公钥哈希
Pubkey script: OP_DUP OP_HASH160OP_EQUALVERIFY OP_CHECKSIG
Signature script:
2 支付给脚本哈希 (P2SH)
P2SH 用于考虑脚本哈希传输。 每个标准公钥脚本都可以用作 P2SH 赎回脚本,但在实践中,只有多重签名公钥脚本才有意义,直到更多交易类型成为标准。
Pubkey script: OP_HASH160OP_EQUAL Signature script: [sig] [sig...]
3 Mutisig 多重签名
尽管 P2SH 多重签名现在通常用于多重签名交易,但这个基本脚本用于在使用 UTXO 之前需要多个签名的情况。
在多重签名公钥脚本中,我们称之为m-of-n,m指的是最少签名个数,这个签名对应一个公钥,n是公钥的个数,m和n应该是opcodes OP_1到OP_16,对应相应的数字。
因为比特币原实现中存在字节溢出错误,为了兼容必须保留这个错误,OP_CHECKMULTISIG从栈中消耗的值为m+1,所以必须在secp256k1签名列表前面多加一个签名脚本操作数 OP_0 被消耗但没有用。
签名脚本中的签名序列必须与对应的公钥序列一致。
Pubkey script:[B pubkey] [C pubkey...] OP_CHECKMULTISIG
Signature script: OP_0 [B sig] [C sig...]
这是 2 of 3 多重签名 P2SH
Pubkey script: OP_HASH160OP_EQUAL
Redeem script:OP_CHECKMULTISIG
Signature script: OP_0
4 个公钥
公钥输出是P2PKH公钥脚本的简化形式,但是没有P2PKH安全,所以现在基本不用了。
Pubkey script:OP_CHECKSIG
Signature script:
5 空数据
在Bitcoin Core 0.9及之后的版本中,Null Data交易类型可以在比特币网络中传播并默认被矿工打包,之后将任意数据添加到一个已被证明不可花费的公钥脚本中。 全节点不需要将这个脚本存储在他们的 UTXO 数据库中。 这种输出的特点是传输次数为0比特币怎么交易的,脚本想放什么就放什么,只要不超过长度限制即可。 可以搜索一下比特币上的铭文,在这个永久的比特币区块链上留下自己的文字,还是很有意思的。
Bitcoin core 0.12.0及以后版本传播打包空数据输出默认不超过83字节比特币怎么交易的,可以包含任何数据,只要不超过总字节限制即可。 但是每一笔交易必须只有一个空数据输出,并且必须支付 0 聪。
Pubkey Script: OP_RETURN <0 to 83 bytes of data> (Null data scripts cannot be spent, so there's no signature script.)
比特币核心配置选项 -datacarriersize 允许设置要传播或打包的空数据输出的最大字节数。