logo 返回列表
区块链难理解?200行代码教你写一个自己的区块链!
2018-03-20 1854

“区块链”三个字,无疑是近一年来最火的投资概念。随着比特币等区块链资产价格的大幅飙升,普通投资者对区块链,以及数字货币投资的兴趣越来越大,突然间,似乎全世界都在谈论区块链、比特币。

区块链就像一次对全人类经济层面的入侵,这种入侵,比互联网的入侵,可能还要彻底,人们开始转移的,并不是简单的信息以及消费习惯,而是对资产的重新认识和选择。

区块链难理解?这里有一篇初学者指南

我并不明白为什么人们会觉得要理解区块链会有点难,而我也想知道为什么自己并没有。

那是在 2013 年,我第一次听说有比特币这个东西(是的,知道的太晚啦)。我穷得连一个都买不起,看到这儿你也许已经对此文无爱了。

后来,我想要去了解一下它所依赖的底层技术,也就是区块链。 不过因为太忙了,所以迟迟没有开始(那就并不存在什么开始不开始了)。

“区块链”到底是什么?

区块链其实是两个东西:一个是区块,一个是链。说玄虚一点,就是一链子的区块。

因为它是存在于计算机中的东西,所以我们可以厘定它的一个物理形态是啥样子的,就是数字信息被分成一个一个区块然后把这些区块链接起来。

举个例子,下图中的方块,每一个都表示一个国家,而且每一个都包含了对应国家的城市名称。

等等,其实还有更多东西来着。这里的每一个方块都是一个叫做哈希的东西。一个哈希就是一串字符 (比如 “1hi515AHA5H” )。

哈希是根据方块里面所包含的信息来得到的。U.S.A 的方块拥有 New York, Los Angeles,还有 Chicago 这几个城市,所以它的哈希就是像 “NYLAC” 的东西了 (技术上其实远非如此,但你理会精要就行了)。

每一个接续的方块都会包含前一个方块的哈希,所以这个就是(强制性的)将它们绑到一起的纽带。

如果有人擅自篡改了第一个方块,加入了城市 Boston,那么新的哈希就会是 “NYLACB”。

然而后面接续的 India 这个方块已经存着的哈希还是 “NYLAC”,这种不匹配就会把链条打断。所以哈希的目的就是确保没有人可以篡改区块。

那如果有人修改了一个方块的内容,然后把后面的接续方块的哈希也一并更新会如何呢? 

这也是有可能的,不过有一件事情我还没有告诉你。区块链的数据并不只是存在于仅仅一台计算机里面。一台计算机里面的区块链数据并不能骗到人,因为它会被复制到网络中每一个用户的计算机里面去。

如果你加入了一个区块链网络,那么你的计算机就会去下载这些区块数据,如果有人篡改了他拥有的版本,整个网络也会考虑占多数的人的计算机上所拥有的版本才是正确的。

还有一件事,在一个区块链网络中,不仅是数据,就连整个系统的程序都被复制到了所有的电脑中。

大多数互联网应用都是集中化的,比如 Facebook,她的数据和程序都被放在了她的服务器上,你的计算机会从 Facebook 的服务器上获取到你一个人需要知道的信息。

但在区块链的世界理,就没有存在于中心的东西,它依赖的是用户的计算机来容纳自己的程序。这就意味着,如果整个区块链网络中的每一台电脑都关机了,那么这个区块链系统就死翘翘了。

公共区块链

这是不是就意味着区块链系统其实就是由一群心怀善意自愿让他们的计算机保持运行的人来组成的呢? 还有这些防篡改的区块是用来干嘛的呢?

区块链网络的功效不胜枚举。比特币是一种数据货币和一个支付系统。它所有的防篡改区块中所保存的就是全部交易的分类账。那些贡献了他们自己的计算机的人被称为矿工。系统会给他们提供比特币作为奖励。

Ethereum 有一项附加功能。它可以承载你的代码,从头开始发展出一个区块链系统。

而要构建一个属于你自己的系统也许会非常地困难(记住这得看有人为你牺牲他们的计算机运行能力才行哦)。Ethereum 就维护着这些耗损巨大的运算能力,而你则需要为这些计算消耗买单。

区块链应用并不非得是支付系统或者加密货币。它可以是任何东西,像是一个社交网络,一个像 LiveEdu 这样的学习平台,等等。

私有区块链

Bitcoin,Ethereum 等等这些都是公共区块链的例子,任何人都可以成为其中的一分子。

那如果我们想要有一个私有的区块链网络该如何呢?有些人想要一个私有的区块链是想干嘛呢?那就来瞧瞧下面的故事吧。

