版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、12 区块链技术介绍 OBC组网与智能合约3 智能合约开发与示例第1页2”继互联网后又一大变革时代到来”、“互联网金融终极形式”、“价值互联网开端”、“Record of Things 统计一切”区块链在短短时间内取得了巨大涟漪效应,IBM在年2月开放了OpenBlockChain技术并贡献给了Linux小区,引发了业界巨大轰动。那么区块链到底是怎样一项颠覆性技术?其特点是什么?IBM区块链平台特点是什么?未来会怎样演变?区块链应用与已经有应用关系是什么?本片将对这些问题逐一解链并进行探讨。序第2页3区块链介绍区块链是一个共享账本技术 ,商业网络中任何参加方都能够查看交易系统统计(账本)什么是
2、区块链?第3页4区块链是支撑比特币底层关键技术区块链技术分类?公有链Pow/Pos/DPos联盟链OBC/Etherenum pbft共识私有链第4页5 是不受监管,抗审查影子货币区块链确保“类现金”货币流通唯一, 不可篡改确定 是区块链首个应用区块链 不是区块链是支撑比特币底层关键技术什么是区块链?第5页6更深入什么是(企业级)区块链智能合约隐私保护共享账本共识确保共享账本适当可见性;确保交易是真实和可验证交易条款和交易状态内嵌在区块链系统中,驱动交易执行全部参加者一致同意才意味着交易在网络中通过验证跨商业网络共享,不可更改,分布式交易统计系统更广泛参加,更低成本,更高效率什么是区块链?区块
3、链是一个分布式多节点“共识”实现技术,经过区块链能够完整、“不可篡改”地统计价值转移(交易)全过程。区块链形成按照时间先后次序进行连接,每一个参加共识形成节点都有一份区块链信息完整副本。第6页7比特币帐本什么是区块链?第7页8OBC帐本什么是区块链?第8页9共享账本统计商业网络中全部交易在参加者之间共享参加者经过同时获取自己备份授权许可,参加者只能看到适当交易统计信息共享统计系统什么是区块链?第9页10智能合约合约中商业规则内嵌在区块链系统中,在交易时被执行可验证、被签署编码在编程语言中案例: 在企业债权发生转移时执行定义协议条款什么是区块链?第10页11隐私保护账本是共享,不过参加者要求其含
4、有隐私保护参加者需要: 交易信息需要保密 身份不和交易绑定交易必须是真实密码学是这些步骤关键什么是区块链?第11页12共识共识是交易验证与确认过程当参加方是匿名时 交易确认代价高昂 挖矿过程为匿名者提供验证,但需巨大计算成本(工作证实)当参加者都是已知且可信时 交易确认成本降低各种替换方案 权益证实, 欺诈性交易产生时需要验证 (如债券交易) 多个署名(如5个参加者中3人同意)企业级区块链需要“可插拔”共识什么是区块链?第12页13行业采取区块链好处降低成本及复杂度提升可发觉性可信统计保留共享可信流程为何与业务相关?第13页14区块链并非万能不适用场景1. 高性能(毫秒级)交易2. 小型组织
5、(无商业网络)3. 寻找数据库替换方案4. 寻找消息传递处理方案5. 寻找交易处理替换方案为何与业务相关?第14页15区块链技术平台对比第15页第一,跨组织协作。在区块链信任机制中,全部组员参加对信任价值监督、控制和审计,对地址、链、公钥、私钥、摘要等几乎全部数据统计要素,进行全生命周期协作密码保护,而且是全球、随机。一个联盟链,相当于一台全球超级密码、交换机、密钥署名服务器和密码本总和, 信用连续。第二,永不宕机。因为组员动态运算机制,全部组员节点,进行实时同时,无法实现局部控制,全球节点随机分布和对应在运算时钟和动态时间戳控制下,永远不停机, 信用连续。第三,组员监管。区块链强信任技术特点
6、,来自其节点组员无中心安全职责,组员局部协作综合实现了体系安全监管全部,融监管与过程之中,实现了系统学中安全正反馈机制,在当前计算条件下,尚无法经过跨越动态时间戳可靠超越, 信用连续。为何要用区块链强信任机制处理中心化系统中信用不连续问题第16页17区块链运行对比第17页18IBM开放区块链与Linux小区开放连续投入代码运行环境账簿数据结构模块化(可插式)共识框架模块化(可插式)身份服务P2P网络技术升级包SDK(API)共识算法库(插入模块)组员管理策略区块链网关开发工具管理控制台区块链行业应用基础部分共享账簿(Shared Ledger)增值部分(模块、工具、封装)应用部分项目关键范围内
7、关键APIIBM小区贡献Hyperledger项目IBM在Blockchain 上连续投入,致力于行业应用是Linux开源小区 Hyperledger主要贡献方,致力于协同其它企业共同研发,公布Open Ledger标准(规格说明书),创建基于Linux开源共享账簿(比Bitcoin更适合行业应用)推进区块链技术在行业中应用(行业区块链)Blockchain已经作为一个试验性(网络)服务在Bluemix上推出基于LinuxOne开放计算平台对Blockchain支持IBM区块链第18页19IBM 开放区块链: 贡献给Linux小区架构及代码Community + CodeMEMBERSHIP包
8、含OBC参加方身份识别,隐私,可审计性。BLOCKCHAIN | TRANSACTIONS经过共识过程进行分布式交易账本处理。CHAIN-CODE“智能合约”, 提供在区块链上运行业务逻辑能力。APIs, SDKs, CLI为开发人员提供以可编程方式控制区块链网络能力。第19页20IBM开放区块链名词解释Transaction交易。账页中一笔统计,用于确认一个事实,执行一段代码(chaincode)Ledger账薄(账册)。由首尾相连一组区块(block,有时也称为一个账页)组成,统计交易和区块世界状态World State区块世界状态。由一组变量组成,指明交易执行结果Chaincode交易中
9、统计一段代码,其执行结果会改变区块世界状态(World state)Validating Peer验证节点。OBC区域链网络中全功效节点,负责验证交易、统计账薄、达成共识Non-validating Peer非验证节点。 OBC区域链网络中半功效节点,负责验证交易,但不执行交易,也不统计账薄,通惯用于代理 Validating Peer,提供REST service转发功效Permissioned许可。只接收组员接入,不接收匿名接入Privacy隐私。OBC中任何组员都能发起交易,但只有相关方才能知道,其它无关节点无法从交易回溯到交易方Confidentiality保密。OBC中只有交易相关方
10、能够看到交易内容,其它无关节点只能验证交易真实性Auditability审计。假如把审计方加入OBC交易,则它能够看到交易,从而审计是否合规第20页21帐本结构示意第21页22OBC角色划分与工作内容组员服务(Member Services)注册(Registration)身份管理(Identity Management)可审计(Auditibility)验证节点(Validating Peer)进行共识(Consensus)运行交易(Transaction)维护账本(Ledger)发出事件(Event)非验证节点(Non-Validating Peer)维护节点间安全上下文(Secure C
11、ontext)代表客户向组员服务或验证节点请求服务向应用交付事件(Event)处理API请求应用(Application)认证客户把客户映射到安全上下文(Secure Context)调用REST API用户(Client)登录与交易第22页23网络拓扑结构整个OBC网络中含有两种节点,验证节点(Validating Peer)和非验证节点(Non-Validation Peer)。前者是全功效节点,组成全连通拓扑结构,后者是代理节点,通常挂接在相邻验证节点上应用程序能够连接在验证节点,也能够连接在非验证节点在OBC网络中需要有一个密钥管理结节,考虑到PBFT算法3f+1共识机制,经典容错(允
12、许一个节点故障)环境需要有4个Validation Peer节点组员服务Member Services用户Client用户Client第23页24单节点和多节点网络若OBC网络中只有一个VP节点(极端简化),则应用程序能够直接与该节点连接,执行其上Chaincode代码,这时VP节点只需要记账,不需要共识若OBC网络中有多个VP节点,则应用程序能够经过NVP节点(NVP与应用程序能够一对多)间接访问VP(NVP与VP之间多对一),这时VP节点需要验证交易、运行代码、统计账薄、达成共识第24页25商业票据Blockchain应用-星形架构第25页26IBM开放区块链参考架构概览(模块与服务)第2
13、6页27组员管理(Membership)组员管理提供会员注册、身份保护、内容保密、交易审计功效OBC全部组员首先,经过Registration Authority(RA)注册取得许可然后,经过Enrollment Certificate Authority(ECA)取得注册安全证书(ECert),第三步(可选),经过Transaction Certificate Authority(TCA)取得交易安全证书(TCert)使用二者之一署名发起交易请求与公有链不一样(全部参加方不需要身份认证,可直接进行交易)第27页28组员管理模型第28页29业务网络动态组建示例:第一个节点OBC节点相关配置位于
14、/openblockchain/obc-peer/openchain.yaml在配置文件peer小节中,validator_enabled为true表示节点是验证节点,不然是非验证节点discovery_rootnode在开启时使用,当这个参数被设置时节点会使用discovery protocal查找其它节点。这个参数是网络上另外一个节点IP,这个节点作为网络上全部节点进行discover起始点。rest_enabled表明节点是否接收REST请求,对于生产环境普通把验证节点设置为false,只让非验证节点接收来自应用REST请求第一个节点验证节点根节点IP: validator_enable
15、d : truediscovery_rootnode: rest_enabled: false第29页30业务网络动态组建示例:第二个节点第二个节点向根节点发送消息DISC_HELLO,含有自己区块链高度blockNumber和PeerEndpoint。假如根节点应答DISC_HELLO消息中区块链高度高于第二个节点当前持有,第二个节点立刻发起synchronization protocol以同时账本最新状态今后第二个节点每5秒钟向全部已知节点(当前只知道第一个节点)发送DISC_GET_PEERS消息取得加入网络其它节点第一个节点收到DISC_GET_PEERS消息后,回复包含了PeerEn
16、dpoint 数组DISC_PEERS消息IP: validator_enabled : truediscovery_rootnode: rest_enabled: falseIP: validator_enabled : truediscovery_rootnode: discovery_period: 5srest_enabled: false第二个节点验证节点第一个节点验证节点根节点第30页31业务网络动态组建示例:第三个节点第三个节点向根节点发送消息DISC_HELLO,含有自己区块链高度blockNumber和PeerEndpoint。假如根节点应答DISC_HELLO消息中区块链高
17、度高于第三个节点当前持有,第三个节点立刻发起synchronization protocol以同时账本最新状态,即使不执行交易,不过非验证节点维护一个最新账本副本今后第三个节点每60秒钟向全部已知节点(第一、二个节点)发送DISC_GET_PEERS消息取得加入网络其它节点(考虑到发送间隔,第二个节点应该先于第三个节点发觉对方)第一、二个节点收到DISC_GET_PEERS消息后,回复包含了PeerEndpoint 数组DISC_PEERS消息IP: validator_enabled : truediscovery_rootnode:rest_enabled: false IP: valid
18、ator_enabled : falsediscovery_rootnode: discovery_period: 60srest_enabled: true第二个节点验证节点第一个节点验证节点IP: validator_enabled : truediscovery_rootnode: discovery_period: 5srest_enabled: false第三个节点非验证节点第31页32区块(Block)结构message Block version = 1; 谷歌.protobuf.Timestamp timestamp = 2; bytes transactionsHash =
19、3; bytes stateHash = 4; bytes previousBlockHash = 5; bytes consensusMetadata = 6; NonHashData nonHashData = 7;message BlockTransactions repeated Transaction transactions = 1;message NonHashData 谷歌.protobuf.Timestamp localLedgerCommitTimestamp = 1; repeated TransactionResult transactionResults = 2;me
20、ssage TransactionResult string uuid = 1;/ 交易 ID bytes result = 2;/ 交易执行结果 uint32 errorCode = 3;/ 错误码 string error = 4;/ 错误说明第32页33PBFT原理介绍: 关键算法 (也叫做3-phase commit)client把一个request广播到全部replica, 确保primary收到请求Primary为这个request分配一个次序号并广播到其它replica;那些replica检验消息有效性,同意那个次序号且确认了message和view;假如replica有了m和有
21、效pre-pare, 就进行下一步每个replica发送一个PREPARE消息给其它replica,全部收到2f个preparereplica进入commit每个replica广播commit消息,一个replica收到2f个commit消息后,就执行(Execute)序号小于n全部requestreplica直接返回结果给client, client等候f+1个相同结果。周期性地,replica会做checkpoint来清理log在内存中prepared/committed messageReplica经过超时机制来监控primary状态,并适时触发view change protocol来
22、选举新primary。v: view number; n: sequence number; D(m): Digest of request message m;代码实现: /openchain/consensus/obcpbft/pbft-core.go ; 其中:innerStack=innerCPI第33页34账链代码(Chaincode)OBC中智能合约,是经过账链代码(Chaincode)来实现。业务逻辑(Logic) = 账链代码(Chaincode) = 智能合约(Smart contract)它嵌在交易中,全部验证节点在确认交易时都必须执行它。执行环境是一个定制化安全“沙箱”(
23、Docker)当前支持Go, 未来支持Java, Node.js第34页35账链代码相关概念账链代码分类:公开账链代码:经过公开交易来布署账链代码,这些代码能被网络中任意组员调用。机密账链代码:经过机密交易来布署账链代码,这些代码只能被网络中指定做验证组员调用。访问受控账链代码:经过内置令牌机密交易来布署账链代码,这些代码能被网络中持有对应令牌组员调用(即使这些组员不是校验者)。账链代码操作类型:布署账链代码:经过交易布署新账链代码。调用账链代码:经过交易调用已经布署账链代码,也能够在账链代码中调用其它账链代码。调用操作能够修改账链代码中变量信息。查询账链代码:经过交易查询已经布署账链代码,也
24、能够在账链代码中查询其它账链代码。查询操作不能修改账链代码中变量信息。账链代码数据存放 账链代码中需要持久化状态(State),能够存放在世界状态(World State)中。第35页36VM & Chaincodetype VM interface build(ctxt context.Context, id string, args string, env string, attachstdin bool, attachstdout bool, reader io.Reader) error/ 建立 chaincode image start(ctxt context.Context, i
25、d string, args string, env string, attachstdin bool, attachstdout bool) error/ 开启 chaincode stop(ctxt context.Context, id string, timeout uint, dontkill bool, dontremove bool) error/ 停顿 chaincodetype Chaincode interface Invoke(stub *ChaincodeStub, function string, args string) (error)/ 调用 chaincode
26、Query(stub *ChaincodeStub, function string, args string) (byte, error)/ 查询 chaincodemessage ChaincodeMessage enum Type 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; INV
27、OKE_QUERY = 12; RESPONSE = 13; QUERY = 14; QUERY_COMPLETED = 15; QUERY_ERROR = 16; RANGE_QUERY_STATE = 17; Type type = 1;/ 消息类型 谷歌.protobuf.Timestamp timestamp = 2; bytes payload = 3;/ 消息体 string uuid = 4;/ 消息 ID首先,Validating Peer在执行Deploy交易时,OBC框架会自动创建VM(Docker),为其加载(build)账链代码( Chaincode),依据情况开启(s
28、tart)或停顿(stop)账链代码接着,Chaincode shim会与Validating Peer建立反向连接,接收ChaincodeMessage指令第36页37Chaincode操作第37页38State操作message PutStateInfo / 存数据 string key = 1; bytes value = 2;message RangeQueryState / 批量取数据 string startKey = 1;/ 开始key(含),字母次序 string endKey = 2;/ 结束key(含),字母次序message RangeQueryStateResponse
29、 repeated RangeQueryStateKeyValue keysAndValues = 1; bool hasMore = 2;/ 是否还有后续数据 string ID = 3;message RangeQueryStateKeyValue string key = 1;/ key bytes value = 2;/ valuemessage RangeQueryStateNext / 分批取回 string ID = 1;message RangeQueryStateClose / 结束 string ID = 1;第38页39账链代码示例(Go)账户A和B之间相互转账主函数(源
30、代码链接:G)/ Run callback representing the invocation of a chaincode/ This chaincode will manage two accounts A and B and will transfer X units from / A to B upon invokefunc (t *SimpleChaincode) Run(stub *shim.ChaincodeStub, function string, args string) (byte, error) / Handle different functions if fun
31、ction = “init” / 初始化 return t.init(stub, args) else if function = “invoke” / 调用账链代码,从账户A转X元到账户 return t.invoke(stub, args) else if function = delete / Deletes an entity from its state return t.delete(stub, args) return nil, errors.New(Received unknown function invocation)第39页40账链代码示例(Go)初始化函数:func (
32、t *SimpleChaincode) init(stub *shim.ChaincodeStub, args string) (byte, error) var A, B string / 账户地址 var Aval, Bval int / 账户金额 var err error . . . / 初始化 A = args0 / 获取账户A地址 Aval, err = strconv.Atoi(args1) / 获取账户A初始余额 if err != nil return nil, errors.New(“Expecting integer value for asset holding”) B = args2 . . . fmt.Printf(“Aval = %d, Bval = %dn”, Aval, Bval) / 将变量信息写入
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 3-1 密度 第一课时
- 防错法课件培训资料
- 福建龙岩一中2024年高三3月联合调研考试数学试题试卷
- 2024年山南客运资格证模拟考试
- 2024年安庆客运资格证考试试题模拟
- 2024年玉树客运资格证考试题库下载
- 2024年大兴安岭客运从业资格证摸拟题
- 2016 弗雷德.霍洛基金会项目资金合作伙伴财务管理指南(20份单面)
- 吉首大学《BIM应用概论》2021-2022学年第一学期期末试卷
- 吉林艺术学院《西方音乐史与欣赏Ⅰ》2021-2022学年第一学期期末试卷
- 外包施工单位入厂安全培训(通用)
- 车牌识别一体机安装调试教程
- 客户接触点管理课件
- Python语言学习通超星课后章节答案期末考试题库2023年
- 海报设计教学课件完整版讲课讲稿
- 年产30万吨碳酸钙粉建设项目可行性研究报告
- 0-6岁儿童健康管理服务规范(第三版)
- 公务员晋升职级现实表现材料三篇
- 药物警戒内审检查记录表
- 一元一次不等式复习(公开课)
- 中国书法-英文 chinese calligraphy
评论
0/150
提交评论