首页

科技

国家支持区块链发展,如何搞定区块链技术实践|万字干货指南

作者:郑建勋

前航海集团区块链架构师/51CTO区块链金牌讲师/2018年Hackathon大赛全球第二名

——文章摘自联想超级课

今天我跟大家讲的课是区块链技术的最佳实践。

关于区块链,我主要讲三个部分

✔ 区块链的价值、应用场景

✔ 区块链的历史、基本原理、技术流派

✔ 区块链平台的架构设计

一、区块链的价值

为什么说区块链是一个颠覆时代的技术?

我们可以看到在招聘网站上,区块链能够带来百万以上的年薪。我们什么时候看到过一个风口能够给技术人员带来百万以上年薪的回报吗?这个薪酬的体现正是他的价值。

首先我想问大家一个话题:你最后一次购买一个品牌商品是在什么时候?

你可能购买一件耐克的球鞋,你也有可能购买一袋奶粉,有可能打了一支疫苗,但你怎么能够保证你购买这些商品它是真实的?不是伪造的?毕竟连疫苗都有可能是假的,还有什么东西不可能是假的呢?在社会的价值交换当中,我们迫切需要一种真实的可靠的信息来源。

所以首先要说的区块链价值的第一点就是:它能带来永久的、安全的、不可篡改的记录。

它能解决价值交换中的信任问题。以前我们可能需要第三方组织,也可能需要政府担保,但也很难避免有走后门的,有随意篡改数据的后台的人员。但区块链能解决信任,能降低社会的交易费用,而且需要要注意,其实社会上任何一次能够带来降低交易费用的尝试,都会带来这场社会一个非常深刻的变革。

这也是我们说的区块链价值的第二点:他不仅能降低交易费用带来信任,更重要的是它可以产生价值,带来社会变革。

现在互联网会面临这样一种困境,可能很多同学知道,当我们把自己的信息发布到网上以后,好像这个信息就变得非常的廉价了,比如说,我把我的视频放上去,把我的文档放上去,又比如我想听一首歌,看一场电影,好像很容易就能够搜索到这种资源,而不用为版权付费。但是如果有了区块链技术,我能够追踪到在某一个时点上,到底是谁拥有这个价值,谁拥有这个东西,这个时候如果说你想要转移它或者使用它就需要为我的资产和版权付费。

这是我们跟大家分享的区块链价值的第三点:它可以颠覆现在的互联网信息价值。

区块链的可靠性,是基于一个分布式的网络单个节点,如果一个节点崩溃或者说少数节点崩溃,也不会带来整个系统的崩溃。

大家可能会听说过有些程序员删库就跑路了,在区块链的网络中这是不可能存在的。它非常稳定,其它任何服务器或者平台都做不到这一点。

借助于区块链的去中心化,它的安全性以及可追溯性,就能够带来商业应用场景的一种巨大的改变。所以说下面小节我将给大家介绍的是区块链的应用场景。

二、区块链的应用场景

借助区块链的安全性、去中心化以及可追溯性,亚马逊公司推出了区块链的解决方案,在17年初左右就开始上线运行了,又比如法大大和阿里邮箱合作,在16年的时候就打造一种邮箱存证的服务。也就是说,你的邮箱数据可以把它作为打官司的一种凭证,这其实是非常好的商业场景。

法大大又在18年7月获得6000万的融资,打造区块链+法律的应用场景。大家都很熟悉的马云阿里巴巴支付宝在几个月前就在香港推出来跨境电商和跨境支付的服务。它把传统的依靠银行支付方式需要几天时间,变成依靠区块链技术缩短到几十秒钟几分钟的时间,这是一场非常巨大应用尝试和变革。

又比如说京东推出的企业级智臻链,中国农业银行(其实四大银行都在布局区块链,不止是中国农业银行)前段时间在遵义推出来区块链的借贷项目正式上线,百度推出来的度链,腾讯在8月与国家税务局推出的电子发票等等。

以前要报销电子发票的时候,我们需要先把发票下载下来,然后打印、贴发票,甚至这个发票有可能还是假的,或你发票贴得不太好,折皱了,然后提交给财务,再交给税务,这是非常浪费时间的。现在腾讯推出的区块链电子发票上线以后,就可以把几天的时间缩短到几分钟,并且可以追溯到发票的来龙去脉,也就是能够避免假发票的诞生。

