Skip to content

Latest commit

 

History

History
47 lines (34 loc) · 2.63 KB

lscc_go.md

File metadata and controls

47 lines (34 loc) · 2.63 KB

lccc.go

LSCC---Lifecycle System Chaincode, 负责chaincode的全生命周期管理。

Invoke操作有INSTALL、DEPLOY(语义上的实例化)、UPGRADE、GETCCINFO、GETDEPSPEC、GETCCDATA、GETCHAINCODES、GETINSTALLEDCHAINCODES。

操作 参数
INSTALL 1.ChaincodeDeploymentSpec
DEPLOY
UPGRADE
1.chainName
2.ChaincodeDeploymentSpec
3.SignaturePolicyEnvelope(endorsement policy)
4.escc
5.vscc
GETCCINFO
GETDEPSPEC
GETCCDATA
1.chainName
2.ccName
GETCHAINCODES
GETINSTALLEDCHAINCODES
None
INSTALL
  • 验证SignedProposal是不是admin节点签署的(check时传入的ADMINS)。
  • executeInstall()
    • 检查cc名字和版本是否合法,不包含非法字符。
    • 把ccPackage写入文件系统。

DEPLOY

  • 检查参数,如果空则赋值默认值,policy默认是被任意一个成员签署,escc和vscc默认就是系统的escc和vscc,暂不支持自己指定,因为后面会检测指定的cc是不是scc,而scc目前就是固定的这几个不能动态增加。
  • executeDeploy()
    • 检查cc名字和版本是否合法,不包含非法字符(以及ACL,access control,TODO)。
    • 检查链码是否已经存在,就是已经被实例化。
    • 获取ccPackage并转换成ChaincodeData。
    • 验证实例化策略,ccPackage有两种,源码打包生成的,还有install时直接传入的,直接传入的包有可能是被签名的,被签名的ccPackage是被指定了实例化策略的,只有指定的身份才可以实例化这个cc,其他所有的没被签名的ccPackage默认任意一个ADMIN节点都可以实例化。平常用的install命令,本地传入地址和参数打包生成的ccPackage都是未被签名的。
    • createChaincode(),检查指定的escc和vscc是不是scc(所以暂不支持自己的背书和验证链码),最后putState(),其中key是cc名字,value是序列化后的ChaincodeData。

UPGRADE

  • 跟DEPLOY类似,参考DEPLOY,多了一步检查版本号是不是跟旧的版本号不同。

GETCCINFO GETDEPSPEC GETCCDATA

  • 检查通道Readers策略,是否有可读权限。
  • 检查cc是否被实例化,成功则按照函数名返回相应信息。
  • GETCCINFO返回cc名(成功获取ChaincodeData)。
  • GETDEPSPEC返回序列化后的ChaincodeDeploymentSpec。
  • GETCCDATA返回序列化后的ChaincodeData。

GETCHAINCODES GETINSTALLEDCHAINCODES

  • 检查是不是ADMIN节点。
  • GETCHAINCODES返回所有已经实例化的cc(对LSCC的state进行范围查询)。
  • GETINSTALLEDCHAINCODES返回节点上所有安装的cc(不一定实例化)。