
比特币协议规则
比特币协议的规则精确的定义了比特币系统的运行规则。
比特币系统中有不同类型的规则,包括:
- 不可变规则
- 可变规则
- 本地政策
- 标准政策
- 通迅规则
比特币的不可变规则
不可变规则指的是为了在软件中实现比特币的规范格式(参考文底参考资料[1]),那些被编码进比特币节点客户端、节点必须严格遵守的规则。这一系列规则定义了交易和区块必须遵循的格式和条件。若要修改这些规则,需要对网络进行硬分叉;如果矿工试图强制修改规则并执行新规则,这将会改变比特币的性质,导致账本产生重复。由于比特币系统是由这些规则定义的,一个改变了规则的分叉链可能会共享比特币的历史账本,但这条分叉链不能被视作比特币,而是一个全新的区块链。
不可变规则包括:
- 一笔交易的输入值总和必须大于或等于其输出值的总和。
- 区块补贴将按照预定速度发放:创世区块的区块补贴是5,000,000,000聪;从创世区块开始,每210,000个区块,补贴会进行一次减半。
- 网络将根据挖掘有效区块所需的工作量证明的难度调整区块难度目标值,使得网络新区块的生产速率基本保持大约每10分钟一个。
- 只有被添加在了以创世区块为开端的区块链上的区块,才是有效的区块。
- 比特币数据库的结构,即一个用于验证交易输出链的时间戳服务器。
- 交易数据格式,包括特定字段的大小及其编码模式。
- 区块结构和区块头信息,包括特定字段的大小及其编码模式。
- 比特币脚本语言及其规范,包括:可在脚本中使用的操作码列表,和它们执行后得到的精确结果。
过去,对这些协议规则的强制更改导致比特币数据库产生了多种版本。其中实施了“隔离见证(Segregated Witness)”的 BTC网络,泯灭了比特币必须是数字签名链的特性;而BCH网络摒弃了比特币系统原本的时间戳功能,实施了另外的交易排序模式,并修改了原始脚本语言以添加新的操作码,这些都超出了比特币原始设计的范围。
与它们截然相反,BSV的理念是:如果过去一些比特币规则发生了变化,则应该将它们尽可能的恢复到接近原始规则的状态,然后保持规则不再改变。除非,以保护网络安全的目的做相应的规则更改,比如:如果SHA256被破坏,则变更为新的哈希函数,此规则通过中本聪共识来强制执行。
比特币的可变规则
可变规则是挖矿客户端自我实现的、但没有硬编码到BSV节点客户端中的共识规则。矿工可以随时更改这些规则,前提是矿工之间在中本聪共识的框架下达成了广泛的一致;而在这些规则的设置上,那些未与网络里大部分矿工保持一致的矿工,将承担自己创建的区块可能无效的风险。这类例子包括:
- 最大脚本内存使用规则:该规则控制交易在其脚本执行期间可以消耗多少内存。
- 规则最大区块体积的规则。
- 交易脚本规则,例如禁止在ScriptSig中使用pushdata以外的操作码的规则。
需要强调的是,在特殊情况下,矿工可能会违反这些规则,通过矿工间的谈判,违反这些规则的交易或区块有可能最终被接受并纳入区块链。这只能通过中本聪共识来实现。但目前尚未遇到这种情况。
在修改这些规则时,矿工倾向于集体行动,一次性更改特定的规则(如最大交易内存限制和最大区块体积)。自创世纪升级以来,变更这些规则不再需要硬分叉或预定的网络升级,并且通过节点客户端配置工具就可以管理这些规则的设置。
矿工之间只需要达成一个宽松的协议,就可以在特定日期和时间更改网络上的设置。这意味着每个矿工都必须了解网络中的其他矿工正在采取什么行动,以免他们自己拒绝了网络中大多数节点正在接受的交易或区块,这时网络还在向前推进,而他们自己则进入了无效的链端。
本地政策
根据定义,这些规则是“本地化的”。它们适用于正在运行中的软件,并不适用于验证区块或区块内的交易。矿工从另一个矿工那里接收到的区块,可能包含着不符合该矿工本地规则的交易。本地规则包括:
- “最低费用”规则:该规则规定节点只能接受并(或)转发交易手续费高于某确定数量的未确认交易。
- “粉尘”规则:规定了节点能够接受并(或)转发的交易里包含的最小输出值。
- 与网络的入站和出站连接相关的规则,例如 RPC 响应、要连接的特定IP 地址等。
标准政策
标准政策是指那些绝大部分的网络节点使用的本地规则。它们之所以被定义为“标准”,是为了推动相互独立的软件之间的通用程序发展,需要注意的是,软件并不需要必须实现或遵守这些政策。
在标准政策指导下构建交易的比特币用户,很少会在网络上遇到问题。一些矿工可以制定“标准政策”之外的“本地政策”,但这可能会给矿工带来问题,他们可能会挖出一个包含着大量其他矿工会拒绝的交易的区块。由于这样的区块在全网传播较慢,这可能导致孤块。
通讯规则
通讯规则控制着交易数据和区块数据如何在比特币网络中广播。通常称为比特币点对点 (P2P) 协议,当前版本比较完善,因此目前比特币网络中的大多数节点都应用此版本进行通信。但P2P协议可以改变,也确实有矿工计划在未来实施更改。可以想象到未来矿工之间有可能会使用几种不同的节点间通信协议来传播区块和交易信息,而这种对网络进行优化的动力一定是来自比特币挖矿的经济激励。已经有着大量通过改进P2P协议来促进BSV网络扩容的创新,并且这类创新在未来还会更多。
相关内容
参考资料
[1] – https://github.com/bitcoin-sv-specs/protocol/blob/master/updates/genesis-spec.md