所以大家要注意,如果国家最重要的税收都信任了区块链平台,还有什么理由能够怀疑这门技术对于时代或者说对于社会的颠覆性呢?

这就是区块链借助于它的特性,再加上行业特点,能够给这些商业带来的颠覆。

三、区块链的历史

明白了区块链的应用场景后,我们进入下一节话题:为什么会产生区块链?区块链到底是怎么回事?它是怎么诞生的呢?

首先我们讲一下在最原始的交易当中是怎么做的。

比如说Alice要跟Bob买一头牛,她给了Bob一百块钱,在最原始的交易中,不管是Alice还是Bob都能够明确到交易的人,他们是真实存在的,因为是面对面交易,也能够保证我给你的一百块钱是真实的。

陶渊明的桃花源记,在良田美池桑竹之属这样的地方,每一个人都可以安居乐业,怡然自得,其实从现代的博弈论角度来讲,这种社会是可能存在的,因为在一个封闭的信任社会当中,如果Alice想欺骗的代价非常之高,高到无法承受,因为任何一次欺骗都可能会带来在封闭社会当中生存下去的可能性,所以说原始交易模式是可行的。

但现在社会交易是跨全球、跨地域、跨空间,甚至是跨时间的,这种情况下的资源交换和配置,首先,现在跟我交易的另外一个人可能远在世界的另外一端,这个时候怎么能够保证跟我交易的这个人不是一个骗子?第二,怎么保证跟我交易的这笔钱是真实存在的?

这种问题怎样解决呢?非常简单。

我们是借助于银行、中央银行、支付宝、微信等第三方平台,在国外可能有visa、paypal、信用卡组织,但信任的代价也是非常昂贵的,比如第三方组织或者银行,他们需要有律师,有场地,还需要有管理人员,还可能乱发钞票带来通货膨胀,还可能随意去借贷,给社会带来危机,比如08年产生的美国次贷危机带来全球的金融风暴。

其实很多人在思考,既然现在的金融秩序有问题,那怎样解决这个问题?这就是我们介绍的区块链或比特币网络为什么会诞生的原因。

有些人,像中本聪这种人对金融秩序的思考,他们想打造一个不需要借助于第三方组织的系统,比如你把地址给我,我就可以给你打一笔钱,给你打一笔钱,就可以明确到你的地址对应的你本人确保是真实的。然后我能够保证你这笔钱也是真实的,因为当我把这笔钱打给你之后,这个系统就能够保证你的这笔钱没有被支付多次。

这就是我们为什么说系统非常好,因为它能减少交易费用,而且带来稳定性。

但是这样一个思考,几十年来社会都没有能够打造出这个系统,因为在系统中不需要消耗不需要第三方组织或权威中心的组织,任何人都可以参与到其中,即便是骗子也能保证系统的安全性,这得是多么难得的一件事情。

归根到底,从一种更高的高度来看区块链的话,能够解决在无信的社会中创造出一种共识,即便是个骗子加入网络当中,也能保证系统的安全性,能够达成一种共识,其实大自然也给我们展现出来了非常美丽的一面,我们能够看到在这张图片的大自然当中,切片蚁在蚁群中没有中央集权或是领导人,它们通过叶子制造真菌来产生能源,他们实际上是在耕种,仍然能够维持井然有序的秩序,这是就是大自然给我们展现的去中心化的一种美妙的境地。

时代在不断发展,08年8月,中本聪在金融危机的这一年,注册了bitcoin.org的网站,这就是区块链比特币的官网,9月份的时候,他写了一篇论文叫做:比特币,一种点对点的电子现金系统.( Bitcoin: A Peer-to-Peer Electronic Cash System)

现在可以一睹比特币白皮书的风采,一种点对点的电子交易系统,在论文当中,中本聪详细展示了他想构建一种去中心化的,不需要第三方信任组织机制的系统,这个系统首先讲了应该怎样构建交易,应该怎样构建出时间戳的服务器,也就是我们所说的区块链,区块链本质上是要解决时间的难题。

然后怎样通过POW共识算法解决挖矿,怎样将一个区块与区块之间连接在一起,中本聪告诉我们怎样使用P2P的网络,发现节点,怎样销毁错误的节点,节点与节点之间网络如何进行连接?

