区块链技术概述课件_第1页
区块链技术概述课件_第2页
区块链技术概述课件_第3页
区块链技术概述课件_第4页
区块链技术概述课件_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

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

文档简介

区块链技术概述

2017年五月1区块链技术概述

2017年五月112区块链技术介绍

OBC组网与智能合约3智能合约的开发与示例212区块链技术介绍OBC组网与智能合约3智能合约的开发3”继互联网后的又一大变革时代到来”、“互联网金融的终极形式”、“价值互联网的开端”、“RecordofThings记录一切”……

区块链在短短时间内获得了巨大的涟漪效应,IBM在2016年2月开放了OpenBlockChain技术并贡献给了Linux社区,引起了业界巨大轰动。那么区块链到底是怎样的一项颠覆性技术?其特点是什么?IBM区块链平台的特点是什么?未来会如何演变?区块链应用与已有应用的关系是什么?本片将对这些问题逐一解链并进行探讨。序3”继互联网后的又一大变革时代到来”、“互联网金融的终极形式4区块链介绍区块链是一种共享账本技术,商业网络中的任何参与方都可以查看交易系统记录(账本)什么是区块链?4区块链介绍区块链是一种共享账本技术,商业网络中的任何参与5区块链是支撑比特币的底层关键技术区块链技术的分类?公有链Pow/Pos/DPos联盟链OBC/Etherenumpbft共识私有链5区块链是支撑比特币的底层关键技术区块链技术的分类?公有链联6

是不受监管的,抗审查的影子货币区块链确保“类现金”的货币流通唯一的,

不可篡改确定的是区块链首个应用区块链

