问题
在一次服务迁移后,生产环境出现finger print mismatch
的问题
分析
调用合约时,peer会做如下检查
Invoke->CheckInvocation->ChaincodeEndorsementInfo
fabric1.x
func (lscc *SCC) ChaincodeEndorsementInfo(channelID, chaincodeName string, qe ledger.SimpleQueryExecutor) (*lifecycle.ChaincodeEndorsementInfo, error) {
chaincodeDataBytes, err := qe.GetState("lscc", chaincodeName)
if err != nil {
return nil, errors.Wrapf(err, "could not retrieve state for chaincode %s", chaincodeName)
}
...
err = ls.SecurityCheckLegacyChaincode(chaincodeData)
if err != nil {
return nil, errors.WithMessage(err, "failed security checks")
}
chaincodeDataBytes是从本地lscc中查询出来的,但是这个是initialized后记录的,是通道内共识的合约信息。
SecurityCheckLegacyChaincode将文件系统中记录的ccpack
和lscc记录的cd
做比较