接下来告诉我们如何激励矿工,就是说挖取到一个区块以后,可以得到什么奖励那,告诉我们怎样节约内存,怎样做SPV的节点,这都是通过默克尔树的方式,成功在区块当中存储一个默克尔根,这个默克尔根是所有交易的哈希的特征值,相当于所有交易杂糅在一起生成了一个256位的默克尔根。

下面讲怎样构建一笔交易,也就是通过一种输入输出,通过所有节点转移的方式来构建我们的交易,告诉我们怎么样通过一个私有链怎样做一个隐私(我即便知道你的地址,但我不能把我这串比特币的地址和区块链当中的地址,对应你现实中你是哪一个人),通过这种方式来保证隐私问题。

最后中本聪告诉我们怎样解决51%攻击的问题,只有当全网的算力被掌握在大部分的诚实的节点手中,才没有办法做攻击,所以区块链能够通过这种方式带来一种稳定性。

四、区块链的基本原理

接下来我们更深入的来给看比特币的一个运行机制,区块链到底是什么以及它底层的东西。

在09年1月份,挖出了第一个比特币,在第一个比特币的区块当中,中本聪写了一句话,就是下方展示出来的英文

这段英文翻译过来是什么意思?财政部长对于银行的第二轮捐赠援助贷款,这段话其实是泰晤时报上的一句话,中本聪是讽刺08年的金融危机。

既然说比特币是区块链的第一个应用,那么比特币网络底层更深入的运行机制是什么?

首先要告诉大家的是,区块链是糅合了现代密码学、应用数学等等很多设计的一种产物,并不能单纯的说区块链到底是什么。要明白区块链到底是什么,需要明白到底什么是哈希(Hash)函数,这有助于理解后面的内容。

哈希函数

到底什么是哈希函数或者说到底什么是函数?其实接触过编程的同学应该都会明白,函数不过是封装了一段function、一段代码而已。你不懂编程可能也会明白在小学初中学过的函数概念。

也就是当我有了传递一个数据后,它会为我输出一个Y值,这是非常简单的。

哈希函数仍然是一个函数,也就是当你传递一个数据进去后,它会为你返回一段输出,返回一个哈希值,现在假设这里是Json交换格式,它会返回一个固定长度的哈希值,但其中到底怎么运行的我们并不用关心,它就是现代加密学的一个非常精巧的设计,现代加密学里最新的成果。

举个简单的例子,比如一个猪肉厂,把生猪放进去,就会有猪肉就出来;一个美容院,把凤姐放进去,范冰冰就出来,同样的道理,我现在有一串数据,把这串数据传递进去,它就会返回一个哈希值给我。

首先假设看到的值是9E4B这样一串数字,假设我现在输入一个点以后,它马上变为了04C8,也就是说这个变化是非常巨大的,我的数据一个非常微小的变化就会带来哈希函数一个非常巨大的变化,这是我们哈希函数的第一个特点。

哈希函数第二个特点是什么呢?假设我们把所有的数据,比如一个图书馆的数据输进去的时候,它仍然会为我返回一个固定长度的哈希散列,返回固定长度的哈希值。

哈希函数第三个特点是什么?

不能通过最后的哈希结果倒推出来传递的数据是多少,即便知道了哈希256的算法机制,我也不能够倒推出来它是谁,这就是非常精巧的设计。只有当真真切切地输入这串数据后,才会明白原来哈希值它是这串数据。这是要跟大家介绍的哈希函数的特点。

明白什么是哈希函数,有助于我们理解什么是区块,所以现在我们切换到block区块的概念

大家都知道区块链是由每一个每一个的区块所构成的,那每一个区块当中其实会存储非常多信息,在这里面我把它抽象出来,有block、有nonce、还有data值。

把这三个数据抽象出来,凿在一起,把它放入到哈希函数当中,它会生成哈希值。

也就说在之前,我是通过一个数据传递出一个哈希值的方式,但现在我有三个数据。注意,哈希函数只能够传递一个参数,那怎么把三个数据都传递进去?

就是把这三个数据凿在一起、拼接在一起,然后放到哈希函数中,它就会生成哈希值,这其实是叫做比特币的序列化。

哈希函数有一个特点,它的最前四个数据都为0。

现在我们做一个大胆的假设:

当前四个哈希值都为0的时候,我就说当前的区块是有效的。因为我们都知道,在区块链当中很多人都会发布区块,那怎么样能够验证区块真假?其实就通过哈希值来判断的。

