《区块链技术及应用》区块链网络构建_第1页
《区块链技术及应用》区块链网络构建_第2页
《区块链技术及应用》区块链网络构建_第3页
《区块链技术及应用》区块链网络构建_第4页
《区块链技术及应用》区块链网络构建_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

区块链网络构建目录/CONTENTS5.1网络架构5.2去中心化5.3基于开源区块链项目5.4编程案例本章小结思考题5.1.网络架构5.1.1网络中的节点通常来说,计算机网络中的节点指的是一台有独立地址并具有传送或接收数据功能的设备。而在区块链中,节点必须具有以下几个特点。(1)具有一定的存储空间:任何节点都必须存储整条区块链或区块链的一部分。(2)连接网络:通常来说,区块链网络由多个节点组成,因此这些节点必须通过网络相连。(3)参与区块链:任何一个区块链节点必须运行与区块链相关的程序。区块链节点的特点具有一定的存储空间连接网络参与区块链5.1.1网络中的节点在现在的区块链应用中,区块链中的节点可分为矿工节点、全节点和轻节点。1.矿工节点现有的矿工节点运行于强大或专用的硬件(如ASIC)上,它们唯一的目标是尽可能快地挖出新区块。2.全节点全节点验证矿工挖出来的块的有效性,并对交易进行确认。为此,它们必须拥有区块链的完整副本。同时,全节点执行路由操作,帮助其他节点发现彼此。区块链中的节点轻节点全节点矿工节点3.轻节点轻节点并不存储整个区块链副本,但是仍然能够对交易进行验证(不过不是验证全部交易,而是一个交易子集,如发送到某个指定地址的交易)。5.1.2区块链的运行机制通常来说,一个系统可以根据中心机构的数量分为3类:中心化系统、多中心化系统和去中心化系统。(1)中心化系统:只存在一个中心机构。(2)多中心化系统:同时存在多个中心机构。(3)去中心化系统:不存在任何中心机构。中心化系统(左)、多中心化系统(中)和去中心化系统(右)5.1.2区块链的运行机制区块链网络通常来说是去中心化的,这意味着没有服务器,客户端也不需要依赖服务器来获取或处理数据。在区块链网络中,每个节点是网络的一个完全(Full-Fledged)成员。节点就是一切,它既是一个客户端,也是一个服务器。区块链网络是一个P2P的网络,即节点直接连接到其他节点。它的拓扑是扁平的,因为在节点的世界中没有层级之分。5.2去中心化5.2.1去中心化的定义中心化的意思是中心决定节点,节点必须依赖中心,节点离开了中心就无法生存。去中心化恰恰相反,在一个分布有众多节点的系统中,每个节点都具有高度自治的特征,每个节点都是一个“小中心”。由于中心化设计里存在着强大的中心机构,因此可以解决许多技术上难以解决的问题,如对整个系统的监督和管理。去中心化系统通常存在着效率低下的问题,但去中心化的系统具有能够降低系统运营成本、防止系统被中心机构掌控的优点。流通标准中心中心化去中心化5.2.2

工作量证明机制区块链技术最重要的创新之一,便是通过工作量证明机制来实现分布式共识,同时通过提高攻击成本来防御恶意攻击。工作量证明的关键特点就是,分布式系统中请求服务的节点必须解决一个有难度但是可行的问题,但是验证问题答案的过程对服务提供者来说非常容易,也就是一个不容易解答但是容易被验证的问题。这种问题通常需要消耗一定的CPU时间来计算某个问题的答案,目前绝大部分的区块链都选择使用工作量证明的分布式共识机制,网络中的所有节点通过执行解密来获得创建新区块的权利。1.compute2.solve3.send4.vertifySenderReceiver5.2.3区块链共识当一个节点挖出一个新区块后,默认会立即将新区块链接到本地存储的区块链的末尾,并且广播到整个网络中。其他节点在收到这一新区块后,会验证这一区块的有效性并决定是否接收这一区块。当同时收到多个新区块时,节点默认只承认那些连接到共识链(最长链)上最后一个被确认的新区块,并以第一个满足条件的区块所在的链为共识链。对于收到的其他区块,节点可以自己选择处理方式,推荐的方式为将较新的区块以支链的形式保存起来。如果一个节点收到的区块的索引远远大于该节点当前共识链的最后一个区块的索引,那么说明该节点很有可能已经失去与其他节点的同步,需要立即重新进行同步(从其他节点下载区块链)。按照上述共识机制,经过一段时间的区块竞争后,一定会有一条最长的共识链形成。5.2.3区块链共识3个节点,区块数量完全一样,同一时刻只有一个节点挖出一个新区块3个节点,区块数量完全一样,同一时刻不止一个节点挖出一个新区块在上一张图的人基础上。矿工a又挖出一个新区块一个节点长时间掉线收到一个比较旧的区块缓存旧区块,产生支链下图为区块链就最长链达成共识的详细过程:5.3基于开源区块链项目5.3.1Hyperledger超级账本项目为透明、开放和去中心化的企业级分布式账本技术提供了开源参考实现,并促进了区块链和分布式账本相关协议、规范和标准的发展。作为一个联合项目,超级账本由用于不同目的和场景的子项目组成。所有项目都遵守ApacheV2许可,并约定共同遵守以下基本原则。(1)重视模块化设计:包括交易、合同、一致性、身份、存储等技术场景。(2)重视代码可读性:保障新功能和模块都可以很容易添加和扩展。(3)可持续的演化路线:随着需求的深入和应用场景的增加,不断增加和演化新的项目。Hyperledger重视模块设计重视代码可读性可持续的演化路线5.3.2

