【fabric源码--peer】Endorser模拟执行提案
2021-07-20 13:50:10 0 举报
基于fabric2.1的源码梳理 具体内容如图所示
作者其他创作
大纲/内容
调用cs.Launcher.Launch启动链码容器
F
T
core/endorser/endorser.go
ProcessProposalSuccessfullyOrError
lgr := s.Peer.GetLedger(ledgername) 本地Peer节点账本kvLedger对象的交易管理器(含有状态数据库,用于访问账本)
调用txParams.TXSimulator.GetTxSimulationResults()获取当前交易模拟器rwsetBuilder对象保存的模拟执行结果读写集simResult
调用cs.HandlerRegistry.Handler(ccid)创建关联的链码运行时环境对象及其链码消息处理句柄Handler对象
调用AssemblePvtRWSet() 构造隐私数据读写集及其集合配置信息对象pvtDataWithConfig
chaincodeName != \"lscc\"
调用e.s.Execute()→SupportImpl.Execute()方法,启动链码容器并执行链码,这是所有链码操作都必须执行的步骤
调用e.Support.GetLedgerHeight 获取当前提案消息关联通道的账本高度endorsedAt,以标记提案背书时的账本高度位置
2
调用h.serialSendAsync(msg)送ChaincodeMessage_TRANSACTION类型链码消息到链码容器,请求调用链码的Invoke()方法以执行指定的命令方法,模拟执行链码并将结果暂时保存到交易模拟器中,从而完成执行链码调用的过程
调用newLockBasedTxSimulator构建RWSetBuilder结构对象(用于保存模拟执行结果)其中,RWSetBuilder结构对象封装了公有数据读写集Builder字典pubRwBuilderMap(map[string]*nsPubRwBuilder类型) 与隐私数据读写集Builder字典pvtRwBuilderMap(map[string]*nsPvtRwBuilder类型),分别用于保存模拟执行结果中的公有数据与隐私数据
调用e.PrivateDataDistributor.DistributePrivateData分发私有数据------------------------------------------------------gossip模块详解
simResult.PvtSimulationResults = nil
调用Support.ExecuteLegacyInit()执行指定的deploy命令或upgrade命令
h != nil
txParams.TXSimulator == nil
调用simResult.GetPubSimulationBytes()获取模拟结果的公有数据
chainID == \"\"||chaincodeName=\"qscc\"||chaincodeName=\"cscc\"
h := cs.HandlerRegistry.Handler(ccid) 根据ccid获取handle对象
cs.execute()执行链码操作,等待执行完成或者超时返回
调用CheckInvocation 检查调用的参数,并确定调用是否、如何以及应该路由到哪里。并根据版本确认链码消息类型是ChaincodeMessage_INIT或ChaincodeMessage_TRANSACTION
ccid := ccName + \":\" + ccVersion
0 条评论
回复 删除
下一页