链码安装
指令: peer lifecycle chaincode install ${CC_NAME}.tar.gz
lifecycle chaincode install
代码位置: internal/peer/lifecycle
源码解析
指令: internal/peer/lifecycle/chaincode/install.go
InstallCmd函数
步骤1 NewClientConnections
-
背书Endorser及排序Orderer的Client来自于脚本中的fabric-samples/test-network/scripts/envVar.sh的setGlobalsCLI函数的变量设置CORE_PEER_ADDRESS
-
由parsePeerConnectionParameters函数设置
流程2 Install
func (i *Installer) Install() error {
err := i.Input.Validate()
if err != nil {
return err
}
pkgBytes, err := i.Reader.ReadFile(i.Input.PackageFile)
if err != nil {
return errors.WithMessagef(err, "failed to read chaincode package at '%s'", i.Input.PackageFile)
}
serializedSigner, err := i.Signer.Serialize()
if err != nil {
return errors.Wrap(err, "failed to serialize signer")
}
proposal, err := i.createInstallProposal(pkgBytes, serializedSigner)
if err != nil {
return err
}
signedProposal, err := signProposal(proposal, i.Signer)
if err != nil {
return errors.WithMessage(err, "failed to create signed proposal for chaincode install")
}
return i.submitInstallProposal(signedProposal)
}
2.1 读取链码文件到[]byte中
pkgBytes, err := i.Reader.ReadFile(i.Input.PackageFile)
2.2 创建提案proposal
proposal, err := i.createInstallProposal(pkgBytes, serializedSigner)
将链码和参数,签名者封装到proposal中
2.3 签名提案proposal
signedProposal, err := signProposal(proposal, i.Signer)
2.4 提交提案proposal
submitInstallProposal
submitInstallProposal
proposalResponse, err := i.EndorserClient.ProcessProposal(context.Background(), signedProposal)
将链码和参数封装到
由EndorserClient向Endorser的Peer节点发送消息
补充签名者信息
1. 默认签名者 bccspmsp
msp/mspimpl.go
2. 默认签名者 bccspmsp 初始化
msp/mspimplsetup.go setupV142