Py学习  »  区块链

落难荒岛,光靠纸笔也能跑条区块链!

优达学城Udacity • 5 年前 • 433 次点击  

落难荒岛,光靠纸笔也能跑条区块链!

文/ Tal Kol

译/ 欧剃

来源/ freecodecamp


万一你和一群陌生人不幸漂流到一座荒无人烟的小岛上,什么技能是你最好要会的?


你心中可能会有无数种答案,但今天优达菌要告诉你,会生火捉鱼摘水果什么的,只能蔽的了一时饥寒,如果生还者不想活在茹毛饮血以物易物的原始社会的话,建立一个稳定、公平、高效而且去中心化的共识体系,可是非常有必要的。换句话说,发点区块链货币,一步到位进入现代社会,了解一下?


啥,电脑?谁说发币就非得要电脑啦?你只需要一群生还的小伙伴,一些纸笔或者差不多能写字的东西,以及本文。准备好了我们就出发!


故事开端



让我们回到故事开始的地方。四位勇敢无畏的…倒霉蛋:张三、李四、阿梅和小王,不幸漂流到了南太平洋某处的一座无人荒岛。


↑四个倒霉蛋儿


简单地说,在经历了以物易物的原始生活,以及用贝壳做货币的疯狂通胀之后,(他们还没疯到用石头做货币)他们决定发行一种全新的货币——岛屿币(IslandCoin)——来挽救本地濒临崩溃的经济体系。



为了公平起见,所有人一开始都将有100枚岛屿币。既然目前造币厂的建设计划还遥遥无期,大家都决定通过纸笔来记录所有权情况。然而,在全岛货币被“银行家”阿梅垄断了一年以后,谁都无法相信别人不会在记录上做手脚,所以不能让某一个人获得垄断资金记录的权力。最终,他们决定采用区块链的方式,由所有人共同维护每个人的资金记录。


目前,这大约是本岛上最简单的区块链应用实例。在未来,他们也许会加入“工作量证明”或“权益证明”之类的概念——当然这些各有利弊——但现在,就从最简单的情况开始吧。



我们的四位主人公想要的是什么呢?其实很简单,不过就是一张纸,上面画着一个表格,表格里是每个人的资金情况,仅此而已。问题是,可不能真的只有一张纸,记录唯一的结果。因此,在做记录这件事上必须人人平等,每个成员手上都有一份——这就是所谓的“去中心化”;同时,每个成员手上的版本最好都是一致的——这就是所谓的“共识”。


那么,这张纸长什么样呢?




荒岛求生之Day1



这张纸就是所有人都同意的第一笔记录——这也是为啥它被标成第一天。正如之前说的,大家都同意,一开始每个人都有100个币。同时,还需要有一个人来把这个记录写下来,发布给每个成员,确保每人都有一份。就让张三来做这事吧。


货币就是用来交易的,所以持有的数量肯定是不断变动着的。因此,每一天结束前都需要发布一个当天的更新。为了保证公平,不能总是让张三来记录和发布金额。


鉴于不能无止境的信任记录者,在发布记录之后,还有一件很重要的事要做。那就是每个成员都分别对这次记录的更新情况进行确认,如果同意这次的金额变更,就签上自己的名字。很简单对不对?



那么,需要多少人签字,当天的记录变更情况才能最终确定,并得到通过?为了达成共识,我们需要大多数人同意。既然目前总共是4人,“多数同意”意味着最少要拿到3个签名。上面这张纸4个人都签名了,那么事情就这么定了。


为啥不需要4个人一致通过呢?因为这样将会出现一个成员干扰整个进程的可能。假如李四离开营地好几天去远处捕鱼,那其他人就无法更新当前的余额,直到他回来——这将过多的权力赋予了单个成员。


为什么我们需要大多数,4个人有两个签名不行吗?如果只需要两个,那可能会出现两个人(比如张三和李四)支持一种结果,另外两个人(阿梅和小王)支持另外一种不同结果的情况。这样将无法达成一致,因为两个不同版本的结果不能同时都为真。


于是,大家愉快地定下了规矩,区块链经济的第一天就这样过去了。




荒岛求生之Day2



第二天早上,阿梅打算买个番茄吃吃。她花了2个币向张三购买。于是她把这笔交易写在一张纸上:



这是阿梅的第一笔交易,所以交易号是#1。此外,她还得在纸上签名,以确保不是别人盗用她的名义进行支付。


到第二天晚上,又该更新并公布大家的余额了。第一天是张三来写,并征求大家的签名。之后只要大家轮流这样做,看起来就很合理对不对?


于是大家达成一致,按照张三->李四->阿梅->小王->张三->李四.... 类似这样的循环,轮流执掌。这就表示第二天应该由李四来发布当天的资金余额更新情况。因此,他将阿梅的交易信息计入当天的更新中:



李四写的这张纸还不是最终结果,因为只有一个人,也就是李四自己签了名。他还需要请其他成员确认更新内容,并签名。


当然,这事儿要确认起来很简单。


首先,确认者可以拿出自己手头保管的记录数据,查看上面最后一条的最终记录数据(当前就一条,也就是第一天的数据)。


接下来,确认者检查当天新增的交易列表。当天只有一条来自阿梅的交易信息。这个信息也很容易确认,只要确认这个条子确实是经阿梅签名的,并且从上一天的记录来看,阿梅的余额里也有足够多的币可以给张三,以完成交易。