如果说哈希值确实满足小于一定的规模,比如它前四个都小于0,那就说当前的区块就是有效的,我能够接收到你的区块的信息。

假设现在,在data的数据当中、或者在任何一个block、或者nonce值,把它进行了一个改变,那哈希函数会发生变化吗?

肯定会发生变化。因为哈希函数通过一个数据的微小变化,都会带来哈希非常巨大的变化。

如果现在输入jonson以后,区块还是有效的吗?又或者说,还能保证前四个哈希都为0吗?

哈希函数一个非常微小的变化,就会带来这个数据的巨大变化。那它可能会前四个都为0,但也可能不会都为0,但是大部分的情况下它都不会。

因为前四个都为0的哈希,也一种非常特殊的情况。现在假设我输入jackson,当前的这个区块马上颜色变成了红色,说明当前的区块已经失效了,哈希已经变为1320,它发生了变化。

我们会输一些非常没用的数据,比如jackson老师爱编程。那输出来数据后,哈希既然发生了变化,怎么保证当前区块还是有效的?

在比特币网络中,或者说在其它一些区块链当中,都很喜欢有一个nonce的随机数。这个随机数是可以随意变换的。

比如可以输入0,也可以输入1或 2。nonce值的变化也会带来哈希函数的变化。

假设现在从123,然后456789,搞到天荒地老、日月无光,搞通宵也找不到这个结果。因为现在是以手工的方式来计算nonce值。

那么,通过什么样的方式来让区块有效?非常简单,借助计算机来实现。

现在点击右下角mine以后,会发现当nonce值从零开始一直计算到3万多的一个nonce值的时候,现在的哈希值它原来前四个都为0,说明哈希值已经有效了。这就是要跟大家介绍的到底什么是挖矿。

明白了什么是挖矿、什么是区块以后,再来看看什么是区块链的特性?

现在给大家展现的就是12345五个区块,一条区块链就是由每一个区块所构成。那区块之间又是怎么样连接在一起的呢?

可以看到第五个区块的prev,它就是引用的第四个区块的哈希值。在区块当中存储了一个信息,这个信息它就是引用了前一个区块的哈希值。

同理,第四号区块当中也有这样一个信息,它也引用了前一个区块的哈希值,也就是B901。

第三个区块引用了第二个区块,第二个区块引用了第一个区块、创世区块的哈希值,第一个区块的哈希值没有前一个区块了,它的数据就全都为0,这是一个规定。

这就是要跟大家说的,区块链其实就是由每一个的每一个的区块所构成的。

假设现在输入jonson。输入数据了以后,当前区块又失效了。因为数据的微小变化都会带来这个哈希的巨大变化。既然这个哈希前四个不为0了,肯定就失效了。

既然黑客可以通过mine的方式挖取到一个有效的区块,但如果当第四号区块的数据发生变化的时候,第四号区块肯定就失效了,第五号区块由于引用了前面一个区块的数据,前一个区块的哈希变了,那么prev的哈希也变了。prev的哈希变了以后,第五号的哈希也会变,这时两个区块全部失效。

比如,在第四号区块输入jonson,第五号区块prev也变了,它会跟前一个区块哈希所对应,当前第五号的哈希也不满足有效区块的条件。想让两个区块都有效,就需要不断地挖,挖两次矿。

大家要注意,假如有一个黑客它很疯狂,想修改第一号区块的数据,这时,后面所有的区块全部都失效了。目前比特币网络当中,已经有了几十万个区块,如果还想修改第一个区块的数据,黑客会怎么做?

不断的挖几十万次,速度和算力要赶超全网的其他人非常多,才能够达到攻击的目的。但这几乎是不可能发生的。这是为什么区块链非常难以被攻击的原因。

因为你想修改前面的数据,就必须把后面的数据全部修改,然后不断疯狂地挖矿,一直要赶超其他人非常多的算力,才能够构建一条自己的最长的链条。这就是为什么区块链非常难以被攻击的原因,也是为什么有时会听说区块链需要等待一个小时来确认完全没有问题。

背后的道理就是,当数据它越在前面的区块的时,就越难被黑客所袭击,这就是背后的逻辑。

接下来再介绍一下,什么是分布式网络。

分布式就意味着,区块链是一个全球分布的账簿。

每一个节点都保存了完全相同的一份会计信息、完全相同的会计账簿。

比如,A节点存储了12345五个区块,B和C节点也有相同的五个区块。

