落难荒岛,光靠纸笔也能搭建一个区块链系统!

2023-11-22 10:50

本文主要是介绍落难荒岛,光靠纸笔也能搭建一个区块链系统!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

四个人流落到一座荒芜人烟的小岛上,他们采用区块链的方式,来维持日常生活的正常运转。通过这个小故事,作者对区块链的解释,通俗易懂。


如果你对区块链还不是很了解,这个故事能够很好的帮助你了解「什么是区块链」。


640?wx_fmt=png

作者 | Tal Kol

译者 | 欧剃


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


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


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

640?wx_fmt=png


故事开端



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


640?wx_fmt=png

↑四个倒霉蛋儿


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


640?wx_fmt=png


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


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


640?wx_fmt=png


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


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


640?wx_fmt=png



荒岛求生之Day1



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


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


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


640?wx_fmt=png


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


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


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


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


640?wx_fmt=png



荒岛求生之Day2



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


640?wx_fmt=png


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


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


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


640?wx_fmt=png


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


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


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


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


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


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


640?wx_fmt=png



荒岛求生之Day3



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


640?wx_fmt=png


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


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


640?wx_fmt=png


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


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


640?wx_fmt=png


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



荒岛求生之Day4



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


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


640?wx_fmt=png


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



荒岛求生之Day5



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


640?wx_fmt=png


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


640?wx_fmt=png

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


640?wx_fmt=png


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

640?wx_fmt=png

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


640?wx_fmt=png


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


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



荒岛求生之Day6



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


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

640?wx_fmt=png


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



荒岛求生版的区块链故事



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


640?wx_fmt=png


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

640?wx_fmt=png

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

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

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


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


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


640?wx_fmt=jpeg


— 完 —



本文转载自优达学城Udacity(ID:youdaxue)

原文链接:

https://mp.weixin.qq.com/s/IQSwNZ-Zsf4KSVl9cADToQ




最新热文:

  • 世界杯开赛在即,告诉你5个用区块链玩转球赛的秘密 | 内附独家资源

  • 暴跌至6500美金的比特币,要不要买入迎牛市?这篇好文或许能启发你

  • 那些被一行代码蒸发1个亿的智能合约,形式化验证了解一下? | 人物志



640?wx_fmt=png

扫码加入区块链大本营读者群,群满加微信 qk15732632926 入群



640?wx_fmt=gif



了解更多区块链技术及应用内容

敬请关注:

640?wx_fmt=gif

这篇关于落难荒岛,光靠纸笔也能搭建一个区块链系统!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/409627

相关文章

Gradle下如何搭建SpringCloud分布式环境

《Gradle下如何搭建SpringCloud分布式环境》:本文主要介绍Gradle下如何搭建SpringCloud分布式环境问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Gradle下搭建SpringCloud分布式环境1.idea配置好gradle2.创建一个空的gr

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境

Windows系统宽带限制如何解除?

《Windows系统宽带限制如何解除?》有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文就跟大家一起来看看Windows系统解除网络限制的操作方法吧... 有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1