Mark 和 Sara

Mark 已经五个月没交房租了,当 Sara 找他要的时候,他就说晚点会给她。她付不起律师费,而法院强制执行诉讼就需要 8 个月甚至一年,所以唯一的选择就是去说服 Mark。

Joe 的生意

Joe 是一个商人,他经常要跟不同的公司做生意。几个月之前他和一家零售商签了一份合同,尽管合同条款都已经履约了,可零售商却拒绝付款。

这帮人利用法律制度中的漏洞来游说 Joe,想以此达到少付钱的目的。Joe 在这以前就是有这方面经验的,在某些情况下,他会找法院求助,但这样做所耗费的时间和金钱却要损失他自己的利润。

我们该如何帮助 Sara 和 Joe 呢?

我们是不是能在其他地方解决这个问题呢? 在 Sara 遇到的这种情况中,我们需要让 Mark  按月支付房租,这其实就是一个基于时间的触发机制。你的日历程序使用这样的触发器来给你提供预设事件的通知。

在 Joe 遇到的场景中,一旦合约中的条款都满足了,当事人就得付款,这其实就是一个基于条件的触发机制。你想想上次从 Amazon 买电子书的时候,是不是得先确认付款了,Amazon 才会把电子书发给你?

重点是,计算机程序会始终如一的执行诸如此类的指令。当你点击着这篇文章,向下滚动,诸如这类的操作,它也会照着执行不误。为了能帮助到 Sara ,我们需要将合同的条款转变成代码。

Sara 和 Mark 之间所订立的智能合同的伪代码

If today’s date is 30th and rent is not paid then

Transfer $500 from Mark’s account to Sara’s account

可是我们在哪儿部署这些代码呢? 它就应该被部署到所有参与者的计算机上。Sara 的还有 Mark 的银行都会是这一个私有区块链网络的一部分。

Joe 和 Sara 会签署一份编码的协议(也就是智能合同),然后这份协议会被分发到网络中去,Mark 的和 Sara 的银行都会有一份拷贝。

在每个月的 30 号,当时钟跳动到 12 点整,协议好的金额就会从 Mark 的账户转移到 Sara 的账户上去。Joe 也开始使用智能合同来强制让他的客户支付协议好的货款。

Sara 高兴了,因为她再也不用去烦心 Mark 会不会如约付房租了。Joe 也高兴,因为他也不用找法院要说法了,省下这些精力,他可以继续发展自己的生意了。

私有区块链只限于业务中涉及到的相关各方,因此 Joe 不会是 Sara 和 Mark 所属区块链网络的一部分。

前行之路

现在你对此是不是已经有点概念了?如果还是不理解,看看小编之前发布的文章技术人再不懂区块链,你就OUT了?不过下面这篇文章也能让你秒懂区块链。

区块链与裸照:一个去中心化的色情网站是什么样的?

“区块链”概念已火,虽然大部分人对“区块链”好奇,甚至眼馋,但不少还处于不求甚解的懵逼阶段.....正好最近我一直在研究区块链,同时也见了几个圈内人深聊了下,就想为大家写一个“入门级”的区块链介绍文章。

为了通俗易懂,我决定不惜自毁清誉,用充满荷尔蒙的比喻。因为技浪潮每次确实都性感得让人荷尔蒙爆炸啊,性(huang)感(bao)内容开始。

以前,大家想看陈老师的裸照,都要去一个叫 1025 的网站,这就是中心化。

后来,1025 网站被和谐掉了,大部分猥琐男们傻逼了没有网站看片了,因为他们太相信中心化组织了,还天天被 1025 弹窗“皇家澳门赌场”的小广告真是活该啊。

不过没关系,陈老师的 2100 张裸照,幸存在 100 万个猥琐男的电脑里,除非地球毁灭,不然陈老师的裸照不可能绝迹。这就是去中心化,数据分布式存储。

后来,有个叫“中本粗”的超级猥琐男,是陈老师 2100 张裸照的超级发骚友。为了 2100 张照片永远不消失,为世人所享用,他做了一个互联网共享文件夹“陈老师plus”。

如果猥琐男们想获取“陈老师plus”2100 张的观看权,就必须加入一个电子协议中:不得复制、修改、P 任何“陈老师plus”中的照片,用户在“陈老师plus”发生的任何行为,都会按时间戳记录!

例如,“小张在 2018 年 1 月 9 日中午 12:00,查看了编号为 103 的照片,并在 13:00 删除了编号 1-100 的 100 张照片.....”

