Fabric 1.0 中一次交易的生命周期与账本的交互

来源:互联网 发布:手机上编写c语言的软件 编辑:程序博客网 时间:2024/06/02 05:04

Transaction lifecycle and interaction with ledgers

Transaction lifecycle and interaction with ledgers

最近在学习用go写chaincode和使用node-sdk,看到IBM网课中有这样一幅图,所以想详细的解读下,一次交易在Fabric中到底做了哪些事,下面开始:

  1. 在容器中用Chaincode或直接运行SDK,我们的指令或代码都有类似{“Args”:[“invoke”,”a”,”b”,”10”]},调用invoke函数,a给b转账10。第一步做的就是客户端将这些参数发送到endorsing peer节点。

  2. endorsing peer节点内执行Chaincode,与docker进行实例通信,并提供模拟的本地读写集。

  3. .endorseing peer把这些读写集连同签名返回给客户端。

  4. 客户端再把读写集发送给Orderer节点,Orderer节点是进行共识的排序节点,在单机测试的情况下,只启动一个orderer节点,使用solo共识机制,在生产情况下用kafka。

  5. Orderer节点负责排序和打包工作,处理事物的结果是一个Block。

  6. Committing 节点批量接收Orderer节点打包排序好的block。

  7. 提交节点收到Orderer节点的数据后,会先进行VSCC校验,检查Block的数据是否正确。接下来是对每个Transaction的验证,主要是验证Transaction中的读写数据集是否与State Database的数据版本一致。验证完Block中的所有Transactions后,提交节点会把吧Block写入区块链。然后把所有验证通过的Transaction的读写集中的写的部分写入State Database。另外对于区块链,本身是文件系统,不是数据库,所有也会有把区块中的数据在LevelDB中建立索引。

    之前看过一个更简易的图如下:
    1.应⽤用向一个或多个Peer节点发送对事务的背书请求;

    2 背书节点执⾏行ChainCode,但并不将结果提交到本地账本,只是将结果返回给应⽤;

    3 应⽤用收集所有背书节点的结果后,将结果广播给
    Orderers;

    4 Orderers执⾏行共识过程,并⽣生成Block,通过消息通道批量的将Block发布给Peer节点;

    5 各个Peer节点验证交易,并提交到本地账本中。

    这里写图片描述

    如果有理解不对的地方 还请大家多多指教~

阅读全文
0 0
原创粉丝点击