Py学习  »  区块链

科普 | 如何在荒岛上利用纸笔来运作区块链

以太坊爱好者 • 5 年前 • 421 次点击  


如果你被困在一座荒岛上,懂得如何运作去中心化共识的流程(换句话说,亲手运营一条非常简单的区块链)可以说是非常有用的。你只需要一些幸存者同伴、这篇帖文、一支笔以及几张纸。

如果你不确定这项技能是否有助于求生,务必阅读我的上篇帖文,了解区块链如何能够极大地改善岛上生活。




让我们回顾下最初的故事,和勇敢无畏的主人公们(坠落在南太平洋某座荒岛上的Hugo、Sawyer、Kate 和 Jack)一起重温那段经历。

简要回顾:这群人打算发行 IslandCoin(岛币),即一种具有革命性的新货币,终结岛上不健全的物物交易经济。这群人一致觉得出于公平起见,每个人以 100 个币起步。因为他们没有金属来铸造真实的货币,所以只能用一些纸来造币。由于存在信任问题,这群人还无法就指派哪个人记录余额情况达成一致。他们唯一的选择就是一起维护余额情况。

我们先讨论一下:对于我们的岛屿用例来说,最简单的区块链实施方案会是怎样的。在今后的帖文中,我们可以探究一下其它实施方案,并将它们和诸如 工作量证明 及 权益证明 之类的概念联系起来——这有助于我们发现它们的利弊。不过,眼下还是先从简单的开始吧。

我们的目标是什么呢?实际上非常简单——我们打算在一张纸上维护一张简单的余额表。这张表格会显示每位主人公拥有多少货币。诀窍在于,我们不能单凭一张纸来记录真相——我们必须维持公平,让每位成员保有各自的版本——这就是 去中心化 的部分。当然,我们希望 4 张纸上最终显示的余额情况是一样的——这就是 共识 部分。

那么,这张纸看上去是什么样的呢?

这张纸上记录的是 第 1 次 共识情况——因此被标记为第 1 天。这些余额是从哪儿来的呢?我们此前已经一致同意每位成员以 100 个币起步。我们还需要其中一位幸存者在纸上做记录。是谁来写真的无所谓,我们就选 Hugo 吧。由他向大家公布这张纸上的内容并确保每个人都保存一份副本(忘了提了,这座岛上还有一台超棒的影印机)。

因为货币余额预计会发生变化,我们打算在每天结束时创建一个更新的版本。但更新后的版本不一定总是由 Hugo 发布的——毕竟我们希望尽可能保持公平。

由于团体内部缺乏信任感,另外重要的一点就是让每位成员都确认状态的更新情况。要实现这一点,一个简单的方式就是让每位幸存者在每张纸上签字——但是只有在他们同意上面记录的内容的情况下才签字。

需要多少人在这张纸上签字才能算作最终批准呢?我们需要达成 共识 ,因此要多数人签字通过。由于一共有 4 个人,多数即至少 3 个人。上述纸条经由 4 个人的签字,因此肯定是最后版本了。为什么不要求 4 个人都在纸条上签字呢?因为这样可能会因个人原因危害到整个过程。如果 Sawyer 外出垂钓航行几天,这群人必须等到他回来才能更新余额——这就赋予了个人过高的权力。为什么非要多数人签字呢?为什么 4 人中有 2 人签字还不足够呢?因为如果只要求 4 人中有 2 人签字,最后可能变成 2 人(Hugo 和 Sawyer)签署了一个版本的余额,而另外 2 人(Kate 和 Jack)签署了另外一个版本。我们无法将两个互相冲突的现实版本都算作最终版本。




第 2 天早晨,Kate 想买个西红柿。Hugo 以 2 个币的单价出售西红柿。她想转给 Hugo 2 个币。Kate 拿出一张新的纸,在上面记录了这次转账:

这是 Kate 的首次交易,因此她这样标记了。另外,Kate 在这张纸上签了字。她必须在纸上签字,从而确保其他人无法在她的账户上伪造转账请求。

第 2 天结束之际,这群人想要发布一份更新过余额的版本。第一天是 Hugo 发布的,并收集了所有人的签字。轮流做这件事比较合乎情理。这群人同意简单地轮序:Hugo、Sawyer、Kate、Jack、Huge、Sawyer 以此类推。这意味着第二天由 Sawyer 负责发布更新后的状态。他发布的纸条记录了 Kate 的转账:

Sawyer 的纸条还不是最终版本,因为只有 Sawyer 自己签过字。他需要收集更多的签字。Sawyer 和其它人轮流沟通,让每个人核对并签字。这张纸条很容易核对。首先,核对者需要检查自己收集的纸条,找到记录前一天(即本例中的第一天)余额状态的纸条。接下来,核对者需要仔细检查新的转账清单。就这个例子而言,只记录了 Kate 的一次交易。这次转账很容易核对,我们可以确保 Kate 签过字,以及她的确有足够的余额向 Hugo 付款。

一旦每位岛上居民完成了他们的核对流程并在纸条上签字,Sawyer 第二天就有了记录最终状态的纸条,可以向所有人发布。所有人都影印一份副本,然后就可以安然入睡了。




