主页 > 下载imtoken钱包 > 来学习一下区块链技术系列之一比特币的标准交易

来学习一下区块链技术系列之一比特币的标准交易

下载imtoken钱包 2023-09-10 05:11:01

在发现比特币早期版本的一些危险问题后,增加了一项测试以确保在比特币网络上只接受特定格式的交易。 这些格式是几种公认的安全脚本模板。 这些交易的签名脚本和公钥脚本必须是 只需要匹配这些模板,假设交易的其他部分没有问题。 这就是 IsStandard() 测试,通过该测试的事务称为标准事务。

非标准交易无法通过此测试,但可能会被其 Bitcoin Core 未使用默认设置的节点接受。 如果非标准交易包含在一个区块中,它们将免于此测试并被处理。

该测试的引入不仅使通过广播垃圾交易攻击比特币变得更加困难,而且还阻止了用户今天创建交易并使将来难以添加新功能。 例如,每个事务都包含一个版本号,如果用户任意修改这个版本号,它作为引入向后不兼容特性的工具就变得毫无用处。

对于 Bitcoin Core 0.9 及之后的版本,标准的公钥脚本类型包括:

1 支付给公钥哈希 (P2PKH)

P2PKH 是最常用的用于向一个或多个比特币地址转账的公钥哈希

比特币怎么交易的_比特币交易网站_如果国内比特币交易网站销户了,那以后怎么交易

Pubkey script: OP_DUP OP_HASH160  OP_EQUALVERIFY OP_CHECKSIG

Signature script:  

2 支付给脚本哈希 (P2SH)

P2SH 用于考虑脚本哈希传输。 每个标准公钥脚本都可以用作 P2SH 赎回脚本,但在实践中,只有多重签名公钥脚本才有意义,直到更多交易类型成为标准。

Pubkey script: OP_HASH160  OP_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_HASH160  OP_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 允许设置要传播或打包的空数据输出的最大字节数。