创世纪升级移除了区块大小上限的默认设置,并且将此定为“强制共识参数”。此次升级还规定了一项新的设置,即“最大的脚本内存使用”的强制共识参数。这些参数的值必须由系统管理员在软件中手动设置。本文将提供这些参数的信息,并且给出关于如何选择所需值的建议。
选择这些参数所建议的方法主要是纵览Bitcoin SV上那些大型矿工如何设置,然后选择与之相同或更高的参数。预计矿工们将在不久的将来开始在他们的Miner ID coinbase文档中公布这些设置。然而,与此同时,我们也会定期手动更新本页面中已知的矿工们的设置。
我们强烈建议你关注运行一个 Bitcoin SV 实例的最低推荐系统要求。
区块大小的上限
这个强制共识参数规定了区块大小的上限,单位是字节。节点软件不会检索或验证任何大于此参数值的区块。
可以使用“excessiveblocksize”配置选项对该参数值进行配置,单位是字节。可以在命令行或配置文件中设置此项目。
还可以在软件运行时通过“bitcoin-cli setexcessiveblock”命令(该功能已添加在v1.0.0节点软件中)配置该参数。必须要注意,当使用“bitcoin-cli”命令设置区块大小上限时,这个参数值并非永久有效。如果软件重启,参数值将重新恢复到配置文件中设置的值,或者恢复到此前在命令行中所规定的值。
还请注意,“excessiveblocksize”是矿工允许接受的最大区块。但是,矿工自行打包生成的最大区块则由另一个参数“blockmaxsize”决定,“blockmaxsize”的参数值通常比“excessiveblocksize”小。
最大堆栈内存使用量
这个强制共识参数规定了脚本在运算时允许使用的最大栈内存。如果在运算时,脚本尝试使用超过该参数值的内存量,运算将会终止,导致脚本失败。脚本失败将导致该交易无效,并且包含了这笔无效交易的区块也会成为无效区块。
可以使用 “maxstackmemoryusageconsensus”配置选项对该参数值进行配置,单位是字节。可以在命令行或配置文件中设置此项目。
选择强制共识参数值的方法
Bitcoin SV网络的性能取决于参与区块确认的矿工们。矿工们将分析区块链的状态、软件性能及其他因素,然后决定自己如何设置强制共识参数的值。各矿工还将公开他们所选择的参数值。
确定强制共识参数的值所推荐方法是,纵览各矿工所发布的参数值,同时考虑到该矿工自身的能力。如果该矿工正在进行挖矿操作,那么采用与其他矿工相近的值;如果没有进行挖矿操作,则推荐设置更高的值。
请注意,各矿工可能会变更他们所采用的参数值,因此建议定期检查相关设置。
矿工节点与区块链监听节点
我们将节点定义为Bitcoin SV的一种实例,即在挖矿过程中生产区块。区块链监听节点则是Bitcoin SV的另一种实例,它们不参与挖矿。
我们建议监听节点将参数值设置为矿工的两倍或更高,这样监听节点有足够的带宽,以防将来当矿工提升其设置时,因自身参数值比矿工低而被从网络中分叉出来。
假设参数值设置得过低
如果你设置的参数值低于大多数矿工,那么当网络中的新区块超出了所设置的参数值,你的节点将会拒绝此区块和其后的所有区块,因此而产生网络分叉。不过,如果你的节点不进行挖矿,那么分叉很可能并不会延长,节点仅会停止跟随最长链。在这种情况下,解决方法就是只需提高参数值并重启该节点。之后,它将接受此前所拒绝的区块并追赶网络上的最长链。
选择“无限”参数
你可以通过把参数值设置为“0”,从而取消对这些参数的限制,此时就不会面临网络分叉的风险了。但当网络中挖出了超大区块时,你的节点可能会耗尽内存并崩溃。不过,如果你已遵循了最佳实践和分配了较大的交换分区,并且使用了最低建议内存,那么只有在受到攻击时才可能出现上述情况。发生这种情况的补救措施是将参数设置为与大多数矿工相近,然后重启节点。
强制设置
基于目前已知的矿工设置,以下参数配置较为安全:
安全值 | 最大区块大小 | 最大堆栈内存使用 |
矿工节点 (Miner) | excessiveblocksize=1000000000 | maxstackmemoryusageconsensus=100000000 |
监听节点 (Listener) | excessiveblocksize=2000000000 | maxstackmemoryusageconsensus=200000000 |
已知参数值 | 最大区块大小 | 最大堆栈内存使用 |
CoinGeek | excessiveblocksize=1000000000 | maxstackmemoryusageconsensus=100000000 |
Mempool | excessiveblocksize=1000000000 | maxstackmemoryusageconsensus=100000000 |
SVPool | excessiveblocksize=1000000000 | maxstackmemoryusageconsensus=100000000 |
Taal | excessiveblocksize=1000000000 | maxstackmemoryusageconsensus=100000000 |
NourPool | excessiveblocksize=1000000000 | maxstackmemoryusageconsensus=100000000 |
可选设置
随着Bitcoin SV越来多地被采纳,网络交易量持续上升。随着数据型交易(op_returns)的大规模使用,你的Bitcoin SV节点可能无法处理内存池里的交易流量,也可能被大量的计算请求所击垮。因此,节点可能会丢弃一些交易,让交易费更高的交易进入内存池,之后再提升计算能力;或者出现更糟的情况,节点停止运转。
以上情况的解决方案是把下列参数从默认值调高,让节点在高负载的情况下保持运行效率。
默认值 | 内存池大小上限 | 签名和脚本缓存 | 最大孤儿交易数量 |
Genesis升级前 | maxmempool=300 | maxsigcachesize=TBC maxscriptcachesize=TBC | maxorphantx=TBC |
Genesis升级后 | maxmempool=8000 | maxsigcachesize=TBC maxscriptcachesize=TBC | maxorphantx=TBC |