1.4 向“去中心化”迈进
共识账本的原件在聪主任那里,记账员手中的是复印件。有趣的是,这份原件聪主任从来没有拿出来过,即使它被烧了也是不要紧的,因为它有多份副本。于是,聪主任也懒得对这些原件进行管理,而是花心思进一步优化流程。
1.4.1 神奇的“缩放机”
一日,聪主任买回了一批“全息缩放机”(注:现实中没有这种机器)。这种缩放机有两项神奇的功能,如图1.2所示。
(1)照相:为账页照一张全息小照片,可以理解为缩小功能;
(2)恢复:从小照片无损地还原成原来的账页,可以理解为放大功能。
图1.2 照相与恢复
1.4.2 隐性投票
聪主任想了一套高超的“组合拳”:一是将原来账页“承前页”的位置改为“前页照片”;二是将原来向聪主任提交完成的账页环节改为由提交账页的记账员向其他记账员发布账页;三是将原来的投票环节改为记账员将自己同意的账页(该记账员“审核进程”投票的账页)通过“全息缩放机”照下来,“嵌入”自己的下一个工作账页的“前页照片”处。
例如,前述例子中对账本第1001页的投票环节:记账员将自己认可的第1001页的照片嵌到自己的第1002页的“前页照片”处,以此作为自己对第1001页的投票。
记账员通过这种“隐性”投票,使得票数多的页自动成为公共账本的新增页。
如图1.3所示,A的第1002页投的是(1001,A),B的第1002页投的是(1001,B),C的第1002页投的也是(1001,B)。假定只有A、B、C三个记账员,则(1001,B)胜出。
图1.3 隐性投票
在后面的章节我们将会看到,这种“隐性”的投票也会使得公共账本“隐性”地存在,即它并不存在某个地方,但我们在需要的任何时候都可以找到它。例如,你拿到一个最新的账页,如(1002,C),通过其中的“前页照片”找到(1001,B),再通过(1001,B)找到(1000,X)……
由此形成的链式结构称为区块链:[(0,聪),(1,X),…,(1000,X),(1001,B),(1002,C)],其中(0,聪)为聪主任定的账本首页(封面),被分发给所有记账员,作为记账的共同起点,即区块链的创世纪块。最右的(1002,C)显然没有经过投票,它是否会在公共账本中需要打个问号,被称为“未确认”,而倒数第二的(1001,B)被第1002页所确认,称为“经过了一次确认”,倒数第三的(1000,X)被第1001和1002页所确认,称为“经过了二次确认”,依此类推。
由于所有记账员都在一个记账室里,能非常及时地看到别人发布的账页,没有网络延时,所以大家的“投票”几乎是同时进行的,在集中投票条件下,经过了一次确认的账页就被认为是“权威发布”。此时,图1.3中除最右侧编号为1002的账页未确认外,小于1002编号的账页均已有确认页。已确认页组成公共账本,它目前为[(0,聪),(1,X),…,(1000,X),(1001,B)]。
随着记账的不断进行,区块链不断向右生长,公共账本也不断加厚。
1.4.3 改弦易辙
将图1.3中的记账继续,新的页为第1003页,假设A在记录账页(1003,A)时,发现(1002,C)先于(1002,B)到达A,虽然二者都正确,但根据优先原则,A将依照自己的所见在(1003,A)中投票给(1002,C),即在(1003,A)的“前页照片”栏处嵌入(1002,C)的照片。
假设A、B、C对第1002页的投票结果如图1.4所示。
图1.4 改弦易辙
A投票给(1002,C),意味着A也认可它的“前页照片”,即认可(1001,B),而先前A并没有认可该页,在(1002,A)时,A认可的是(1001,A)。也就是说,当A发现它认可的错误后,是有机会改正的。当A改弦易辙后,(1001,B)从原来的2票变为现在的3票,即全票通过。
图1.4中的“实线”账页即为共识账页,它们共同形成区块链的公共账本,“隐式”地存在于这些账页之间。