查看原文
其他

荒岛区块链——只用纸和笔就能构建一个区块链系统

Tal Kol 集智学园 2019-04-12


本文由集智翻译组编译自https://hackernoon.com


如果你被困在一个荒岛上,并且知道如何利用共识去中心化。换句话说就是你知道如何手动操作一个区块链。那么运行一个区块链系统只需要一些幸存者,一支笔,几张纸和这个帖子就可以了。

绝地求生?


假设飞机在某个无人荒岛上坠毁了,幸存者有小雨,小叶,小凯,小杰


幸存者们打算创造一种革命性的新货币——岛币,来替代效率低下的以物换物经济。为了公平起见,大家同意开始开始时每人持有100岛币。因为没有金属来铸造硬币,我们只能利用纸运作这个系统。


对于这种情况我们先从最简单的区块链应用开始,在之后的文章中会讲到其他的应用案例:比如工作量证明 ( proof of work ) 和权益证明 ( proof of stake ) 。这有助于我们看到它们的优缺点,但现在先从最简单的开始说起。

第一天:达成共识


我们的目的是什么呢?其实非常简单,就是在纸上维护一张简单的结余表。这个表上显示了我们每个人各自持有多少岛币。那么重点来了,我们不能只有一张纸来记录岛币,为了公平起见,我们每个人都要有一张纸,来记录并且维护一个自己版本的结余表。这个就是去中心化。当然我们也希望所有人的纸上最终呈现的内容都是一样的,这个称之为共识


这张纸长什么样呢?







这张纸是所有人第一次达成一致,所以把这一天称为岛币的第一天。这个结余表来自于我们之前已经达成的共识。为了公平起见,我们约定每个人开始时持有100岛币。我们还需要一个人来在纸上进行记录,谁来记录并不重要,所以先假定是小雨来记录。他将发布记录的结余表,同时复制多份并保证发给每一个人。(有一点忘记提了,岛上有一台复印机。)


岛币的结余情况肯定是会发生变化的,所以我们在每天的结束的时候用一张新纸来记录结余表。我们想要尽可能保持公平。因此不一定每次都是小雨来发布。


还有很重要的一点。由于大家之间缺乏相互信任,所以要让每个人独立地来确认岛币的变化。那么简单的实现的方式就是:当岛币的归属发生变化的时候,每个人都要在所有拷贝上签名,当然前提是要同意上面写的内容。


于是问题又来了,一张纸上要有多少人的签名才能算是这张纸是被承认的呢?我们需要达成共识,也就是大多数人承认即可。因为我们有四个人,那么大多数就是三个人及以上就行了。上面那份文件有四个人签名。所以我们认为这张纸是被承认的。但为什么我们不要求所有的人都要签名呢?因为这会让一个人的缺席危及整个共识过程。比如小叶要是去钓了几天鱼,那么直到他回来,其他人就不能对结余进行更新。如果我们要求所有人都签名的话,这反过来会给予了一个人太大的权利。那么我们为什么又需要多数?为什么有一半的人签名还不够呢?因为如果有两个人,比如小雨和小叶签署了一个版本的结余表,而小凯和小杰签署了另一个版本与之不匹配的结余表,这是我们不希望看到的情况。我们不能有两个相互矛盾且都被承认的版本。

第二天:转账


第二天早上,小凯想买一个西红柿。小雨的西红柿卖两块钱一个。小凯想把两岛币转给小雨来买一个西红柿。于是小凯拿起一张新的纸,在纸上写了如下转账内容:






那么第二天即将结束的时候,大家想要更新结余。第一天的结余是小雨发布的,那么第二天就应该是小叶。因为大家同意这样的轮班会更公平一点。小叶发布的纸反应了小凯的转账。






小叶的纸并没有最终写完,因为上面只有小叶的签名。他需要让更多的人签名,于是他找到每个人,要求他们核实并签字。这张纸很容易核实,首先核实者先找到前一天结余情况的纸。接下来,核实者检查新的转账列表。在这种情况下,只有小凯转账了。那么这个转账就很好核实,我们先确定它是小凯签名的,再确定小凯的确有足够的余额转账给小雨。


一旦所有人都核实并签署了这张纸。小叶就有了第二天最终结余表了。然后他复制发给每个人,大家都高兴地睡着了。






第三天:多数人的共识就是集体共识


第三天到了,这个系统运行的很好,大家都兴奋地花着自己的岛币。小雨想到小叶那里花十个岛币买一些木柴。小叶想去小杰那里花二十五个岛币买一些药。小杰想要花两个硬币买小雨的一个西红柿。他们各自拿出了一张新纸来记录他们的转账。


















到了晚上,今天发布结余的人是小凯。为了保证小凯把这些转账都写到纸上,每个人都要给小凯一份转账申请的复印件。给每个人一份复印件并不是没有道理的。因为想要转账的不必记得轮到谁发布今天的更新了。


但当小杰把转账申请的复印件给小凯的时候,小凯已经把结余情况写好了:







小杰有点郁闷,因为这个结余情况并没有包含自己的转账。也就是小雨收不到小杰买西红柿的钱,那么小杰吃不到西红柿晚餐了。小杰很可能是要饿着肚子睡觉。于是小杰就冲出去找吃的了,并且他没有签署今天的余额更新。但幸运的是,小凯能从其他人那里得到足够多的签名。








