本文节选翻译:How to Run a Blockchain on a Deserted Island with Pen and Paper
作者:Tal Kol
如果你曾经被困在一个荒岛上,而你知道如何运用分布式共识,手工进行一个非常简单的区块链记账,那将非常有用。你只需要一些幸存者,一支钢笔和几张纸。
假如这荒岛上有:Hugo, Sawyer, Kate 和 Jack**四人组成。
简单回顾:该四人团伙正试图实施IslandCoin这种货币,来结束该岛瘫痪的易货经济。大家同意,一开始大家都只有100个IslandCoin。由于他们没有金属来制作真正的硬币,他们将不得不用几张纸来做。但面对信任问题,大家无法信任一个人对余额进行记账,给他们的选择是保持平衡。
最简单的区块链实现开始,想要实现目标是什么?在一张纸上保持一个简单的账目平衡表。在这张表中显示每个人的IslandCoin数量。关键点,不能只有一张纸是最终版本,而是在保持不变的情况下,让各位都持有一个自己的版本(分布式部分),希望4张纸最终显示出同样的东西 (共识部分)。
那么这张纸长是什么样子呢?
[图片上传失败...(image-ba22a7-1538910997323)]
这是大家同意的第一天,所以把它被标记为第1天。这些余额来自哪里呢?这是大家一开始同意的,每人100个IslandCoin开始。当然需要其中一位幸存者来记录。Hugo将成为向所有人记录并公布这份记录的人,并确保每个人都保存一份副本。
由于预计IslandCoin的余额会发生变化,因此,在每天结束时创建一张新平衡表,更新纸张。为了保持公平,不会总是Hugo来记录并公布更新。
由于四人缺乏相互信任,于是要让每个人单独确认状态更新。实现的简单方法:在同意记录表中的内容,让其每一位签署每份文件。
那么需要多少人签署一份文件,才能被认定为最终批准呢?因为需要达成共识,所以大多数人都会这样做。总共4个人,大多数人至少有3个人。
第一天由所有四个人签署的,因此它绝对是最终的。为什么不想要求四个签名?因为这将允许一个人危害整个过程。如果Sawyer去钓鱼旅行几天,则无法更新余额,直到他回来,那么这给了一个人太多的权力。
那为什么4个签名中有2个不够?因为如果我们只需要4个中的个,最终可能会有2个人(比如Hugo和Sawyer)签署一个版本的余额,而另外2个人(Kate和Jack)签署了一个不匹配的不同版本。不能将两个相互矛盾的现实版本都视为最终版本。
第二天早上,Kate想买一个西红柿,Hugo每人卖西红柿2个硬币。Kate想将2个IslandCoin转移到Hugo。于是Kate拿了一张新纸并在上面写了转移:
[图片上传失败...(image-370baf-1538910997323)]
这是有史的第一次行动,所以将其标记为这样。并且,Kate签署了这条行为。大家必须签名,以确保没有其他人可以在Kate的帐户上伪造转账请求。
第二天结束即将到来,要发布一组更新的余额。
Hogo第1天公布并收集了每个人的签名。4人同意使用一个简单的旋转命令:Hugo,Sawyer,Kate,Jack,Hugo,Sawyer等等来轮流登记并更新。这意味着公布第2天最终状态文件,是Sawyer的责任。Sawyer公布的记录反映了Kate的转移:
[图片上传中...(image-1d7cc8-1538910997323-1)]
但此时,Sawyer公布的记录还不是最终的,因为只由Sawyer签名,需要收集更多签名方可。于是Sawyer要求每个人进行核实并签名。
当然本文很容易验证的。首先,验证者要查看自己的最终记录集,找到显示前一天(本例中为第1天)余额状态的文件。接下来,验证者检查新的传输列表。
在这种情况下,Kate只有一次转移,因此很容易验证,并可以确保确实是由Kate签署,还确保了Kate确实有足够的余额转给Hugo。
当4个人都完成他们的验证并签署文件。那么,Sawyer现在有一份第2天的最终状态文件,并发布给每个人。每个人都制作副本,然后快乐和满足地睡觉。
[图片上传失败...(image-d86e9d-1538910997323)]
第三天早上……
为什么这被认为是区块链?对于初学者来说,每天公布的记录代表一个块。每个块都有编号并指向前一个块 - 形成一个块链。为了验证当前的平衡状态,任何观察者必须从链的开头(第1天 - 创世块)开始,并依次验证每个块,余额并逐步建立。