那我们看一下,A节点的第五个区块的哈希叫做E4B9,B节点也是E4B9,C节点也是E4B9,说明都是完全相同的数据。

假设现在有一个黑客,他修改了第五号区块的数据。黑客再次点击mine,他要把这个数据、把这个区块变得有效。但它变有效了后,当前这个哈希变为了5F4A。

注意,如果全世界大部分人都认为,最后一个区块是E4B9,只有这个黑客认为5F4A,肯定也是少数服从多数。

我们看到,分布式再次带来避免攻击的可能性。当大部分人都是诚实的时候,诚实的节点会占据优先权,虽然说黑客的区块也是有效的,但是不符合其它节点的内容,也是没有用的。这是为什么分布式再次避免了攻击。明白这一点就已经明白了区块链当中很深入的内容了。

最后,来看区块链或者比特币网络当中非常重要的特性。

现在这个数据,比如,Jonson,它无任何的意义。但是在比特币的网络当中它是有意义的。它存储的是一个交易的记录。

接下来看一看,在比特币的网络当中,存储的都是一种有意义的交易的记录。

在比特币的网当中没有账户的概念,没有像银行一样,我有多少钱你有多少钱,而只是存储了一种交易的转移。

举个例子,现在25美元从Darcy同学转移给了Bingley,这是有意义的一种交易。

但是有两个问题,钱一开始是从哪里来的?第二个问题是Darcy同学既然要转移一笔钱给另外一个同学25美元,怎么样能够保证Darcy确实有25美元呢?这是我们非常关心的话题。

这涉及到区块链当中一个非常重要的机制,通过所有权转移的方式来进行操作。

每产生一个区块都会有一笔自动的交易,从无到有的把这笔钱转移给我的矿工。比特币网络从挖每一个矿能够带来50个比特币的收益,一直到每4年减半到了25个收益,一直到现在的12.5个比特币。把它发给矿工,这就是比特币从一开始到底是怎么产生的。

下面,怎么能解决确实有这么多钱能够转移给其他人呢?

比如,Anders同学要转移一笔钱给Lucas同学,20美元。怎么样能够保证Anders确实有这么多钱?

非常简单。如果有人曾经给过Anders超过20元钱的话,那他肯定就有这么多钱,也肯定能够转移给其他人。

在第一个区块中,有100元转移给Anders同学,Anders肯定就有超过这么多钱,能够把这笔钱打给其他人。因为他有100元,他虽然花了60元钱,但花费了以后他还有钱。

在比特币的网络当中,是怎么来判断这笔钱是有效的?

就通过不断的追溯前一个区块和以前的交易,看一看是不是有人曾给过你这笔钱,而你还没有使用过它。

现在看一看第五个区块。Jackson同学给了Alexander同学2美元。我们来看,jackson 同学确实有2美元。再前面追溯,发现jackson又给了另外一个人15美元。现在jackson同学一共加起来给了其他人17美元了,但还没有人转给过他钱。

再追溯到第三个区块的时候,发现有两个人曾经给过jackson 老师15美元。但是我这15美元给了Ryan以后,现在还差2美元。

那继续往前追溯,第二个区块没有。那继续往前追溯,会看到Sophia给过jackson 8美元,所以说jackson 老师是有钱的。

通过这种方式是想说明,首先比特币网当中存储的只是交易的信息,怎么能够验证到确实有这么多钱,通过不断的追溯以前的历史,来确认是不是有人曾给过你这么多钱,而你还没有花费过,这个时候你就可以做交易了。

这就是UTXO的概念,未花费的输出。

如果说比特币是区块链第一个应用,那区块链的历史结束了吗?

远远没有。

五、区块链的技术流派

在这几年的时间内,又涌现出一些非常多的项目。

比如说这个人——大名鼎鼎的V神,是世界第二大区块链平台——以太仿的创始人

他20多岁,并且大学还没有毕业,创造了几千亿的市场规模。这是区块链给年轻人的机遇。

既然已经有了比特币这样非常稳健的系统,为什么还需要其它一些平台?

区块链或者说比特币的网络有两个缺陷:

第一个缺陷,它只能够存储交易的记录,不能够存储其他的信息。

第二个缺陷,它存储的脚本是一种基于栈的语言。那有的年轻人可能就会想到,比如说V神,就会想是不是可以把一段代码放到安全的区块链平台上,并且能跟它进行交互的话,能够带来多么恐怖的一种商业的颠覆。