一旦每个岛民都完成了各自的验证程序,并在纸上签了字,那么李四就得到了第二天余额变动情况的最终版本,他将这个版本发布给每个人,每个人都确保自己手头有一份一样的副本,于是大家都可以愉悦而满足地休息啦。


这就是第二天的最终结果:




荒岛求生之Day3



第三天到了,这个系统看起来很棒,大家都很有交易的热情。张三打算花10个币从李四那边买一些柴禾,李四打算花25个币向小王买些药片,而小王要向张三买2个币的番茄充饥。他们都分别写下了交易信息:



当黑夜降临,今天负责公布账目的是阿梅。为了保证阿梅将自己的交易信息纳入,大家都得给阿梅一份交易信息的纸条。当然,一般来说,交易信息需要广播给所有人,因为你交易的时候不一定就会记得今天负责公布更新数据的到底是哪个人。


然而,小王在这事上实在太拖拉了。等他把交易信息拿给阿梅的时候,人家早就已经把当天的交易信息写好了,还签了名:



小王这下可是傻眼了,他的交易信息没被列入进去。这意味着张三当天并没有收到小王的转账,所以也不会把预定的番茄给小王。于是不幸的小王这天晚上就只能饿肚子了。


饥肠辘辘的小王拒绝在纸上签字,还愤愤地跑出了营地,嘴里嘟囔着要自己觅食什么的话。好在阿梅已经从其他成员那里拿到了足够的签名:



阿梅总共拿到了三个签名,每个人都确认过记录的余额和交易信息准确无误,也和前一天的记录吻合。按照多数原则,今天的数据就算定下来了。



荒岛求生之Day4



第四天,一切正常——除了没人知道小王到底去了哪里。前一天晚上他跑出去捕鱼,结果起了风暴,他一晚上没回营地。这倒是有点麻烦,毕竟第四天应该是小王负责统计并发布当天的资金变动情况。


阿梅想要做几个交易,于是她写下了交易信息,并传给了大家:



到了晚上,小王还是没出现。按之前定好的顺序,今天应该是小王来统计,然而大家始终找不到他。于是当天只好轮空,一切暂停不动。



荒岛求生之Day5



第五天到了,又轮到张三坐庄啦。因为前两天的气候一直不太好,到处湿嗒嗒的,张三希望能换个干爽暖和一点的地方睡觉。他希望李四能帮他搭个木头小棚子,李四开价200个币。问题在于,张三只有92个币,怎么办呢?张三突然有了一个大胆的想法。



张三觉得,反正今天是他自己负责统计交易余额信息,何不直接搏一把大的,单车变摩托,啊不,空手套棚屋。于是他直接写了200个币给李四:



此外,这一天没有其他的交易了。不过因为昨天轮空,阿梅的两笔交易,以及前天没来得及计入的小王的交易,都归到今天来记。所以,张三就把自己的记录混在中间,希图蒙混过关:



管它平不平,张三反正壮着胆子就签了名。但这事他一个人说了还不算,他还需要另外两个人的签名。当李四和阿梅看到这个单子的时候,他们很快就发现余额不符的问题:在第三天的余额里,张三只有92个币,怎么可能发给人家200个呢?

他们都拒绝签字,要求张三把记录改正。张三只好满不情愿地把那条记录删掉了,重新计算了大家的余额:



这下阿梅和李四才最后签上了名字。


因为有3个签名,第五天的交易记录就这么定下了。



荒岛求生之Day6



第六天的早上,小王拖着蹒跚的脚步回到了营地。这几天他在暴风雨中挣扎求生,简直糟的不能再糟了。错过了这两天的资金变动情况,他甚至已经不太确定自己还有多少币了。不过他一回来就找了个人问问,并很容易就拿到了第三天和第五天发布的交易情况。


对小王来说,很容易确认最近的交易内容,以及自己的余额没有被篡改。因为这些纸上都有至少3个签名,基于上面记载的交易记录,他可以利用自己保存的第二天的数据进行一下简单的计算,就能确定第五天时,所有的余额是正确无误的。


于是,小王的营地生活又回到了正轨。



荒岛求生版的区块链故事



总体来说,这个系统工作的很令人满意。没错,它确实有点简陋,但对于不得不生活在这里的四位岛民来说,这已经完全够用了。不过,要用区块链发币,怎么能没有白皮书呢,于是大家全体起草并正式发布了这么一份棒极了的白皮书:



也许有些读者要问,说了这么多,这跟区块链到底什么关系?让我解释一下:

  • 每天发布的一张当天的余额表,就是一个区块

  • 每一个区块都有编号,并指向上一个区块——也就是前一天的余额表——并就此形成了一条链条

  • 要验证任意一个区块的数据是否正确,只需要从链条的开头(第一天的数据,也就是创世区块)开始,根据每个区块内的数据按顺序进行计算。所有的余额都是逐日增减的。


所以这就是理想的区块链实现吗?大概不是,因为可以优化的地方还很多。比如,先这可能只支持4个用户,如果又有新的人来可怎么办呢?要如何调整容纳他们?同时,这个区块链现在是需要许可的,能不能转换成非许可链呢?还有,如果希望引入工作量证明,或者权益证明的机制,该怎么修改呢?


嗯,这也许值得我们之后另文讨论,今天,就让我们这四位勇士好好休息吧。





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