非标准交易 | Non-Standard Transactions
如果在输出中使用了任意非标准公钥脚本,使用Bitcoin Core默认设置的节点和矿工将不接受,不广播,不挖掘这个交易。当试图如此做时,会收到错误信息。
如果创建了一个兑换脚本,对其hash运算并应用到P2SH输出中,点对点网络将只能看到hash值。所以无论兑换脚本的内容是什么,都会被验证未有效输出。从Bitcoin Core 0.11之后,允许支付到非标准脚本,几乎所有的兑换脚本都可以用来支付。唯一的例外是 使用未分配的NOP操作码的脚本,这些操作码保留用于将来的软分叉,所以只能被不遵守标准mempool 协议的节点广播和打包。
注意:标准交易类型旨在保护比特币网络,而不是防止用户犯错。事实上,创建 支付到无法花费地址的标准交易是十分容易的。
从Bitcoin Core 0.9.3开始,标准交易也必须满足以下条件:
打包好的交易必须是完成状态的。它的锁定时间必须是过去的某个时间(或小于或等于当前块的高度),否则它的所有序列号都必须是0xffffffff。
交易必须小于100,000个字节。这是典型的单输入,单输出的P2PKH交易大约200倍。
每个交易的签名脚本必须小于1,650字节。这对于允许使用压缩公钥的P2SH类型15of15的多重交易来说,足够大了。
需要多于3个公钥的裸(非P2SH)多重交易当前是非标准交易。
交易的签名脚本只能将数据推送到脚本计算堆栈。除了仅将数据推送到堆栈的操作码,它不能推送新的操作码。
交易不允许这种输出:接收少于它在一个典型的输入中花费的1/3 聪。目前来说,相当于在默认广播费的bitcoin Core 节点中,至少需要 546聪,Null 数据标准是例外情况,因为null 数据交易的输出必须为0。