这就是以太坊相对于比特币网络来说,有的一个非常重要的不同——智能合约。

智能合约本身就是一串代码存储到了以太仿的区块链当中。

智能合约到底多有用?

它可以颠覆律师、颠覆法庭、颠覆拍卖所等等非常多的一些应用。

举个例子,假设要做一个博彩的合约,看一看比赛的输赢。当我们在博彩时,可能会怀疑第三方的平台有多少猫腻、抽多少提成。但在比

区块链网络当中,借助区块链的安全公开信,这段代码可以让所有人看到有没有作弊,就可以跟其他人公平的来竞争。这是它的非常大的颠覆,解决有关信任的问题 。

第二个,我再给大家举个例子。我们签一个合同的时候,可能要飞到另外一家公司,签完合同后可能还要请领导吃饭,吃了饭还可能需要洗浴,最后再坐飞机回来。这是不是非常消耗这个社会的资源?

但现在如果我告诉你我有一段智能合约,但智能合约就是一个忠实的执行者。我不用花费一美元就能把这段合约部署到我们的区块链的网络上。

此时的合约就是一个忠实的执行者,它能告诉你,当你违约了以后会触发什么样的一个条件,当你达成了承诺以后能够得到多少钱,这些如果都能在这段代码当中写清楚的话,那这个时候我就能够降低我的交易费用,而任何一次降低交易费用的尝试都会给社会带来非常深刻的变革。

接下来,会简单的介绍一下区块链即智能合约。下图所展示的就是一段简单的智能合约的书写方式,我们管它叫solidity

简单介绍一下solidity这门语言。假设这是我的remix的在线浏览器,我要把一个代码部署到我的以太坊平台上。

现在我要编译这段代码,只要点击部署就可以把这段代码部署到区块链的平台上,之后我还可以跟它进行交互。比如我点击上图那样的一些函数就等于我拿到了以太坊的这段代码并且可以跟它进行交互,我也可以修改区块链上的数据,这就是我要告诉大家的以太仿智能合约所带来的商业的颠覆性,并且它的应用场景非常的强大。

上图显示,有这样一段代码,它会通过我们的solc的编译器编译为一个二进制文件和一个ABI接口。

二进制文件可以通过一个web3j库跟以太坊的网络之间进行交互,当前我给大家画的这张图是Ropsten(以太坊的测试网络),以太坊也有其他的测试网络也有主网,那么如何把这张代码部署上去?又是如何来交互的呢?

其实也非常简单。在编译的时候我会通过ABI接口和web3j库,最后我能够通过它来跟我的以太坊网络再次做交互。可以说智能合约就是区块链上一段代码并且能够跟它产生交互。

说到影响力之大的区块链平台,不得不提一下大名鼎鼎的EOS,它在ico众筹的时候就筹到了一个天文数字,但大家千万不要认为EOS比其它平台更先进。

EOS既能够处理高并发的海量交易,又改进了共识算法机制,将我们的POW算法变为DPOS代理算法。虽然代理机制从某种意义上来说并不能算是去中心化的一个产物,但因为它本身也含有智能合约,因此我们要对它进行一定的关注。

六、区块链平台架构设计

接下来介绍一个比较有意义的平台叫做Hyperledger,即超级账本。

其实账本要解决的问题跟前面提到的三个平台都不一样,因为前面的这三个平台包括我们说比特币、以太坊,它其实都是一个去中心化的产物,我不用知道你是不是一个骗子,所有人都能够参与到竞赛中来维护网络。

但是Hyperledger这样一个超级账本它要解决的其实是企业级别的问题,企业的问题它是有权限的控制并且它有不同的网络,它也可以做我们的编程,它里面也会有智能合约。那明白这一点我们就会发现,不管是之前所说的以太坊、比特币、EOS还是企业级的应用Hyperledger这样一个超级帐本,都是当前发展非常火爆的平台。

其实每一个平台都是非常有意义的。拿一家飞机制造厂商举例,假如该厂商生产的原材料零件会散布在全世界很多国家,而原材料厂商它又会有非常长的原材料厂商链条。目前无论是厂商还是企业,它都有自己的账本,即自己的一份数据库。

