“创世纪升级”技术变更”
by Aleksander Gora
一月 15, 2020 (1min read)
BSV 节点团队已正式发布节点软件v1.0.0版。这个版本是实施2月4日“创世纪升级”硬分叉的必需版本。...

BSV 节点团队已正式发布节点软件v1.0.0版。这个版本是实施2月4日“创世纪升级”硬分叉的必需版本点击此处查看比特币及共识规则变更的技术规范。

需要注意的是,请务必于24日之前,将所有已安装的BSV节点软件升级至v1.0.0版。由于旧版节点软件与新规则不兼容,导致它将于2月4日之后失效。

重点变更

必要共识参数

必要共识参数必须由系统管理员进行配置。 当未配置参数时,软件无法正常启动。 如需了解必要共识参数的更多信息,请访问此链接

区块体积硬顶

区块体积硬顶参数定义了软件允许进行交易验证的最大区块体积。对于体积大于该参数的区块,软件将不进行检索及验证。

脚本运算允许使用的最大栈内存

本必要共识参数定义了脚本在运算时允许使用的最大栈内存。如果脚本尝试使用超过参数定义值的内存量,将中止脚本的运行,导致脚本失败。

共识变更

恢复 OP_RETURN 的功能

将OP_RETURN的功能恢复到其最初的设计,从而使开发人员能够轻松地提前中止脚本运行,同时还可得到有效的返回值。

BigNumber 替代 32 位操作码

将大大提高比特币脚本语言的数学能力。 32位的容量十分有限,在执行复杂的数学运算(例如签名验证)时,会很棘手且效率不高。此项更改将恢复最初的设计,提升复杂运算的效率,并启用提供各种高级功能的复杂脚本。

在新交易中废止使用P2SH

Pay-to-script-hash(或P2SH)是比特币引入的一种新机制,用于在创建输出脚本时隐藏行踪。这与比特币诚实记录的哲学背道而驰。此外,P2SH鼓励了不良的隐秘活动在其上大肆交易,并且与比特币至关重要的点对点主张相背离。现有P2SH地址上的比特币将不受影响,因此不需要整理旧钱包。这项变更是为了阻止进行新的P2SH输出。

恢复nLockTime 和 nSequence 的最初用法

这两个字段是支付通道机制中不可或缺的一部分,中本聪将它们设计为用于进行高速微支付的基本机制。但是后来BTC Core开发人员将它们重新定义为两个新的操作码。除了要删除这些操作码,还要恢复nLockTime和nSequence的最初用法。

其它必需的变更

对点传播非标交易

将允许任何人都可以使用复杂交易。在创世纪升级之前,只有标准交易(如支付交易或普通数据交易)才会被点对点传播,并传至矿工。这意味着,如果你想使用复杂的交易,你必须先与一个矿工达成协议,要求矿工进行确认并打包。在创世纪升级之后,所有交易类型都可进行点对点传播,这样任何人都可以使用复杂交易。

补充共识变更

  • 创世纪升级的区块高度激活机制
  • UTXO 继承依赖规则
  • 正式脚本语法
  • scriptSig中只能包含OP_PUSHDATA操作
  • 在新交易中废止使用OP_CHECKLOCKTIMEVERIFY和OP_CHECKSEQUENCEVERIFY
  • 添加max_script_memory_usage的策略限制,默认值为100MB
  • 添加max_script_memory_usage的共识限制,默认值为无限大
  • 取消对每MB块空间的签名数的共识上限
  • 取消对每笔交易的签名数的共识上限
  • 取消对每个脚本的操作码数量的共识上限
  • 取消对每个脚本对象体积的共识上限
  • 取消对脚本中对象数量的共识上限
  • 取消对每个multisig公钥数量的共识上限
  • 将交易体积的共识上限提高到1 GB

性能改善

  • 并行区块验证
  • 单独处理低优先级队列中的非标交易
  • 为标准交易和非标交易设定评估超时策略的脚本
  • Inv信息中包含按验证次序排序的tx
  • 并行区块验证的增强测试
  • 常见的创世纪激活代码与命令行选项
  • 在创世纪升级之后,在主网上启用对非标准交易的验证
  • 将内存池的默认值设为1GB
  • 删除User Agent中的区块大小字段
  • 更改默认交易费(默认打包费率为0.5默认允许的最低转播费率为0.25聪/字节)
  • 更新SPV布隆过滤器,以避免重放攻击
  • 提高无序化预分配的性能
  • 更改日志消息,使其内容更加精准
  • 修复:验证非标准事务时,可能将节点锁定超过一分钟
  • 修复:在验证交易时,使用“拒绝提示”和“封禁记分”功能
  • 修复:区块发送列队溢出
  • 修复:bsv::deserialize函数中的未定义行为
  • 修复:“bitcoin-cli help getblock”无法正常运行
  • 修复:当检测不到Boost参数时,应当配置失败
  • 修复:对创世纪新功能的测试,设置执行权限位
  • 修复:最近区块中位数时间
  • 修复:无输入的非最终交易,会被错误拒绝
  • 修复:asn1_integer的内存泄露
  • 修复:boost::optional 函数的警告
  • 修复:源码包中未包含py
  • 修复:Fundrawtransaction RPC changePosition 参数导致访问超出范围
  • 添加基本的 –enable-tcmalloc 选项
  • 修复:CTxnDoubleSpendDetector 删除向量末尾
  • 修复:大于2GB的数据的lshift和rshift
  • 为创世纪升级作准备,更新RDP
  • 设置异步验证的最长任务时间
BitcoinSV-zh