5.2 守规矩的记账员
显然,区块链的正确性和成长性是由守规矩的记账员保证的。守规矩的记账员的工作是多方面的,身兼数职,这也是我们常以不同的身份来指代他的原因。下面以他的不同身份来描述其职责。
5.2.1 作为网络节点
我们知道,区块链是建立在专门的点对点P2P网络上的,所以,首先要保证该基础设施正常,作为网络节点的记账员将负责数据的及时同步。
(1)维护网络上的数据传输正确,如响应或转发其他节点的数据请求,分享本节点的数据,包括交易和区块;
(2)维护本节点的数据,同步区块和交易,形成本地最新的区块链和交易池。
5.2.2 作为审计员
账务是否正确需要通过相关的审计工作来保证。在第1章,我们就知道,在区块链的世界中,记账和审计是同时进行的。这里的审计就是验证区块。
(1)对区块的验证:区块组装是否正确;
(2)对区块中的交易进行验证:语法格式、交易数据、交易脚本,以及是否双花(双花即多重支付,后面会谈到);
(3)对区块头的验证:格式是否符合要求,谜题解答是否正确。
5.2.3 作为记账员
记账是区块链存在的价值所在。我们知道,记账员是独立记账的,他将公众提交到交易池中的交易组装成区块并放入链中(“放入链中”是指区块头连接)。
(1)对收到的新交易进行验证,包括语法格式、交易数据、交易脚本,以及是否双花;
(2)维护本节点的交易池,交易池中有已验证但还未纳入区块的交易,若收到了新区块并验证认可,则要将该区块涉及的交易从交易池中剔除;
(3)从交易池中选择若干数量的交易组装成区块,形成账页;
(4)该账页即为“待定区块(半成品)”,交由矿工处理。
5.2.4 作为矿工
在矿工之间,通过“工作量证明”算法实现区块的“最终一致性”,即大家的副本“最终”是一致的,这是第4章论述的结论。
(1)选取最长的链的顶端区块作为挖矿基础,即将其视为前置区块,将其Hash值作为该区块的“缩微”置入“待定区块”;
(2)对“待定区块”进行挖矿,求解谜题。一旦解出,则将“幸运数”填入“待定区块”;
(3)向网络提交该“待定区块”,参与“最长优先”的竞争;
(4)在挖矿过程中,一旦收到了该高度或更高高度的区块,应立即终止本高度区块的挖矿,因为别人已经挖出了,之后开启在新的基础上的挖矿。