深度探索区块链/支持多种语言的智能合约(9)
2021-07-14 19:05
标签:示意图 配置信息 上下文 还需要 源码 查询 嵌套 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】单一所有者:只有安装链码的节点对链码签名 说明: -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的接口发起请求,命令如下: 背书节点接收到请求后,检查:是否有权限提交交易,是否是重复交易等。真正的执行过程是在链码中完成的,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系统链码包括:
一。智能合约概述与链码的生命周期管理
//创建带签名的链码包
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
ProcessProposal(ctx context.Context,in *SignedProposal,opts ...grpc.CallOption)
(*ProposalResponse,error)