InterLedgerInterLedger是Ripple公司推出的一个跨账本协议,旨在帮助银行间进行快速结算。Ripple公司的跨账本协议允许参与者查看相同的账本,通过该公司网络,银行客户可以实现实时点对点跨境转账,无须中央组织管理,支持各国使用不同的货币。在InterLedger系统中,两个不同的账本系统可以通过第三方来进行货币之间的兑换,如下图所示。账本系统不需要信任第三方,因为协议使用密码算法为这两个账本系统和第三方创建资金托管,并且当各方在资金上达成共识时,它们可以互相进行交易。这意味着此类交易不需要受到法律合同的保护和过多的审查,大大降低了交易的门槛。5.3.2

InterLedger1.InterLedger协议功能InterLedger协议(InterLedgerProtocol,ILP)有3个关键功能,即具有ILP数据包、可进行无信任发送和具有打包价值。InterLedger协议功能具有打包价值可无信任发送具有ILP数据包(1)具有ILP数据包:InterLedger协议的核心是ILP数据包,这是发送方、第三方、接收方之间使用的消息传递标准。(2)可进行无信任发送:InterLedger的第二个关键功能是其能够让用户通过第三方网络进行汇款,而不需要信任它们。(3)具有打包价值:或将较大的转账分成许多低价值的数据包。5.3.3

steemSteem项目使用加密货币奖励用户,解决了现有社交平台利润分配不合理的问题。简而言之,Steem是一个通过加密货币奖励来支持社区建设和社交互动的区块链数据库。Steem的两个重要特色:1.共识机制:Steem系统采用石墨烯技术,所以区块链记账采用的是DPoS算法。2.首创零手续费:因为Steem使用新发行的代币给见证人(记账员)发工资,加上Steem使用的是DPoS共识机制,记账员记账不会有太大的工作量,所以大部分的价值可以保存下来并分发给平台中的其他贡献者。所有记账员的工资占Steem系统每年产生新代币总数的10%。DPoS共识机制5.4

编程案例5.4.1实现私有链1.准备工作本小节的目标是开发一个能够在本地运行的私有链,这一区块链接收和存储本地用户上传的数据,且每个用户在上传数据时需要提供自己的数字签名以验证自己的身份。简易区块链架构如下图:2.区块结构构建在本小节中为简便起见,我们只是简单地将其以列表的形式进行组织。一般来说,区块链中的区块必须包含下列元数据:区块产生的时间,谁生成了这个区块,上一个区块的哈希值,工作量证明的结果等。每个区块都必须包含以下属性:前一个区块的哈希值(hash)、工作量证明(proof)、索引(index)、时间戳(timestamp)以及交易列表(trans)5.4.1

实现私有链3.Blockchain类回忆一下前文对这个私有链的要求,它需要完成3个功能。(1)能够接收区块链拥有者上传的数据,并把接收到的数据存储到区块链中。(2)能够执行工作量证明算法,产生存储数据的新区块,并将未确认的数据写入新区块。(3)能够对数据提交者的身份进行验证,只有通过了验证,系统才会接收提交的数据。Blockchain类的功能是管理区块链,它能执行存储交易、加入新区块、验证签名等操作。在它的构造方法中还创建了两个列表:chain列表用于存储区块链,trans列表用于存储尚未确认的交易(数据)。newTrans()方法newBlock()方法hash()方法工作量证明机制signProof()方法lastBlock()方法经过上图的流程,Blockchain类的开发已经基本完成了,它能够验证上传数据者的身份,将未确认的新交易缓存起来,创建新的区块并将缓存的交易写入其中。5.4.1实现私有链4.区块链API开发首先,需要为Flask框架编写HTML模板。目前我们需要两个模板,一个是控制区块链执行各种操作的页面的模板,另一个是提交交易的页面的模板。编写完模板之后,就需要为Flask框架定制接口了。/index区块链应用的首页/chain查看区块链上存储的所有数据/newtrans接收和验证用户提交的数据/newblock执行工作量证明算法并生成新的区块编写向外界提供4类接口5.测试与运行编写完成Blockchain类和接口.py文件之后,就可以开始运行区块链了。运行结果如图所示。sever.py脚本运行结果5.4.1实现私有链Web服务器启动之后,会显示服务器绑定的IP地址和端口。复制命令行中的“:5000”,将其粘贴到浏览器地址栏中,在末尾加上前文编写的某个接口的名称。即可访问我们编写的页面,其结果如下图所示。

