深度探索区块链/支持多种语言的智能合约
Posted kaixinyufeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度探索区块链/支持多种语言的智能合约相关的知识,希望对你有一定的参考价值。
系统链码包括:
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不再是多层的嵌套了。结构如下:
以上是关于深度探索区块链/支持多种语言的智能合约的主要内容,如果未能解决你的问题,请参考以下文章