我们迎来了第 3 天。这个系统正常运作,所有人都高兴地花着自己的货币。Hugo 想用 10 个币从 Sawyer 那儿买一些木柴。Sawyer 想用 25 个币从 Jack 那儿买一些药片,而 Jack 想花 2 个币从 Hugo 那里买个西红柿。他们各自用一张纸详细记录下自己的转账:

随着夜幕的降临,今日余额情况的发布者是 Kate。为了确保 Kate 将这些转账记录在了她自己的纸条上,剩下的人需要各自将转账请求影印一份给她。将副本给所有人的确是有意义的,因为想要进行转账的人不必记住今天轮到谁发布更新情况。

如果 Jack 比较磨蹭,当他把自己的转账请求副本交给 Kate 时,Kate 已经更新好了今天的余额状态:

Jack 会很沮丧,因为他的转账没来得及记录到余额状态里。这意味着 Hugo 不会收到 Jack 购买西红柿的付款,也就不会给 Jack 西红柿作为晚餐。Jack 今晚要饿着肚子睡觉了。他冲出去找别的食物,没有在今天 Kate 的纸条上签字。幸运的是,Kate 从剩余的成员那里得到了足够的签字:

Kate 成功收集到 3 个签字,签字者各自证明了该余额确实符合转账及昨天的余额。因为多数人达成了共识,所以该余额状态表被视为最终版本。




到了第 4 天,大家都不知道 Jack 的去向。他前一天晚上去钓鱼,被暴雨困在了外面,没有返回营地。这可能有点麻烦,因为今天轮到 Jack 更新余额状态。

Kate 今天想要转几笔帐,她将这些转账记在纸上,并将副本分发给所有人:

傍晚时分,Jack 还没有回来。这群人之前已经约定好今天由 Jack 发布余额状态,但是找不到他,因此跳过了今天的余额更新。




第 5 天轮到 Hugo 负责余额状态更新了。雨已经连续下了好几天了,Hugo 想要个暖和点的地方睡觉。他让 Sawyer 给他搭建一个小木屋。Sawyer 想要价 200 个币。这有点麻烦,因为 Hugo 只有 98 枚货币。然而,Hugo 产生了一个疯狂的念头,既然今天轮到他负责发布余额表,为何不无中生有,加上一笔这么大的转账呢?

今天没有其它转账产生。不过 Hugo 昨天收到一笔来自 Kate 的转账,以及前天没记录的 Jack 的转账。他将这些转账连同他新加的假账都添加到了纸条上:

尽管 Hugo 的转账根本说不通,他还是在更新过的纸条上签字了。为了让这次状态更新成为最终版本,他需要再收集 2 个签字。当他找到 Sawyer 和 Kate 时,他们注意到在上一份余额表(即第 3 天的余额表)上,Hugo 只有 92 个币。他怎么可能转 200 个币给 Sawyer 呢?他们拒绝在这份余额表上签字,除非 Hugo 改正这个错误并去除这笔无效转账。Hugo 不情愿地同意了,并重新发布了一份正确的余额表。他们最终在上面签了字:

这次余额更新成了最终版本,因为上面有 3 个签字。




到了第 6 天的早晨,Jack 终于回到了营地。他在暴雨中困了好几天,未能参与前两天的讨论,也错过了新转账的通知和余额表更新的发布。他实际上不确定自己现在有多少个币。他向见到的第一个同伴要了最新版的余额表。对方还给了他第 5 天的余额表最终版本以及 Kate 在第 3 天发表且经过认可的余额更新表。

对于 Jack 来说,和其他成员同步上是很容易的。他可以看到这些余额更新表上的确有至少 3 个签字,因此他会比较放心这些更新表的安全性。他还可以亲自基于这些更新表以及他手上的最新版的更新表(即第 2 天的更新表)进行计算。这可以让 Jack 毫无障碍地参与今天的转账,就像什么都没有错过一样。

该系统似乎运作顺利。这的确有点过于简单了,不过足以满足岛上居民的需求了。确实,我们没有白纸的话,是无法运作区块链的。大家一起坐了下来,通过发表白皮书来庆祝这一伟大的壮举。

为何能将其视作区块链呢?对于新手来说,每天发布的纸条代表一个区块。每个区块都有编号,并指向前一个区块——形成了一条区块链。为了验证余额的现有状态,任何人都必须从第一个区块(第 1 天——创世块)开始,并且按顺序一个接一个地验证所有区块。余额表是会逐渐累加的。

这是理想的区块链实施方案吗?不一定是。该区块链实施方案可以通过多种方式改进。例如,这个方案只供 4 位居民使用。如果又有一位幸存者坠落到岛上会怎么样呢?这份协议可以容纳所有人吗?这份协议目前是经过许可的,如何将它变成无需许可的呢?是否能将这份协议修改成 工作量证明 或 权益证明 模式呢?

我们将在后续的同系列帖文中探究这些想法。



原文链接

https://hackernoon.com/how-to-run-a-blockchain-on-a-deserted-island-with-pen-and-paper-899949ec555b 

作者: Tal Kol 

翻译&校对: 张凌 & 闵敏

本文由作者授权 EthFans 翻译及再出版。


你可能还会喜欢:

科普 | 用算盘了解闪电网络

干货 | 了解区块链基本原理的第二节:工作量证明和权益证明

科普 | 区块链是什么鬼?




今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/0rK5dgCdPa
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/22016
 
421 次点击