码迷,mamicode.com
首页 > 编程语言 > 详细

深度探索区块链/支持多种语言的智能合约(9)

时间:2018-08-26 18:34:47      阅读:321      评论:0      收藏:0      [点我收藏+]

标签:示意图   配置信息   上下文   还需要   源码   查询   嵌套   com   type   

系统链码包括:

LSCC(lifecycle System Chaincode)生命周期管理系统链码 主要功能: 管理部署在背书节点上的链码,不是全生命周期的管理。 CSCC(Configuration System Chaincode)配置管理系统链码 主要功能: 管理记账节点上的配置信息 QSCC(Query System Chaincode)查询管理系统链码 主要功能: 提供查询记账节点的账本数据,包括区块和交易数据,区块链信息等 ESCC(Endorsement System chaincode)交易背书系统链码 主要功能: 对交易进行结果的结构转换和签名背书 VSCC(Validation System Chaincode)交易验证系统链码 主要功能: 记账前对区块和交易进行验证

其中ESCC和VSCC有默认的实现,也可根据功能需求实现新的ESCC和VSCC

一。智能合约概述与链码的生命周期管理

技术分享图片

【1】链码源码:但需通过ChaincodeDeploymentSpec/CDS定义,CDS依据代码及其他一些属性(名称/版本等)来定义链码。

【2】实例化策略:(可选)

【3】链码签名

链码的签名实现以下3个目标

【1】表明是谁创建的链码

【2】允许验证链码包里的内容

【3】可以检测链码包是否被篡改

链码的实例化策略会验证链码所有者的身份,进而验证其提交的链码源码/实例化策略是否有效。

(一)链码的创建--两种方式

【1】多个所有者:

需要多个所有者对链码签名,先创建一个链码包SignedChaincode DeploymentSpec,然后发送给多个所有者进行签名

【2】单一所有者:只有安装链码的节点对链码签名

//创建带签名的链码包
peer chaincode package -n mycc -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_examples02 -v 0 -s -S -i "AND(‘OrgA.admin‘)" ccpack.out

说明:

-s :生成一个有多个所有者签名的链码,而不是简单地创建一个不带签名的ChaincodeDeploymentSpec。若指定了-s选项,当其他所有者要签名时,还需要指定-S选项。否则创建的链码包SignedChaincodeDeploymentSpec只会在ChaincodeDeploymentSpec基础上添加实例化策略,不会包含所有者的签名。

-S:可以使MSP(core.yaml中localMspid属性值定义的)对程序包进行签名。-S是可选的,若创建了一个没有签名的包,则其他的所有者不能通过对其使用signpackage命令签名。

-i:为链码指定实例化策略。它指明哪些身份可以对链码实例化。在上面例子中。只允许OrgA管理员进行链码实例化。若未提供任何策略,系统将采用默认策略。该策略只允许Peer节点MSP的管理员实例化链码。

(二)链码的签名

链码在创建时签名了才可以由其他的所有者校验签名和继续签名,签名过程可以是线下操作。

链码SignedChaincodeDeploymentSpec是封装了ChaincodeDeploymentSpec的结构,主要是增加了实例化策略和所有者的签名。定义如下:

type SignedChaincodeDeploymentSpec struct{

//ChaincodeDeploymentSpec序列号后的字节数组

技术分享图片

技术分享图片

技术分享图片

易能够满足背书策略就可以。

9.2.3 背书节点接收应用程序的请求处理

应用程序通过gRPC的接口发起请求,命令如下:

ProcessProposal(ctx context.Context,in *SignedProposal,opts ...grpc.CallOption)
(*ProposalResponse,error)

背书节点接收到请求后,检查:是否有权限提交交易,是否是重复交易等。真正的执行过程是在链码中完成的,ESCC最后对执行的结果进行签名背书。

中间有任何异常都会终止后续的执行,执行结果返回给应用程序。

链码调用时序图如图所示;

技术分享图片

技术分享图片

技术分享图片

交易模拟器的运行示意图如下图所示:

技术分享图片

说明:

图中普通链码、系统链码和背书节点建立了不同的连接。

普通链码建立的是gRPC连接,系统链码建立的是Golang的通道连接。同一个连接上又分别有2个链码调用在操作数据。

背书节点侧的有限状态机记录了不同交易号调用时的上下文信息,根据交易号从交易上下文映射表中获取到交易所对应的上下文信息,进而利用交易模拟器生成模拟执行的结果。

技术分享图片

技术分享图片

技术分享图片

技术分享图片

存在同名的镜像,就不会重复构建。只要组织和链码名称、版本都相同,则这种情况就很容易出现。

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

9.3.2配置管理系统链码

配置管理系统链码(CSCC)全称是Configuration System Chaincode,主要功能是管理记账节点上的配置信息。

1。记账节点加入链

记账节点加入链的Proposal请求的ChaincodeInput不再是多层的嵌套了。结构如下:

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

技术分享图片

 技术分享图片  

深度探索区块链/支持多种语言的智能合约(9)

标签:示意图   配置信息   上下文   还需要   源码   查询   嵌套   com   type   

原文地址:https://www.cnblogs.com/kaixinyufeng/p/9537746.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!