超级账本源码解析之VSCC

文章目录前置VSCC

本系列目录:超级账本源码(V1.3)解析目录

当peer收到leader发来的block后,需要进行VSCC、MVCC、commit三步操作。下面我们从peer收到block开始,分析VSCC这个过程的代码(HLF v1.3)。

前置

    gossip/state/state.golisten函数中收到payload(其中有block和private data),通过queueNewMessage将其放入payloads中等待后续处理。
    然后在deliverPayloads函数中开始处理payloads中的payload,得到block和pvtData后,做了一些简单的检查,之后调用commitBlock函数。
    commitBblock中,调用了gossip/privdata/coordinator.go中的StoreBlock函数和UpdateLedgerHeight函数(TODO)。

VSCC

    StoreBlock中,首先调用了core/committer/txvalidator/validator.go中的Validate对该block做VSCC。

    Validate中,对block中的每一个tx都启动一个goroutine调用validateTx,验证结果通过result传回进行处理(存储了VSCC的结果供后续使用)。

    validateTx中,调用core/common/validation/msgvalidation.go中的ValidateTransaction,对该TX的envelop的格式进行了检查,并在checkSignatureFromCreator中验证该tx的创建者身份的有效性&检查签名的有效性,然后根据TX的类型(normal transaction 或者config transaction)分别调用了对应的函数(validateEndorserTransaction或者validateConfigTransaction),再检查tx所属的channel是否存在。

    a. (在调用之前先检查了txID的正确性protos/utils/proputils.go:CheckProposalTxID)。在validateEndorserTransaction中,获取该TX的action(TODO),并验证action的签名header(确保有nonce),然后重新计算了该TX的proposal的hash并与proposal中带有的hash进行了比较。

    txID = hash(creator, nonce)

    b. 在validateConfigTransaction中,什么也没做:There is no need to do this validation here, the configtx.Validator handles this.

    然后根据TX类型做不同的处理:

    对于normal tranasaction(也就是代码里的HeaderType_ENDORSER_TRANSACTION):
    a. 检查该txID在账本中是否已经存在
    b. 调用core/committer/txvalidator/vscc_validator.go中的VSCCValidateTx做VSCC (TODO)
    对于config trnasaction(也就是代码里的HeaderType_CONFIG):
    a. 调用Apply(TODO)

    core/committer/txvalidator/vscc_validator.goVSCCValidateTx中,先对该tx的chaincode的名字和版本做了检查,

    at first, we establish a few facts about this invocation:
    1) which namespaces does it write to?: 检查每一个write set.
    2) does it write to LSCC’s namespace?:目前只有system chaincode有两种操作允许写入LSCC’s namespacedeployupgrade
    3) does it write to any cc that cannot be invoked? */

    然后会根据chaincode类型做不同处理

    a. 对于application chaincode: 对于每一个namespace,
    调用VSCCValidateTxForCC
    =》core/committer/txvalidator/plugin_validator.go:ValidateWithPlugin
    =》core/handlers/validation/builtin/default_validation.go:Validate
    =》core/handlers/validation/builtin/v13/validation_logic.go:Validate


    => core/committer/txvalidator/plugin_validator.go:Evaluate
    => common/cauthdsl/policy.go: Evaluate
    进行验证(TODO)

    b. 对于system chaincode

    // when we are validating a system CC, we use the default
    // VSCC and a default policy that requires one signature
    // from any of the members of the channel

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

超级账本源码解析之VSCC

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » 超级账本源码解析之VSCC
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