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

系统链码包括:

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依据代码及其余一些属性(名称/版本等)来定义链码。git

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

【3】链码签名数组

链码的签名实现如下3个目标区块链

【1】代表是谁建立的链码spa

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

【3】能够检测链码包是否被篡改blog

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

(一)链码的建立--两种方式生命周期

【1】多个全部者:rpc

须要多个全部者对链码签名,先建立一个链码包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再也不是多层的嵌套了。结构以下:

   

相关文章
相关标签/搜索