如果能够把这些账本都揉在一起,放到一起,使得账本能够共享,并且这份账本能通过有权限的密码来控制,那么这家企业的上下游之间就会非常高效的进行联动,从而提高整个社会的效率。这点就可以体现出超级账本Hyperledger它的意义。

Hyperledger这样的超级账本本身其实是一个非常庞大的体系,是Linux基金会下的一个项目集。你不能简单的说超级账本它是什么,它包含了很多的工具,这些工具都是为了非常快速的部署构建我们的超级账本,并进行可视化交互设计。

关于超级账本,有一个令我印象深刻的项目,是由IBM公司牵头的fabric。

我们在谈论超级账本的时候很多时候都是在谈论fabric,首先我要和大家说的一点是,为了解决企业级别的问题,首先要了解一下区块链平台架构的设计,这是一个非常庞大的话题。如下图所示,它是我们比特币网络当中的架构设计。

首先要知道作为一个P2P的分布式网络当中,节点与节点之间是相互连接的。

假设我就是一个节点,节点与节点之间会有非常多的一些交流,我会维护节点,我会与节点进行一个通信,包括外部的节点,这都是节点与节点之间需要做的一个模块的设计。

就当前的模块来说,节点再进行通信了以后我要如何管理,比如说当其他节点给我发送一些信息以后,我需要如何验证这些信息并且把这些信息给存储起来,这是我要跟大家强调的管理的作用。

在比特币的网当中,它分为了两个部分:一个部分是交易;一个部分叫做区块交易。

本身它是存储在我们区块当中的,我们会把很多交易存储在一起,交易时我会收到其它节点或其它端口其它软件给我发送的一些交易,也有可能会收到一些区块。当我收到一个新的区块时,或者说当我挖矿的时候我是需要对区块当中的所有的交易做一种验证,这就涉及到一个验证的模块,这个验证告诉大家在比特币网当中它是通过交易的脚本做了验证。交易的脚本是一种基于栈的一门语言,包含了数字签名,这里就不再赘述。

这就是验证,然后还有挖矿本身其实就是需要整合所有的交易,因为你整合起来还可以赚手续费,整合所有的交易构建一个新的区块也需要有一个存储的机制,即需要有一个数据库。

比特币网络它有一个Level DB,我们把这样一些数据存储起来相当于存储在硬盘中,那这个数据的存储就包括了区块的头交易的完整的信息。包括了我UTXO未花费的输出,这就涉及到我怎么样将数据与数据库之间做一种交互。

大家可能会发现我可能还会有钱包,当然了这个钱包是用QT来做的bitcoin设计钱包,我需要有一个可视化界面那这个时候就涉及到在比特币的网络当中,这个设计钱包就会跟我连接在一起,比如说,当我点击一个按钮之后,我会发送一个交易,那我就会跟我的连接节点的连管理建立一种连接,然后处理我的这笔交易。包括验证添加到交易词这样一些信息,那我也有可能跟我的数据库之间做一种交互性,也有可能会存储我的一些私钥等。

当我把它提取出来告诉大家,在外部会有一个软件比如某个应用程序怎么样跟我的bitcoin核心连接,通过RPC远程接口调用,从而能够跟我的bitcon这个核心做一种交互,内部通过搭建起来的节点做了很多事情,外部通对RPC的远程调用,我跟我的应用程序连接,也会通过P2P网络跟外部的网络进行连接,这是比特币的一个平台。

而以太坊要相对复杂一些,它是一个状态机,它跟比特币网不同之处在于,它会修改区块当中的数据。假设我现在账户上有20块钱。比如说有人转给我10块钱,那我现在账户上就30块钱,我通过这种交易会触发我状态的改变,这也就是为什么我们会把区块链和以太坊叫做一个状态机。

刚才介绍的比特币架构设计与以太坊网架构设计其实是很相似的,但是不同之处就在于区块当中存储的数据会有些区别。

假设我现在有了一笔交易,前提是我的很多笔交易都会在我的以太坊虚拟机当中来运行,我们说过比特币的网络它是通过了我的脚本来验证我的信息,但在以太坊网络当中,我的状态当中第一笔交易它会触发一些代码,那这段代码实际上是运行在我以太坊的虚拟机当中,我一个节点会处理很多很多这样一个交易,就会带来状态的一种转移,在这种交易最后,它就会执行挖矿的操作,跟我们比特币一样执行挖矿,然后就会带来状态的转移。

那么状态的转移到底是怎么回事呢?现在我们来给大家看一看这张图片,可能会稍微复杂一些。

