如何选定“必要共识参数”

“创世纪升级”删除了“最大区块体积”这项默认设置,并将其定义为“必要共识参数”。还增加了一个新的“必要共识参数”,即“脚本运算允许使用的最大栈内存”。这些参数值必须由系统管理员手动配置。本文描述了这些参数的具体信息,并对如何选定参数值给出建议。

总的来说,纵览 BSV 矿工,他们选用与本文相同的参数或者更大的参数。预计矿工不久后将其挖出的区块头中公布他们各自的设置。与此同时,我们也将在此页面定期手动更新各矿工的已知设置。

我们强烈建议您关注运行 BSV 节点的推荐系统要求

区块体积硬顶

此“必要共识参数”定义了区块体积硬顶(以字节为单位)。软件不会检索或验证任何大于此参数值的区块。

可以使用配置选项“excessiveblocksize”配置本参数,值以字节为单位。可以使用命令行进行配置,也可以在配置文件中指定。

也可以在运行软件时使用“bitcoin-cli setexcessiveblock”进行配置(该功能于 1.0.0 版中新增)。请您留意,当使用“bitcoin-cli”进行设置时,该参数值并非永久有效。如果下一次启动软件时,则参数值将恢复为此前使用命令行或配置文件定义的值。

请注意,“excessiveblocksize”是矿工允许接受的最大区块体积。但是,矿工打包生成的最大区块体积由另一个参数“blockmaxsize”决定,“blockmaxsize”的参数值通常比“excessiveblocksize”小。

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

本“必要共识参数”定义了脚本在运算时允许使用的最大栈内存。如果脚本尝试使用超过参数定义值的内存量,将中止脚本的运行,导致脚本失败。脚本失败将导致交易无效,并且包含了这笔无效交易的区块也会成为无效区块。

可以使用配置选项“maxstackmemoryusageconsensus”配置该参数,值以字节为单位。可以使用命令行进行配置,也可以在配置文件中指定。

选定“必要共识参数”的值的方法

BSV的网络容量由验证及确认区块的矿工来决定。 矿工将分析区块链的状态,软件的功能以及其他因素,并确定“必要共识参数”的值。 矿工将发布各自的设置。

决定“必要共识参数”的值的推荐方法是,纵览矿工发布的参数值,考虑到矿工的能力。如果是矿工,采用相近的值;如果是非矿工,采用更高的值。

请注意,矿工可能会变更他们采用的参数值,因此建议定期检查。

矿工节点与区块链监听者

节点即矿工节点,是打包生成区块的节点。 区块链监听者虽运行节点程序,但不参与挖矿。

对于区块链监听者,我们建议其参数至少设置为矿工的两倍。 这是为了预留缓冲空间,以便将来当矿工提高参数时,监听者不会因参数值过低而被网络分叉。

如果参数值设得过低

如果您设置的参数值低于大多数矿工,当网络中的新区块超出了您设置的参数值,则您的节点将会拒绝这个区块和其后的所有区块,从而被网络分叉。但是,如果您不进行挖矿,那么您的分叉很可能不会延长,您的节点只是单纯的停止跟随最长链。在这种情况下,解决方法就是只需提高参数值并重启节点。然后,它将接受此前拒绝的区块并追赶最新区块。

选择“无限”参数设置

您可以把任意参数的值设置为“0”,可以将其定义为“无限”。如果这样配置,就没有被网络分叉的风险。但是,当网络中挖出了超大区块,您的节点可能会因内存耗尽而崩溃。如果您已遵循最佳实践并分配了较大的 Swap 交换分区,并且内存不低于最低建议值,则只有在遭受攻击时才可能出现上述情况。如果发生这种情况,解决方法是将您的参数设置为与大多数矿工相近似,然后重启节点。

当前已知的的矿工设置

矿工名称 excessiveblocksize maxstackmemoryusageconsensus
CoinGeek 1,000,000,000 (1GB) 100,000,000 (100MB)
Mempool 1,000,000,000 (1GB) 100,000,000 (100MB)
SvPool 1,000,000,000 (1GB) 100,000,000 (100MB)
Taal 1,000,000,000 (1GB) 100,000,000 (100MB)
NourPool 1,000,000,000 (1GB) 100,000,000 (100MB)

安全设置

根据当前已知的矿工设置,目前的安全设置如下:

类型 excessiveblocksize maxstackmemoryusageconsensus
矿工 1,000,000,000 (1GB) 100,000,000 (100MB)
区块链监听者 2,000,000,000 (2GB) 200,000,000 (200MB)