如何用笔和纸在荒岛上运行区块链(下)

如果你被困在一个荒岛上,但清楚如何运行一个分布式的共识机制 ,即懂得如何手工操作一个非常简单的区块链的话,那便会是非常有用的。你需要的只是一些幸存者,这篇文章,一支钢笔和几张纸。

如果不确定此技能对荒岛的生存是否有用,可以阅读上一篇

如何在荒岛上运行区块链(上)

回到那个原始荒岛的故事里,并与我们无畏的英雄一起继续度过他们的冒险,他们刚刚在南太平洋某个荒岛上坠毁,他们分别是:Hugo(园艺师)Sawyer(伐木工)Kate(猎人)和Jack(药剂师)

一个简短的回顾:该群人正试图发行一种名为IslandCoin的新货币,这种新货币将结束该岛即将瘫痪的物物交换经济系统。该群人已经同意,每个人都以100个硬币作为开始。由于他们没有金属来制作真正的硬币,他们将不得不用几张纸来做记录。面对信任问题,该群人无法就一个人跟踪余额达成一致意见,他们唯一的选择是共同来维护账本记录的准确性。

想要实现的目标实际上非常简单: 在一张纸上保持一个简单的收支平衡表。这张表将显示每个人当下所持有的硬币数量。关键点在于因为不能只有一张纸,而是在必须保持总体硬币数量不变的情况下,让每个人持有自己的版本(分布式)。当然,我们也希望所有4张纸最终显示出同样的东西 (共识)。那么这张纸会是什么样子?

这张纸是第一张被“记录”的账本,这就是为什么它被标记为第1天。余额来自于之前已经同意的每人初始100枚硬币。其中一位幸存者将来记录这样一份账本,他将成为向所有人发布这份纸张的人,并确保每个人都保存一份副本

由于预计硬币余额会发生变化,人们将在每天结束时创建一张新的更新纸张。

由于该群体缺乏相互信任,另一个重要的部分是让每个人单独确认状态更新。实现这一目标的一个简单方法是让每一位幸存者签署每份文件,但前提是他们同意书中所写的内容。

有多少人需要签署一份纸张才能被认定为最终批准?因为人们需要达成共识,所以默认为大多数人同意才有效。由于幸存者共有4个人,大多数人至少有3个人。上面的第一份纸张是由所有四个人签署的,因此它绝对是最终大家同意的一个版本。

为什么不需要在所有的纸张上要求所有4个签名?因为这将导致一个人妨碍整个过程。例如如果Sawyer去钓鱼旅行几天,该群体直到他回来将无法更新余额,这给了一个人太多的权力。

为什么甚至需要多数人?为什么4个签名中有2个不够?因为如果我们只需要4个中的2个,最终可能会有2个人(比如Hugo和Sawyer)签署一个版本的余额,而另外2个人(Kate和Jack)签署了另外一个不匹配的不同版本。导致不能将两个相互矛盾的版本都视为最终版本。

第二天早上,Kate想买一个西红柿。Hugo的每个西红柿卖2个硬币。Kate将2个硬币转移给Hugo。Kate拿了一张新纸并在上面写下记录:

这是Kate有纸张记录以来的第一笔交易,所以她将其标记为这样。此外,Kate签署了这份纸张的同时,其余人也必须签名,以确保没有其他人可以在她的帐户上伪造转帐请求。

第二天即将结束,该群体希望发布一组更新的余额记录。Hugo第一天发表论文并收集了每个人的签名。而由于该群体使用一个简单的轮流制度:Hugo,Sawyer,Kate,Jack,Hugo,Sawyer….这意味着发布第2天的状态记录是Sawyer的责任。他发表的纸张记录反映了Kate的这笔转移:

Sawyer所做的这篇记录还不是最终的,因为它只是由Sawyer签署的。他需要收集更多签名。Sawyer与他人交流并要求每个人核实并签字。这篇记录很容易验证。首先,验证者需要查看他自己的记录纸张,并找到显示前一天(本例中为第1天)余额的状态文件。接下来,验证者需要检查新的传输列表。

在这种情况下,Kate只有一次交易,这样的交易很容易被验证,我们可以确保它确实由Kate签署,并且可以确保Kate确实在她的余额中有足够的硬币给到Hugo。

一旦每个岛上的居民完成他们的验证过程并签署文件,Sawyer现在便有一份第2天的最终状态文件,他发布给每个人。每个人都制作了该文件副本,然后快乐和满足地睡觉。