单击“查看区块链”按钮,就可以看到目前区块链中存储的所有数据,其结果如图所示。5.4.1实现私有链可以看到,目前区块链中只存在初始化Blockchain类时建立的创世区块。回到第一个页面,单击“新交易”按钮就会进入交易提交界面,如图右所示。前3项可以任意填写,因为目前的区块链只负责存储我们提交的数据而不会在意具体数据是否有意义。第4项和第5项需要输入配套的公钥和私钥,公钥和私钥的生成如右图所示。5.4.1实现私有链分别复制命令行中的公钥和私钥到交易提交页面的两个输入框中,单击“提交”按钮即可查看交易提交是否成功。交易提交成功的结果如图所示。另外一种产生配套的公钥和私钥的方法是在网上搜索“RSA密钥在线生成”,可以找到一些提供配套RSA密钥生成的网站,如图所示。5.4.1实现私有链交易顺利提交之后,再次访问/chain接口,可以看到刚刚提交的交易还没有加入区块链。这是因为刚刚提交的交易还没有通过工作量证明算法加入新区块,目前仍处于未确认状态。回到第一个页面,单击“新区块”按钮就会开始执行工作量证明算法,这个过程可能会需要一些时间,特别是如果hard被设置得太大,时间会更久。当工作量证明算法完成之后,包含未确认交易的新区块产生并加入区块链,数据正式被区块链存储,其结果如图。5.4.1实现私有链再次访问/chain接口,可以看到刚才提交的交易已经被存储到区块链中了,其结果如图。5.4.2

实现公有链在接下来的开发中,我们首先会在前文开发的私有链的基础上,继续扩展区块链的功能,将其变为一个完全开放的、无许可必要的、任何人都可以参与其中的公有链。常见的公有链系统架构如图所示。1.准备工作目标:开发一个公有链节点,每个节点可以接收和存储任意用户上传的数据,并且这些公有链节点可以通过网络自动组成一个公有链网络。5.4.2实现公有链2.改造Blockchain类改造的主要内容如下。(1)能够获取其他节点的信息。(2)能够验证其他节点存储的区块链是否合法。(3)能够获取区块链网络中具有最长长度的区块链。前文建立的区块链的创世区块并不是固定的,它还记录了区块链开始运行的时间,这对私有链来说不存在任何问题,但对公有链或联盟链来说,会造成很大的困扰。这是因为在公有链网络中,为了保证不同节点存储的区块链都是安全、可信的,我们需要确保这些区块链都具有共同的、不可被更改的祖先。这样我们只需要从创世区块开始,检查之后的每一个区块是否是根据事先设定的规则生成的,就可以验证区块链的合法性。init()方法validChain()方法registerNode()方法longChain()方法5.4.2实现公有链3.改造区块链API由于公有链需要在能够执行私有链的各种操作的基础上再增加节点注册、数据验证与同步等操作,因此我们势必要对区块链的API进行改造,改造的主要内容如下。(1)增加了/newnode接口,功能是调用Blockchain类中的registerNode()方法完成新节点的注册。(2)增加了/synchronize接口,功能是验证其他已知节点上存储的区块链的合法性,并完成区块链的同步。4.多任务技术所谓的多任务技术是指操作系统可以同时运行多个任务。多任务的实现有以下3种方式。(1)多进程模式。(2)多线程模式。(3)多进程+多线程模式。5.4.2实现公有链5.测试与运行为了方便测试,本小节没有使用自动化运行,而是借助/newnode接口和/synchronize接口完成对公有链的测试工作。首先同时在两个控制台中运行接口.py文件,并且为两个接口进程设置不同的端口(本例中为5000和5001)。运行结果如图。然后通过浏览器访问两个接口进程对应的首页,即:5000/index和:5001/index。首页的访问结果如图所示。5.4.2实现公有链接下来单击“注册新

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论