小凯在纸上获得了三个签名。每个签名都与昨天的转账余额符合。因为大多数人达成了共识。所以这张纸显示的余额表是有效的。

第四天:失踪


来到了第四天,没人知道小杰去哪了。他昨天晚上去钓鱼,遇到了暴风雨并没有回营地。这就出现了点问题,因为今天是小杰发布结余更新。


小凯要做一些转账,她把转账记录在一张纸上,并给每个人一份复印件。







到了晚上,小杰还是没有回来。但是大家之前已经定好了,今天由他来更新结余。因为他不在,所以今天的结余更新就被跳过了。

第五天:造假


到了第五天。今天的结余发布者是小雨。已经下了好几天雨,小雨想要一个暖和的地方睡觉。小雨想让小叶帮他建一个小木屋。小叶出价200岛币,而小雨只有98个岛币。于是小雨就想,既然今天是他发布结余表。那为什么不可以创建一个假的转账给小叶呢。







到了今天晚上的时候,并没有产生其他的转账。不过小雨有昨天小凯转来的钱,小杰昨天的转账并没有被记录。加上小雨虚构的转账,把这些加在一起就有了:







尽管小雨的转账是虚构的,但小雨先在这份结余更新上签名了。为了使这份结余更新被承认,他还需要得到至少两个人的签名。当小雨找到小叶和小凯的时候,小叶和小凯注意到前一天的结余表上(即第三天)小雨只有92个岛币,那小雨怎么能转200个岛币给小叶呢?随后小叶和小凯就拒绝在这份结余表上签名,除非小雨把这个错误的转账修改了。


小雨也没办法,他非常不情愿地发布了一份正确的结余表。小叶和小凯最终也同意在这份正确的结余表上签名:







这份结余表是被承认的,因为上面有三个签名。

第六天:岛币白皮书


来到了第六天的早上,小杰终于回到了营地。他在暴风雨中度过了一段艰难的日子。他没能参与过去两天的讨论,也没收到任何新的转账和结余更新的通知。他现在有点搞不清楚自己还剩多少岛币了。于是他找到了见到的第一个同伴,并询问他最近的结余情况。他就得到了第五天的结余更新,并把自己的结余表从第三天更新到了第五天。


对于小杰来说,他很容易就把结余表和其他人同步了。他可以看到这些结余更新确实是至少有三个签名的,所以这些结余更新是相对安全的。他也可以自己从第二天的结余表开始,计算并核实一下。然后他就可以假装没错过任何事,参与今天的交易。

这个系统目前运行良好。的确,这有点过于简化了,但这也够满足岛上居民的需求了。没有白皮书怎么能算一个正常运作的区块链呢。大家都一起坐了下来,通过出版白皮书来庆祝这一伟大的成就。

岛币白皮书 

作者:小雨,小叶,小凯,小杰


1-动机


区块链通过一个公平且去中心化的方式,进行价值的再分配,并改变我们周围的世界。岛上的以物换物经济系统开了历史的倒车。我们要引入一种全新的加密货币,称为岛币,来对易物经济系统进行革新。


2-共识


岛币的共识算法基于我们岛上的四个成员,即小雨,小叶,小凯,小杰。这个算法允许网络中最多三分之一的节点发生拜占庭表现[1]。而且要至少半数以上的节点投票通过才能承认一个块。所有节点投票权重相等。


3-交易与块规范 


交易格式:

[发送者地址, 随机数, 接受者地址, 数量, 签名]

块格式:

[块编号, 交易列表, 用户余额, 用户签名]

创世块:

[1, [], [100,100,100,100], [雨,叶,凯,杰]]


4-参考


[1] L. Lamport, R. E. Shostak, and M. C. Pease. The byzantinegenerals problem. ACM, 4(3):382–401, 1982.

第七天:区块链 get √


为什么这就被认为是区块链了呢?首先每天发布的那张纸就代表了一个区块。每个区块都有一个编号,并且指向了前一个区块。这样就形成了一连串的区块。我们可以通过从链的开头(创世块),一个一个地验证每一个块,来确定当前的余额状态是正确的。也就是说,其实余额是逐步计算出来的


那么这是一个理想的区块链实现吗?答案可能是否定的。因为这个系统还可以在很多方面进行改善。例如,它只支持四个居民。如果突然又因为飞机坠毁多了一个幸存者,该怎么办?这个协议能容得下这个新的居民吗?当前的协议其实是允许的,但我们如何(修改协议/白皮书)不允许这个新人的加入呢?如果我们想要修改目前的这个协议来实现工作量证明或者是权益证明呢?


我们将在下一篇文章中探讨这些想法。



翻译:NeverMose

审校:彩云小译7号

编辑:Queen

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



关注集智AI学园公众号

获取更多更有趣的AI教程吧!

搜索微信公众号:swarmAI

集智AI学园QQ群:426390994

学园网站:campus.swarma.org

 商务合作|zhangqian@swarma.org     

投稿转载|wangjiannan@swarma.org

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存