第3天即将到来。该系统运作良好,每个人都很高兴能够花钱。Hugo想要从Sawyer那里购买10块硬币。Sawyer希望从Jack手中获得25枚硬币的药片,Jack渴望吃番茄,并希望给Hugo 2个硬币买一个。他们每个人都创造了一张纸,详细说明了他们的交易:

随着晚上临近,发布今天余额记录的人是Kate。为了确保Kate在她的记录提案中包含这些交易,他们每个人都需要向她提供交易请求的副本。将副本提供给每个人实际上是有意义的,因为想要执行交易的人不一定记得发布今天更新的轮到谁。

Jack徘徊着把他的交易请求副本交给Kate,当他把它带给她时,她已经完成了当天的平衡状态:

Jack很沮丧,这种平衡状态不包括他自己的急哦阿姨。这意味着Hugo不会收到Jack的番茄付款,也不会给Jack吃西红柿的晚餐。Jack今晚要饿着肚子睡觉。他匆匆忙忙地寻找其他吃的东西,并没有签署Kate当天的论文提案。幸运的是,Kate能够从该团伙的其他成员获得足够的签名:

Kate设法在纸上签了3个签名,每个签名确认余额确实与转账和昨天的余额相匹配。因为签名人数占多数,所以这份状态表被认为是最终的版本。

到了第4天,没有人知道Jack在哪里。他前一天晚上去钓鱼,在暴风雨中被困住,并没有返回营地。这可能会造成一些麻烦,因为今天Jack轮到发布余额更新。

Kate今天想做几次交易,她把它们写在一张纸上并给每个人一份副本:

天快黑了,Jack还没回来。由于群体此前曾同意轮到他发布余额,但他无处可寻,所以今天的余额更新被忽略了。

现在是第5天,Hugo是负责发布每日更新的人。已经下雨了好几天,Hugo想要一个温暖的地方睡觉。他要求Sawyer为他建造一个小木屋。Sawyer想要200个硬币来完成这项工作。这有点问题,因为Hugo只有98个硬币。然而Hugo有一个疯狂的想法,他是今天发布资产负债表的人,所以为什么不加一个虚假的转账记录给Sawyer呢?

今天没有其他转账。Hugo从昨天起就有Kate的转账,Jack前一天的转账并没有最终成功。他补充了所有这些记录,以及他新的虚假转账:

Hugo签署了此更新,虽然他的转账目前还没有真正意义。要使此状态更新为最终状态,他需要再收集2个签名。当他接近Sawyer和Kate时,他们注意到在之前的最终资产负债表上(从第3天开始),Hugo有92个硬币。怎么能把200送到Sawyer?他们于是拒绝签署此资产负债表,直到他修复此错误并删除此无效转移。Hugo不情愿地同意并发布了一份新的正确的资产负债表,他们最终签了字:

此余额更新是最终的状态,因为它有3个签名。

这是第6天的早晨。Jack终于回到了营地。他和暴风雨一起度过了几天。过去两天他没有参与讨论,也没有公布新的转账和余额更新。他实际上不确定他有多少硬币了。他找到他看到的第一个同胞幸存者,并询问他错过的最新消息。

Jack很容易与其他团伙同步。他可以看到这些平衡表更新确实签了至少3次,所以他可以相对安全的相信记录没问题。他还可以根据这些更新和他拥有的最新更新(从第2天开始)自行执行计算。这将允许Jack参加今天的结算,就像他没有错过任何东西一样。

该系统似乎运作良好,但确实有点简单,但这足以满足这些岛上居民的需求。好吧,如果没有白皮书,我们就无法拥有功能正常的区块链!该群人坐下来,通过发布这个宏伟的白皮书来庆祝成就:

为什么这被认为是区块链?对于初学者来说,每天发表的每篇记录代表一个块。每个块都有编号并指向前一个块,形成一个块的链条。为了验证当前的平衡状态,任何观察者必须从链的开头(第1天 -创世块)开始,并依次验证每个块,余额是逐步建立的。

这是一个理想的区块链实现吗?可能不是。它可以通过多种方式得到改善。例如,它只支持这4个居民。如果另一名幸存者在岛上坠毁会怎么样?该协议是否能够容纳它们?该协议目前也需获得许可,我们怎样才能将其变为无权限?如果我们想要修改它以使用工作量证明或可能是股权证明怎么办?我们将在接下来的文章里继续探讨。

作者:Tal Kol

翻译:达令智库

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181127G1MF4H00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券