这个复杂之处首先是要跟大家说一下,区块当中存储的数据非常的复杂,包括了一个状态,包括了交易的记录、交易凭据的记录等等,它存储很多数据,一个交易进来比如说一个节点它会收集很多很多交易,交易会触发区块链上的代码,实际上,触发区块链代码是在以太仿虚拟中做了运行,代码运行以后,我会计算它的一个有效状态和一些奖励等。

运行完毕这些操作以后,它就会执行挖矿的操作,挖矿成功它就会通知全国所有的节点来更新这样一个数据,那更新这个数据就会带来有些不同的地方。

由于以太仿机制中,区块内存储了很多状态和信息,这里我想告诉大家的是,既然知道区块链的数据是不能够被修改的,为什么还会说我能够修改区块链以太坊网当中的状态?

其实我并没有真正修改它的状态,大家要注意,比如说当前我的账户中有27美元,那我现在如何来修改这个状态?

我并没有直接来修改这个区块把27变为45,我只是在另外一个新的区块当中,即在state root状态数当中,我仅仅简单的把我想要修改的数据修改成了45而已,其它的数据我只是做了一个简单的引用。

大家可以发现引用的是前一个区块的一些数据,比如说一些代码等我都不用做修改,我只修改我需要修改的,所以说这个状态数就非常复杂的将所有这样一些数据给连接在一起,这样做的好处就是避免了我不用记录一些非常重复的信息。状态的改变会带来数据的改变,这就是我为大家在前文提到的以太坊网络它非常不同的地方。

最后给大家介绍一下Fabric这样的网络,就是很多人非常关心的企业级的网络。

首先,与比特币、以太坊等其它网络相比,Fabric企业级的网络是权限控制的。当要设计区块链架构的时候,需要给不同的进入者颁发一个许可证书。

在Fabric中我是通过PKI公钥基础建立了一种密码的验证,我验证一个人并为他颁发一个相当于数据签名的证书。

首先要给系统做一个设计,其次由于企业中会有非常多不同的组,比如A公司、B公司、C公司、D公司可能建立了一种网络,有可能B、C、E这3家公司会有一种新的网络,不同的网络之间不能够相互干扰。在Fabric当中通过channel通道或者说叫做一个往不同的网络运行在docker的container当中,从而起到互不干扰的一个作用。

如果你想做非常复杂Fabric的设计,首先,当有了证书之后就要验证,包括权限验证、销毁权限验证以及你的证书有效性等,防止不同的骗子进来。

其次,我们要设计一种不同的通道来让不同的企业有不同的网络,而不同网络当中有账本、有代码,也是我们的智能合约。

Fabric中有比较好的设计,即不同的节点之间都会很好的分割开来。而在比特币、以太坊网络当中可能每一个节点都没有非常好的分割开来。

大家如果要设计的话,需要注意到一点,比如client客户端的网络会初始化我的代码,而Peer网络就会将收到的信息(比如收到block我的账本信息)转移给其它一些节点,我的节点能够快速的同步,order节点它会执行我的代码(chaincode),然后会把我状态的交易(区块)发给peer节点。每个节点之间可能还做的是不同的功能,对供应链产品来说,Fabric企业级的项目,对于其它区块链来说的话,它会做一种节点的分割性。

最后我再给大家介绍一下,假设一个用户写好了智能合约,他会把这段合约部署到我的docker容器的Peer节点当中。

另外一个用户,他必须既是认可成员又有证书才行。他可以通过我调用Fabric的API接口,我来激活调用交易,那这笔交易会带来一个状态的变化,所以状态的变化就会让它存储在我的账本当中,也就是每一个节点的账簿当中,然后快速的同步给全网。

所有的节点会有我这个交易的记录,会永久地存储。另外执行这段代码以后,状态的改变也会做一个存储,这是我要和大家说的,这三块区块链的架构其实都是非常的耐人寻味的。

以上我为大家介绍了区块链的价值和应用场景,区块链的历史基本概念包括挖矿分布式、所有权转移机制等等。最后介绍了区块链的四大平台以及其背后的不同原理、不同的应用场景、不同的逻辑以及不同的架构的设计来帮助大家理解完整的区块链以及如何来做开发。

声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。

网站地图

用户反馈 合作

Copyright © 2019 Sohu All Rights Reserved

搜狐公司 版权所有