不是区块链是支撑比特币的底层关键技术什么是区块链?6是不受监管的,抗审查的7更进一步——什么是(企业级)区块链智能合约隐私保护共享账本共识保证共享账本适当的可见性;保证交易是真实和可验证的交易条款和交易状态内嵌在区块链系统中,驱动交易执行所有参与者一致同意才意味着交易在网络中通过验证跨商业网络共享的,不可更改的,分布式交易记录系统更广泛的参与,更低的成本,更高的效率什么是区块链? 区块链是一种分布式多节点“共识”实现技术,通过区块链可以完整、“不可篡改”地记录价值转移(交易)的全过程。区块链的形成按照时间先后顺序进行连接,每一个参与共识形成的节点都有一份区块链信息的完整副本。7更进一步——什么是(企业级)区块链智能合约隐私保护共享账本8比特币帐本什么是区块链?8比特币帐本什么是区块链?9OBC帐本什么是区块链?9OBC帐本什么是区块链?10共享账本记录商业网络中的所有交易在参与者之间共享参与者通过同步获取自己的备份授权许可的,参与者只能看到适当的交易记录信息共享的记录系统什么是区块链?10共享账本记录商业网络中的所有交易什么是区块链?11智能合约合约中的商业规则内嵌在区块链系统中,在交易时被执行可验证的、被签署的编码在编程语言中案例: –在公司债权发生转移时执行定义的合同条款什么是区块链?11智能合约合约中的商业规则内嵌在区块链系统中,在交易时被执12隐私保护账本是共享的,但是参与者要求其具有隐私保护参与者需要: –交易信息需要保密 –身份不和交易绑定交易必须是真实的密码学是这些步骤的核心什么是区块链?12隐私保护账本是共享的,但是参与者要求其具有隐私保护什么是13共识共识是交易验证与确认的过程当参与方是匿名时 –交易确认代价高昂 –的挖矿过程为匿名者提供验证,但需巨大计算成本(工作证明)当参与者都是已知且可信时 –交易确认的成本降低多种替代方案 –权益证明,欺诈性交易产生时需要验证(如债券交易) –多个签名(如5个参与者中3人的同意)企业级区块链需要“可插拔的”共识什么是区块链?13共识共识是交易验证与确认的过程什么是区块链?14行业采用区块链的好处减少成本及复杂度提高可发现性可信的记录保存共享的可信流程为什么与业务相关?14行业采用区块链的好处减少成本及复杂度可信的记录保存为什么15区块链——并非万能不适用场景1.高性能(毫秒级)交易2.小型组织(无商业网络)3.寻找数据库的替代方案4.寻找消息传递的解决方案5.寻找交易处理的替代方案为什么与业务相关?15区块链——并非万能不适用场景为什么与业务相关?16区块链技术平台对比16区块链技术平台对比第一,跨组织协作。在区块链信任机制中,所有成员参与对信任价值的监督、控制和审计,对地址、链、公钥、私钥、摘要等几乎所有数据记录的要素,进行全生命周期的协作密码保护,而且是全球、随机的。一个联盟链,相当于一台全球超级密码、交换机、密钥签名服务器和密码本的总和,信用连续。第二,永不宕机。因为成员的动态运算机制,所有成员节点,进行实时同步,无法实现局部控制,全球节点的随机分布和相应在运算时钟和动态时间戳的控制下,永远不停机,信用连续。第三,成员监管。区块链强信任的技术特点,来自其节点成员无中心的安全职责,成员局部的协作综合实现了体系安全的监管全部,融监管与过程之中,实现了系统学中安全的正反馈机制,在目前的计算条件下,尚无法通过跨越动态时间戳的可靠超越,信用连续。为何要用区块链—强信任机制解决中心化系统中信用不连续问题17第一,跨组织协作。在区块链信任机制中,所有成员参与对信任价值18区块链运营对比18区块链运营对比19IBM开放区块链与Linux社区——开放持续投入代码运行环境账簿数据结构模块化(可插式)共识框架模块化(可插式)身份服务P2P网络技术升级包SDK(API)共识算法库(插入模块)成员管理策略区块链网关开发工具管理控制台区块链行业应用基础部分共享账簿(SharedLedger)增值部分(模块、工具、封装)应用部分项目核心范围内核心APIIBM社区贡献Hyperledger项目IBM在Blockchain上持续投入,致力于行业应用是Linux开源社区Hyperledger的主要贡献方,致力于协同其他公司共同研发,公布OpenLedger标准(规格说明书),创建基于Linux的开源共享账簿(比Bitcoin更适合行业应用)推动区块链技术在行业中的应用(行业区块链)Blockchain已经作为一种实验性(网络)服务在Bluemix上推出基于LinuxOne的开放计算平台对Blockchain的支持……IBM区块链19IBM开放区块链与Linux社区——开放持续投入代码运行20IBM开放区块链:贡献给Linux社区的架构及代码Community+CodeMEMBERSHIP包括OBC参与方的身份识别,隐私,可审计性。BLOCKCHAIN|TRANSACTIONS经过共识过程进行分布式交易账本处理。CHAIN-CODE“智能合约”,提供在区块链上运行业务逻辑的能力。APIs,SDKs,CLI为开发人员提供以可编程方式控制区块链网络的能力。20IBM开放区块链:贡献给Linux社区的架构及代码C21IBM开放区块链名词解释Transaction交易。账页中的一笔记录,用于确认一个事实,执行一段代码(chaincode)Ledger账薄(账册)。由首尾相连的一组区块(block,有时也称为一个账页)构成,记录交易和区块世界的状态WorldState区块世界的状态。由一组变量组成,指明交易的执行结果Chaincode交易中记录的一段代码,其执行结果会改变区块世界的状态(Worldstate)ValidatingPeer验证节点。OBC区域链网络中的全功能节点,负责验证交易、记录账薄、达成共识Non-validatingPeer非验证节点。OBC区域链网络中的半功能节点,负责验证交易,但不执行交易,也不记录账薄,通常用于代理ValidatingPeer,提供RESTservice转发功能Permissioned许可。只接受成员接入,不接受匿名接入Privacy隐私。OBC中任何成员都能发起交易,但只有相关方才能知道,其它无关节点无法从交易回溯到交易方Confidentiality保密。OBC中只有交易相关方可以看到交易内容,其它无关节点只能验证交易的真实性Auditability审计。如果把审计方加入OBC交易,则它可以看到交易,从而审计是否合规21IBM开放区块链名词解释Transaction22帐本结构示意22帐本结构示意23OBC角色划分与工作内容成员服务(MemberServices)注册(Registration)身份管理(IdentityManagement)可审计(Auditibility)验证节点(ValidatingPeer)进行共识(Consensus)运行交易(Transaction)维护账本(Ledger)发出事件(Event)非验证节点(Non-ValidatingPeer)维护节点间的安全上下文(SecureContext)代表客户向成员服务或验证节点请求服务向应用交付事件(Event)处理API请求应用(Application)认证客户把客户映射到安全上下文(SecureContext)调用RESTAPI用户(Client)登录与交易23OBC角色划分与工作内容成员服务(MemberSer24网络拓扑结构整个OBC网络中含有两种节点,验证节点(ValidatingPeer)和非验证节点(Non-ValidationPeer)。前者是全功能节点,构成全连通拓扑结构,后者是代理节点,通常挂接在相邻验证节点上应用程序可以连接在验证节点,也可以连接在非验证节点在OBC网络中需要有一个密钥管理结节,考虑到PBFT算法的3f+1共识机制,典型的容错(允许一个节点故障)环境需要有4个ValidationPeer节点成员服务MemberServices用户Client用户Client24网络拓扑结构整个OBC网络中含有两种节点,验证节点(Va25单节点和多节点网络若OBC网络中只有一个VP节点(极端简化),则应用程序可以直接与该节点连接,执行其上的Chaincode代码,这时VP节点只需要记账,不需要共识若OBC网络中有多个VP节点,则应用程序可以通过NVP节点(NVP与应用程序可以一对多)间接访问VP(NVP与VP之间多对一),这时VP节点需要验证交易、运行代码、记录账薄、达成共识25单节点和多节点网络若OBC网络中只有一个VP节点(极端简26商业票据的Blockchain应用-星形架构26商业票据的Blockchain应用-星形架构27IBM开放区块链参考架构概览(模块与服务)27IBM开放区块链参考架构概览(模块与服务)28成员管理(Membership)成员管理提供会员注册、身份保护、内容保密、交易审计功能OBC所有成员首先,通过RegistrationAuthority(RA)注册获得许可然后,通过EnrollmentCertificateAuthority(ECA)获得注册安全证书(ECert),第三步(可选),通过TransactionCertificateAuthority(TCA)获得交易安全证书(TCert)使用二者之一签名发起交易请求与公有链不同(所有参与方不需要身份认证,可直接进行交易)28成员管理(Membership)成员管理提供会员注册、身29成员管理模型29成员管理模型30业务网络动态组建示例:第一个节点OBC节点相关配置位于/openblockchain/obc-peer/openchain.yaml在配置文件的peer小节中,validator_enabled为true表示节点是验证节点,否则是非验证节点discovery_rootnode在启动时使用,当这个参数被设置时节点会使用discoveryprotocal查找其他节点。这个参数是网络上另外一个节点的IP,这个节点作为网络上所有节点进行discover的起始点。rest_enabled表明节点是否接受REST请求,对于生产环境一般把验证节点设置为false,只让非验证节点接受来自应用的REST请求第一个节点验证节点根节点IP:validator_enabled:truediscovery_rootnode:rest_enabled:false30业务网络动态组建示例:第一个节点OBC节点相关配置位于g31业务网络动态组建示例:第二个节点第二个节点向根节点发送消息DISC_HELLO,含有自己区块链的高度blockNumber和PeerEndpoint。如果根节点应答的DISC_HELLO消息中的区块链高度高于第二个节点当前持有的,第二个节点立刻发起synchronizationprotocol以同步账本的最新状态此后第二个节点每5秒钟向所有的已知节点(目前只知道第一个节点)发送DISC_GET_PEERS消息获得加入网络的其它节点第一个节点收到DISC_GET_PEERS消息后,回复包含了PeerEndpoint数组的DISC_PEERS消息IP:validator_enabled:truediscovery_rootnode:rest_enabled:falseIP:validator_enabled:truediscovery_rootnode:discovery_period:5srest_enabled:false第二个节点验证节点第一个节点验证节点根节点31业务网络动态组建示例:第二个节点第二个节点向根节点发送消32业务网络动态组建示例:第三个节点第三个节点向根节点发送消息DISC_HELLO,含有自己区块链的高度blockNumber和PeerEndpoint。如果根节点应答的DISC_HELLO消息中的区块链高度高于第三个节点当前持有的,第三个节点立刻发起synchronizationprotocol以同步账本的最新状态,虽然不执行交易,但是非验证节点维护一个最新的账本副本此后第三个节点每60秒钟向所有的已知节点(第一、二个节点)发送DISC_GET_PEERS消息获得加入网络的其它节点(考虑到发送间隔,第二个节点应该先于第三个节点发现对方)第一、二个节点收到DISC_GET_PEERS消息后,回复包含了PeerEndpoint数组的DISC_PEERS消息IP:validator_enabled:truediscovery_rootnode:rest_enabled:falseIP:validator_enabled:falsediscovery_rootnode:discovery_period:60srest_enabled:true第二个节点验证节点第一个节点验证节点IP:validator_enabled:truediscovery_rootnode:discovery_period:5srest_enabled:false第三个节点非验证节点32业务网络动态组建示例:第三个节点第三个节点向根节点发送消33区块(Block)结构messageBlock{version=1;tobuf.Timestamptimestamp=2;bytestransactionsHash=3;bytesstateHash=4;bytespreviousBlockHash=5;bytesconsensusMetadata=6;NonHashDatanonHashData=7;}messageBlockTransactions{repeatedTransactiontransactions=1;}messageNonHashData{tobuf.TimestamplocalLedgerCommitTimestamp=1;repeatedTransactionResulttransactionResults=2;}messageTransactionResult{stringuuid=1; //交易IDbytesresult=2; //交易执行结果uint32errorCode=3; //错误码stringerror=4; //错误说明}33区块(Block)结构messageBlock{34PBFT原理介绍:核心算法(也叫做3-phasecommit)client把一个request广播到所有的replica,确保primary收到请求<PRE-PREPARE>Primary为这个request分配一个顺序号并广播到其他replica;那些replica检查消息的有效性,同意那个顺序号且确认了message和view;如果replica有了m和有效的pre-pare,就进行下一步<PREPARE>每个replica发送一个PREPARE消息给其他的replica,所有收到2f个prepare的replica进入commit<COMMIT>每个replica广播commit消息,一个replica收到2f个commit消息后,就执行(Execute)序号小于n的所有request<REPLY>replica直接返回结果给client,client等待f+1个相同的结果。周期性地,replica会做checkpoint来清理log在内存中的prepared/committedmessageReplica通过超时机制来监控primary的状态,并适时触发viewchangeprotocol来选举新的primary。v:viewnumber;n:sequencenumber;D(m):

Digestofrequestmessagem;代码实现:/openchain/consensus/obcpbft/pbft-core.go;其中:innerStack=innerCPI34PBFT原理介绍:核心算法(也叫做3-phasec35账链代码(Chaincode)OBC中的智能合约,是通过账链代码(Chaincode)来实现。业务逻辑(Logic)=账链代码(Chaincode)=智能合约(Smartcontract)它嵌在交易中,所有验证节点在确认交易时都必须执行它。执行环境是一个定制化的安全的“沙箱”(Docker)目前支持Go,将来支持Java,Node.js35账链代码(Chaincode)OBC中的智能合约,是通过36账链代码相关概念账链代码的分类:公开的账链代码:通过公开的交易来部署的账链代码,这些代码能被网络中任意成员调用。机密的账链代码:通过机密的交易来部署的账链代码,这些代码只能被网络中指定的做验证的成员调用。访问受控的账链代码:通过内置令牌的机密交易来部署的账链代码,这些代码能被网络中持有对应令牌的成员调用(即使这些成员不是校验者)。账链代码的操作类型:部署账链代码:通过交易部署新的账链代码。调用账链代码:通过交易调用已经部署的账链代码,也可以在账链代码中调用其他的账链代码。调用操作可以修改账链代码中的变量信息。查询账链代码:通过交易查询已经部署的账链代码,也可以在账链代码中查询其他账链代码。查询操作不能修改账链代码中的变量信息。账链代码的数据存储账链代码中需要持久化的状态(State),可以存储在世界状态(WorldState)中。36账链代码相关概念账链代码的分类:37VM&ChaincodetypeVMinterface{build(ctxtcontext.Context,idstring,args[]string,env[]string,attachstdinbool,attachstdoutbool,readerio.Reader)error //建立chaincodeimagestart(ctxtcontext.Context,idstring,args[]string,env[]string,attachstdinbool,attachstdoutbool)error //启动chaincodestop(ctxtcontext.Context,idstring,timeoutuint,dontkillbool,dontremovebool)error //停止chaincode}typeChaincodeinterface{Invoke(stub*ChaincodeStub,functionstring,args[]string)(error) //调用chaincodeQuery(stub*ChaincodeStub,functionstring,args[]string)([]byte,error) //查询chaincode}messageChaincodeMessage{enumType{UNDEFINED=0;REGISTER=1;REGISTERED=2;INIT=3;READY=4;TRANSACTION=5;COMPLETED=6;ERROR=7;GET_STATE=8;PUT_STATE=9;DEL_STATE=10;INVOKE_CHAINCODE=11;INVOKE_QUERY=12;RESPONSE=13;QUERY=14;QUERY_COMPLETED=15;QUERY_ERROR=16;RANGE_QUERY_STATE=17;}Typetype=1; //消息类型tobuf.Timestamptimestamp=2;bytespayload=3; //消息体stringuuid=4; //消息ID}首先,ValidatingPeer在执行Deploy交易时,OBC框架会自动创建VM(Docker),为其加载(build)账链代码(Chaincode),根据情况启动(start)或停止(stop)账链代码接着,Chaincodeshim会与ValidatingPeer建立反向连接,接收ChaincodeMessage指令37VM&ChaincodetypeVMinterf38Chaincode操作38Chaincode操作39State操作messagePutStateInfo{ //存数据stringkey=1;bytesvalue=2;}messageRangeQueryState{ //批量取数据stringstartKey=1; //开始key(含),字母顺序stringendKey=2; //结束key(含),字母顺序}messageRangeQueryStateResponse{repeatedRangeQueryStateKeyValuekeysAndValues=1;boolhasMore=2; //是否还有后续数据stringID=3;}messageRangeQueryStateKeyValue{stringkey=1; //keybytesvalue=2; //value}messageRangeQueryStateNext{ //分批取回stringID=1;}messageRangeQueryStateClose{ //结束stringID=1;}39State操作messagePutStateInfo40账链代码示例(Go)账户A和B之间相互转账主函数(源代码链接:G)//Runcallbackrepresentingtheinvocationofachaincode

//ThischaincodewillmanagetwoaccountsAandBandwilltransferXunitsfrom//AtoBuponinvoke

func(t*SimpleChaincode)Run(stub*shim.ChaincodeStub,functionstring,args[]string)([]byte,error){

//Handledifferentfunctions

iffunction==“init”{

//初始化

returnt.init(stub,args)

}elseiffunction==“invoke”{

//调用账链代码,从账户A转X元到账户

returnt.invoke(stub,args)

}elseiffunction=="delete"{

//Deletesanentityfromitsstate

returnt.delete(stub,args)

}

returnnil,errors.New("Receivedunknownfunctioninvocation")

}40账链代码示例(Go)账户A和B之间相互转账//Run41账链代码示例(Go)初始化函数:func(t*SimpleChaincode)init(stub*shim.ChaincodeStub,args[]string)([]byte,error){

varA,Bstring//账户地址

varAval,Bvalint//账户金额

varerrerror

...

//初始化

A=args[0]//获取账户A地址

Aval,err=strconv.Atoi(args[1])

//获取账户A初始余额

iferr!=nil{

returnnil,errors.New(“Expectingintegervalueforassetholding”)

}

B=args[2]

...fmt.Printf(“Aval=%d,Bval=%d\n”,Aval,Bval)

//将变量信息写入账本中err=stub.PutState(A,[]byte(strconv.Itoa(Aval)))

iferr!=nil{

returnnil,err

}

err=stub.PutState(B,[]byte(strconv.Itoa(Bval)))

iferr!=nil{

returnnil,err

}

returnnil,nil

}41账链代码示例(Go)初始化函数:func(t*Sim42账链代码示例(Go)转账函数://该交易从账户A中转账X元到账户B

func(t*SimpleChaincode)invoke(stub*shim.ChaincodeStub,args[]string)([]byte,error){

varA,Bstring//账户地址

varAval,Bvalint//账户余额

varXint//转账金额

varerrerror

...

A=args[0]

B=args[1]

//从账本中获取状态/变量信息

Avalbytes,err:=stub.GetState(A)//账户A的当前余额

iferr!=nil{

returnnil,errors.New(“Failedtogetstate”)

}

ifAvalbytes==nil{

returnnil,errors.New(“Entitynotfound”)

}

Aval,_=strconv.Atoi(string(Avalbytes))//讲账户A的当前余额转换为数值

Bvalbytes,err:=stub.GetState(B)

...Bval,_=strconv.Atoi(string(Bvalbytes))

待续42账链代码示例(Go)转账函数://该交易从账户A中转账43账链代码示例(Go)转账函数(续)//该交易从账户A中转账X元到账户B

//执行转账操作

X,err=strconv.Atoi(args[2])

Aval=Aval-X

Bval=Bval+X

fmt.Printf(“Aval=%d,Bval=%d\n”,Aval,Bval)

//将执行后的结果写入账本中

err=stub.PutState(A,[]byte(strconv.Itoa(Aval)))

iferr!=nil{

returnnil,err

}

err=stub.PutState(B,[]byte(strconv.Itoa(Bval)))

iferr!=nil{

returnnil,err

}

returnnil,nil

}43账链代码示例(Go)转账函数(续)//该交易从账户A中区块链技术概述

2017年五月44区块链技术概述

2017年五月112区块链技术介绍

OBC组网与智能合约3智能合约的开发与示例4512区块链技术介绍OBC组网与智能合约3智能合约的开发46”继互联网后的又一大变革时代到来”、“互联网金融的终极形式”、“价值互联网的开端”、“RecordofThings记录一切”……

区块链在短短时间内获得了巨大的涟漪效应,IBM在2016年2月开放了OpenBlockChain技术并贡献给了Linux社区,引起了业界巨大轰动。那么区块链到底是怎样的一项颠覆性技术?其特点是什么?IBM区块链平台的特点是什么?未来会如何演变?区块链应用与已有应用的关系是什么?本片将对这些问题逐一解链并进行探讨。序3”继互联网后的又一大变革时代到来”、“互联网金融的终极形式47区块链介绍区块链是一种共享账本技术,商业网络中的任何参与方都可以查看交易系统记录(账本)什么是区块链?4区块链介绍区块链是一种共享账本技术,商业网络中的任何参与48区块链是支撑比特币的底层关键技术区块链技术的分类?公有链Pow/Pos/DPos联盟链OBC/Etherenumpbft共识私有链5区块链是支撑比特币的底层关键技术区块链技术的分类?公有链联49

是不受监管的,抗审查的影子货币区块链确保“类现金”的货币流通唯一的,

不可篡改确定的是区块链首个应用区块链

不是区块链是支撑比特币的底层关键技术什么是区块链?6是不受监管的,抗审查的50更进一步——什么是(企业级)区块链智能合约隐私保护共享账本共识保证共享账本适当的可见性;保证交易是真实和可验证的交易条款和交易状态内嵌在区块链系统中,驱动交易执行所有参与者一致同意才意味着交易在网络中通过验证跨商业网络共享的,不可更改的,分布式交易记录系统更广泛的参与,更低的成本,更高的效率什么是区块链? 区块链是一种分布式多节点“共识”实现技术,通过区块链可以完整、“不可篡改”地记录价值转移(交易)的全过程。区块链的形成按照时间先后顺序进行连接,每一个参与共识形成的节点都有一份区块链信息的完整副本。7更进一步——什么是(企业级)区块链智能合约隐私保护共享账本51比特币帐本什么是区块链?8比特币帐本什么是区块链?52OBC帐本什么是区块链?9OBC帐本什么是区块链?53共享账本记录商业网络中的所有交易在参与者之间共享参与者通过同步获取自己的备份授权许可的,参与者只能看到适当的交易记录信息共享的记录系统什么是区块链?10共享账本记录商业网络中的所有交易什么是区块链?54智能合约合约中的商业规则内嵌在区块链系统中,在交易时被执行可验证的、被签署的编码在编程语言中案例: –在公司债权发生转移时执行定义的合同条款什么是区块链?11智能合约合约中的商业规则内嵌在区块链系统中,在交易时被执55隐私保护账本是共享的,但是参与者要求其具有隐私保护参与者需要: –交易信息需要保密 –身份不和交易绑定交易必须是真实的密码学是这些步骤的核心什么是区块链?12隐私保护账本是共享的,但是参与者要求其具有隐私保护什么是56共识共识是交易验证与确认的过程当参与方是匿名时 –交易确认代价高昂 –的挖矿过程为匿名者提供验证,但需巨大计算成本(工作证明)当参与者都是已知且可信时 –交易确认的成本降低多种替代方案 –权益证明,欺诈性交易产生时需要验证(如债券交易) –多个签名(如5个参与者中3人的同意)企业级区块链需要“可插拔的”共识什么是区块链?13共识共识是交易验证与确认的过程什么是区块链?57行业采用区块链的好处减少成本及复杂度提高可发现性可信的记录保存共享的可信流程为什么与业务相关?14行业采用区块链的好处减少成本及复杂度可信的记录保存为什么58区块链——并非万能不适用场景1.高性能(毫秒级)交易2.小型组织(无商业网络)3.寻找数据库的替代方案4.寻找消息传递的解决方案5.寻找交易处理的替代方案为什么与业务相关?15区块链——并非万能不适用场景为什么与业务相关?59区块链技术平台对比16区块链技术平台对比第一,跨组织协作。在区块链信任机制中,所有成员参与对信任价值的监督、控制和审计,对地址、链、公钥、私钥、摘要等几乎所有数据记录的要素,进行全生命周期的协作密码保护,而且是全球、随机的。一个联盟链,相当于一台全球超级密码、交换机、密钥签名服务器和密码本的总和,信用连续。第二,永不宕机。因为成员的动态运算机制,所有成员节点,进行实时同步,无法实现局部控制,全球节点的随机分布和相应在运算时钟和动态时间戳的控制下,永远不停机,信用连续。第三,成员监管。区块链强信任的技术特点,来自其节点成员无中心的安全职责,成员局部的协作综合实现了体系安全的监管全部,融监管与过程之中,实现了系统学中安全的正反馈机制,在目前的计算条件下,尚无法通过跨越动态时间戳的可靠超越,信用连续。为何要用区块链—强信任机制解决中心化系统中信用不连续问题60第一,跨组织协作。在区块链信任机制中,所有成员参与对信任价值61区块链运营对比18区块链运营对比62IBM开放区块链与Linux社区——开放持续投入代码运行环境账簿数据结构模块化(可插式)共识框架模块化(可插式)身份服务P2P网络技术升级包SDK(API)共识算法库(插入模块)成员管理策略区块链网关开发工具管理控制台区块链行业应用基础部分共享账簿(SharedLedger)增值部分(模块、工具、封装)应用部分项目核心范围内核心APIIBM社区贡献Hyperledger项目IBM在Blockchain上持续投入,致力于行业应用是Linux开源社区Hyperledger的主要贡献方,致力于协同其他公司共同研发,公布OpenLedger标准(规格说明书),创建基于Linux的开源共享账簿(比Bitcoin更适合行业应用)推动区块链技术在行业中的应用(行业区块链)Blockchain已经作为一种实验性(网络)服务在Bluemix上推出基于LinuxOne的开放计算平台对Blockchain的支持……IBM区块链19IBM开放区块链与Linux社区——开放持续投入代码运行63IBM开放区块链:贡献给Linux社区的架构及代码Community+CodeMEMBERSHIP包括OBC参与方的身份识别,隐私,可审计性。BLOCKCHAIN|TRANSACTIONS经过共识过程进行分布式交易账本处理。CHAIN-CODE“智能合约”,提供在区块链上运行业务逻辑的能力。APIs,SDKs,CLI为开发人员提供以可编程方式控制区块链网络的能力。20IBM开放区块链:贡献给Linux社区的架构及代码C64IBM开放区块链名词解释Transaction交易。账页中的一笔记录,用于确认一个事实,执行一段代码(chaincode)Ledger账薄(账册)。由首尾相连的一组区块(block,有时也称为一个账页)构成,记录交易和区块世界的状态WorldState区块世界的状态。由一组变量组成,指明交易的执行结果Chaincode交易中记录的一段代码,其执行结果会改变区块世界的状态(Worldstate)ValidatingPeer验证节点。OBC区域链网络中的全功能节点,负责验证交易、记录账薄、达成共识Non-validatingPeer非验证节点。OBC区域链网络中的半功能节点,负责验证交易,但不执行交易,也不记录账薄,通常用于代理ValidatingPeer,提供RESTservice转发功能Permissioned许可。只接受成员接入,不接受匿名接入Privacy隐私。OBC中任何成员都能发起交易,但只有相关方才能知道,其它无关节点无法从交易回溯到交易方Confidentiality保密。OBC中只有交易相关方可以看到交易内容,其它无关节点只能验证交易的真实性Auditability审计。如果把审计方加入OBC交易,则它可以看到交易,从而审计是否合规21IBM开放区块链名词解释Transaction65帐本结构示意22帐本结构示意66OBC角色划分与工作内容成员服务(MemberServices)注册(Registration)身份管理(IdentityManagement)可审计(Auditibility)验证节点(ValidatingPeer)进行共识(Consensus)运行交易(Transaction)维护账本(Ledger)发出事件(Event)非验证节点(Non-ValidatingPeer)维护节点间的安全上下文(SecureContext)代表客户向成员服务或验证节点请求服务向应用交付事件(Event)处理API请求应用(Application)认证客户把客户映射到安全上下文(SecureContext)调用RESTAPI用户(Client)登录与交易23OBC角色划分与工作内容成员服务(MemberSer67网络拓扑结构整个OBC网络中含有两种节点,验证节点(ValidatingPeer)和非验证节点(Non-ValidationPeer)。前者是全功能节点,构成全连通拓扑结构,后者是代理节点,通常挂接在相邻验证节点上应用程序可以连接在验证节点,也可以连接在非验证节点在OBC网络中需要有一个密钥管理结节,考虑到PBFT算法的3f+1共识机制,典型的容错(允许一个节点故障)环境需要有4个ValidationPeer节点成员服务MemberServices用户Client用户Client24网络拓扑结构整个OBC网络中含有两种节点,验证节点(Va68单节点和多节点网络若OBC网络中只有一个VP节点(极端简化),则应用程序可以直接与该节点连接,执行其上的Chaincode代码,这时VP节点只需要记账,不需要共识若OBC网络中有多个VP节点,则应用程序可以通过NVP节点(NVP与应用程序可以一对多)间接访问VP(NVP与VP之间多对一),这时VP节点需要验证交易、运行代码、记录账薄、达成共识25单节点和多节点网络若OBC网络中只有一个VP节点(极端简69商业票据的Blockchain应用-星形架构26商业票据的Blockchain应用-星形架构70IBM开放区块链参考架构概览(模块与服务)27IBM开放区块链参考架构概览(模块与服务)71成员管理(Membership)成员管理提供会员注册、身份保护、内容保密、交易审计功能OBC所有成员首先,通过RegistrationAuthority(RA)注册获得许可然后,通过EnrollmentCertificateAuthority(ECA)获得注册安全证书(ECert),第三步(可选),通过TransactionCertificateAuthority(TCA)获得交易安全证书(TCert)使用二者之一签名发起交易请求与公有链不同(所有参与方不需要身份认证,可直接进行交易)28成员管理(Membership)成员管理提供会员注册、身72成员管理模型29成员管理模型73业务网络动态组建示例:第一个节点OBC节点相关配置位于/openblockchain/obc-peer/openchain.yaml在配置文件的peer小节中,validator_enabled为true表示节点是验证节点,否则是非验证节点discovery_rootnode在启动时使用,当这个参数被设置时节点会使用discoveryprotocal查找其他节点。这个参数是网络上另外一个节点的IP,这个节点作为网络上所有节点进行discover的起始点。rest_enabled表明节点是否接受REST请求,对于生产环境一般把验证节点设置为false,只让非验证节点接受来自应用的REST请求第一个节点验证节点根节点IP:validator_enabled:truediscovery_rootnode:rest_enabled:false30业务网络动态组建示例:第一个节点OBC节点相关配置位于g74业务网络动态组建示例:第二个节点第二个节点向根节点发送消息DISC_HELLO,含有自己区块链的高度blockNumber和PeerEndpoint。如果根节点应答的DISC_HELLO消息中的区块链高度高于第二个节点当前持有的,第二个节点立刻发起synchronizationprotocol以同步账本的最新状态此后第二个节点每5秒钟向所有的已知节点(目前只知道第一个节点)发送DISC_GET_PEERS消息获得加入网络的其它节点第一个节点收到DISC_GET_PEERS消息后,回复包含了PeerEndpoint数组的DISC_PEERS消息IP:validator_enabled:truediscovery_rootnode:rest_enabled:falseIP:validator_enabled:truediscovery_rootnode:discovery_period:5srest_enabled:false第二个节点验证节点第一个节点验证节点根节点31业务网络动态组建示例:第二个节点第二个节点向根节点发送消75业务网络动态组建示例:第三个节点第三个节点向根节点发送消息DISC_HELLO,含有自己区块链的高度blockNumber和PeerEndpoint。如果根节点应答的DISC_HELLO消息中的区块链高度高于第三个节点当前持有的,第三个节点立刻发起synchronizationprotocol以同步账本的最新状态,虽然不执行交易,但是非验证节点维护一个最新的账本副本此后第三个节点每60秒钟向所有的已知节点(第一、二个节点)发送DISC_GET_PEERS消息获得加入网络的其它节点(考虑到发送间隔,第二个节点应该先于第三个节点发现对方)第一、二个节点收到DISC_GET_PEERS消息后,回复包含了PeerEndpoint数组的DISC_PEERS消息IP:validator_enabled:truediscovery_rootnode:rest_enabled:falseIP:validator_enabled:falsediscovery_rootnode:discovery_period:60srest_enabled:true第二个节点验证节点第一个节点验证节点IP:validator_enabled:truediscovery_rootnode:discovery_period:5srest_enabled:false第三个节点非验证节点32业务网络动态组建示例:第三个节点第三个节点向根节点发送消76区块(Block)结构messageBlock{version=1;tobuf.Timestamptimestamp=2;bytestransactionsHash=3;bytesstateHash=4;bytespreviousBlockHash=5;bytesconsensusMetadata=6;NonHashDatanonHashData=7;}messageBlockTransactions{repeatedTransactiontransactions=1;}messageNonHashData{tobuf.TimestamplocalLedgerCommitTimestamp=1;repeatedTransactionResulttransactionResults=2;}messageTransactionResult{stringuuid=1; //交易IDbytesresult=2; //交易执行结果uint32errorCode=3; //错误码stringerror=4; //错误说明}33区块(Block)结构messageBlock{77PBFT原理介绍:核心算法(也叫做3-phasecommit)client把一个request广播到所有的replica,确保primary收到请求<PRE-PREPARE>Primary为这个request分配一个顺序号并广播到其他replica;那些replica检查消息的有效性,同意那个顺序号且确认了message和view;如果replica有了m和有效的pre-pare,就进行下一步<PREPARE>每个replica发送一个PREPARE消息给其他的replica,所有收到2f个prepare的replica进入commit<COMMIT>每个replica广播commit消息,一个replica收到2f个commit消息后,就执行(Execute)序号小于n的所有request<REPLY>replica直接返回结果给client,client等待f+1个相同的结果。周期性地,replica会做checkpoint来清理log在内存中的prepared/committedmessageReplica通过超时机制来监控primary的状态,并适时触发viewchangeprotocol来选举新的primary。v:viewnumber;n:sequencenumber;D(m):

Digestofrequestmessagem;代码实现:/openchain/consensus/obcpbft/pbft-core.go;其中:innerStack=innerCPI34PBFT原理介绍:核心算法(也叫做3-phasec78账链代码(Chaincode)OBC中的智能合约,是通过账链代码(Chaincode)来实现。业务逻辑(Logic)=账链代码(Chaincode)=智能合约(Smartcontract)它嵌在交易中,所有验证节点在确认交易时都必须执行它。执行环境是一个定制化的安全的“沙箱”(Docker)目前支持Go,将来支持Java,Node.js35账链代码(Chaincode)OBC中的智能合约,是通过79账链代码相关概念账链代码的分类:公开的账链代码:通过公开的交易来部署的账链代码,这些代码能被网络中任意成员调用。机密的账链代码:通过机密的交易来部署的账链代码,这些代码只能被网络中指定的做验证的成员调用。访问受控的账链代码:通过内置令牌的机密交易来部署的账链代码,这些代码能被网络中持有对应令牌的成员调用(即使这些成员不是校验者)。账链代码的操作类型:部署账链代码:通过交易部署新的账链代码。调用账链代码:通过交易调用已经部署的账链代码,也可以在账链代码中调用其他的账链代码。调用操作可以修改账链代码中的变量信息。查询账链代码:通过交易查询已经部署的账链代码,也可以在账链代码中查询其他账链代码。查询操作不能修改账链代码中的变量信息。账链代码的数据存储账链代码中需要持久化的状态(State),可以存储在世界状态(WorldState)中。36账链代码相关概念账链代码的分类:80VM&ChaincodetypeVMinterface{build(ctxtcontext.Context,idstring,args[]string,env[]string,attachstdinbool,attachstdoutbool,readerio.Reader)error //建立chaincodeimagestart(ctxtcontext.Context,idstring,args[]string,env[]string,attachstdinbool,attachstdoutbool)error //启动chaincodestop(ctxtcontext.Context,idstring,timeoutuint,dontkillbool,dontremovebool)error //停止chaincode}typeChaincodeinterface{Invoke(stub*ChaincodeStub,functionstring,args[]string)(error) //调用chaincodeQuery(stub*ChaincodeStub,functionstring,args[]string)([]byte,error) //查询chaincode}messageChaincodeMessage{enumType{UNDEFINED=0;REGISTER=1;REGISTERED=2;INIT=3;READY=4;TRANSACTION=5;COMPLETED=6;ERROR=7;GET_STATE=8;PUT_STATE=9;DEL_STATE=10;INVOKE_CHAINCODE=11;INVOKE_QUERY=12;RESPONSE=13;QUERY=14;QUERY_COMPLETED=15;QUERY_ERROR=16;RANGE_QUERY_STATE=17;}Typetype=1; //消息类型tobuf.Timestamptimestamp=2;bytespayload=3; //消息体stringuuid=4; //消息ID}首先,ValidatingPeer在执行Deploy交易时,OBC框架会自动创建VM(Docker),为其加载(build)账链代码(Chaincode),根据情况启动(start)或停止(stop)账链代码接着,Chaincodeshim会与ValidatingPeer建立反向连接,接收ChaincodeMessage指令37VM&ChaincodetypeVMinterf81Chaincode操作38Chaincode操作82State操作messagePutStateInfo{ //存数据stringkey=1;bytesvalue=2;}messageRangeQueryState{ //批量取数据stringstartKey=1; //开始key(含),字母顺序stringendKey=2; //结束key(含),字母顺序}messageRangeQueryStateResponse{repeatedRangeQueryStateKeyValuekeysAndValues=1;boolhasMore=2; //是否还有后续数据stringID=3;}messageRangeQueryStateKeyValue{stringkey=1; //keybytesvalue=2; //value}messageRangeQueryStateNext{ //分批取回stringID=1;}messageRangeQueryStateClose{ //结束stringID=1;}39State操作messagePutStateInfo83账链代码示例(Go)账户A和B之间相互转账主函数(源代码链接:G)//Runcallbackrepresentingtheinvocationofacha

温馨提示

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

最新文档

评论

0/150

提交评论