小张的行为被记录并广播给其他 100 万个猥琐男,“陈老师plus”的 2100 张照片会得到保护,小张电脑中“陈老师plus”会按时间戳中最新记录,同步其他 100 万个猥琐男的电脑里的数据,复原小张电脑中的数据...

小张永远别想对“陈老师plus”搞修改破坏,且所有行为都同步记录在其他猥琐男的电脑里。

这就是区块链,数据分散存储,去中心化,按时间戳广播记录所有行为,无法修改、破坏数据源或造假,除非同一时刻炸掉 100 万个猥琐男的电脑,或互联网消失,或世界毁灭.....

当然,也有唯一一种特殊情况,可以增加“陈老师plus”文件夹中的照片,这种情况叫做“区块链共识层”,顾名思义,这是 100 万猥琐男达成的增加照片共识,你不能瞎增加的。

中本粗最初设定协议时,把“猥琐男们可以用 X 相机,在每年 XX 时间,拍陈老师的裸照,前 100 张可以添加进入‘陈老师plus’中增加作为文件夹照片”,那么,“陈老师plus”每年就可以增长 100 张照片了。

当然,你还可以给照片估价嘛,发行“陈老师plus”币。因为,“陈老师plus”中每张照片都是不可造假破坏的,所以具有唯一性,还有单独编号,我们就给每一张照片估价,它不就值钱了吗?就像现实世界中无法复制的名画一样啊!

怎么估值?就进行所谓的 ICO(Initial Coin Offering)啊,就是我和李哭来老师成立一个基金,举行一张发布会,就说我们给这 2100 张照片估值个 1.05 亿!每张照片 5 万!

我们先丢 5050 万进去认购前 1100 张,其他猥琐男可以众筹 5000 万买剩下的 1000 张照片,不想要了?卖给我和李哭来基金就行,我们认它值钱啊,我们这么牛逼不会骗你的。

自从有了区块链——我们再也不怕 1025 们作恶,给我们弹窗小广告,给我们下病毒了;再也不怕陈老师的照片丢失被破坏了,1984 老大哥复活都做不到.....

当然,也有烦恼,就是有炒名画的现在来炒“陈老师plus”照片了,把价格搞得很高。

还有的更猥琐,为了赚钱,自己拍了一堆裸照按照这个模式弄了个“某某老师plus”东施效颦收割韭菜,这就叫山寨币,现在大概快一百种了吧。

看到这里,你肯定能明白区块链了......

最后,教大家怎么用 200 行 Go 代码写一个自己的区块链!

只用 200 行 Go 代码写一个自己的区块链

这篇文章就是帮助你使用 Go 语言来实现一个简单的区块链,用不到 200 行代码来揭示区块链的原理!

“用不到 200 行 Go 代码就能实现一个自己的区块链!” 听起来有意思吗?有什么能比开发一个自己的区块链更好的学习实践方法呢?那我们就一起来实践下!

因为我们是一家从事医疗健康领域的科技公司,所以我们采用人类平静时的心跳数据(BPM 心率)作为这篇文章中的示例数据。

让我们先来统计一下你一分钟内的心跳数,然后记下来,这个数字可能会在接下来的内容中用到。

通过本文,你将可以做到:

  • 创建自己的区块链

  • 理解 hash 函数是如何保持区块链的完整性

  • 如何创造并添加新的块

  • 多个节点如何竞争生成块

  • 通过浏览器来查看整个链

  • 所有其他关于区块链的基础知识

但是,对于比如工作量证明算法(PoW)以及权益证明算法(PoS)这类的共识算法文章中将不会涉及。

同时为了让你更清楚得查看区块链以及块的添加,我们将网络交互的过程简化了,关于 P2P 网络比如“全网广播”这个过程等内容将在下一篇文章中补上。让我们开始吧!

设置

我们假设你已经具备一点 Go 语言的开发经验。在安装和配置 Go 开发环境后之后,我们还要获取以下一些依赖:

go get github.com/davecgh/go-spew/spew

spew 可以帮助我们在 console 中直接查看 struct 和 slice 这两种数据结构。

go get github.com/gorilla/mux

Gorilla 的 mux 包非常流行, 我们用它来写 Web handler。

go get github.com/joho/godotenv

godotenv 可以帮助我们读取项目根目录中的 .env 配置文件,这样我们就不用将 http port 之类的配置硬编码进代码中了。比如像这样:

ADDR=8080

接下来,我们创建一个 main.go 文件。之后我们的大部分工作都围绕这个文件,让我开始编码吧!

导入依赖

我们将所有的依赖包以声明的方式导入进去:

相关推荐
微信扫一扫
微信扫一扫
关注公众号,了解更多资讯
联系客服

微信扫码联系客服