胡豆秆

个人博客

欢迎来到我的个人博客~


Fabric交易

Fabric交易

交易是指对链代码(即智能合约)的操作,分为1部署交易和调用交易。

  • 部署交易是指创建新的链代码。用程序作为参数,交易成功执行时,链代码就被安装到区块链上了。
  • 调用交易是指运行链代码。可能会修改相应的状态,并返回输出。

交易头:元数据(链码名称,版本)。

交易签名:加密签名,用于客户端防篡改。

交易提案:对程序提供的参数进行编码,负责将参数传递过去。

交易响应:智能合约的输出。世界状态在交易前后的值。

交易流程

​ 前提假设是各节点已经提前颁发好证书,且已正常启动,并加入已经创建好的通道。此流程介绍的是在已经实例化了的链码通道上发起一个调用交易到最终结账的全过程。

  1. 提交交易提案

    ​ 应用程序(客户端节点)构造好交易提案(交易提案中包含本次交易要调用的合约标识、合约方法和参数信息以及客户端签名等)请求后,根据背书策略选择背书节点执行交易提案并进行背书签名。背书节点是链代码中背书策略指定的节点。正常情况下背书节点执行后的结果是一致的,只有背书节点对结果的签名不一样。

  2. 模拟执行提案并进行背书

    ​ 背书节点在收到交易提案后会进行一些验证,验证通过后,背书节点会根据当前账本数据模拟执行链码中的业务逻辑并生成读写集(RwSet)。模拟执行时不会更新账本数据。然后背书节点对这些读写集进行签名生成提案响应(proposal response),然后返回给应用程序。

  3. 收集交易的背书(返回模拟执行结果)

    ​ 应用程序收到proposal response后会对背书节点的签名进行验证(所有节点接收到任何消息时都需要先验证消息的合法性)。如果链码只进行账本查询操作,应用程序只需要检查查询响应,并不会将交易提交给排序服务节点。如果链码对账本进行了invoke操作,则需要提交交易给排序服务进行账本更新(提交前会判断背书策略是否满足)。

  4. 构造交易请求并发送给排序服务节点

    ​ 应用程序接收到所有背书节点的签名后,根据背书签名调用SDK生成交易,并广播给排序服务节点。其中生成交易的过程很简单,只需要确认所有背书节点的执行结果完全一致,再将交易提案、提案响应和背书签名打包生成交易即可。

  5. 排序服务节点对交易进行排序并生成区块

    ​ 排序服务节点接收到网络中所有通道发出的交易信息,读取交易信封获取通道名称,按各个通道上交易的接收时间顺序对交易信息进行排序(多通道隔离),生成区块。(在这个过程中,排序服务节点不会关心交易是否正确,只是负责排序和打包。交易的有效性在第7步进行验证)

  6. 排序服务节点广播区块给主节点

    ​ 排序服务节点生成区块后会广播给通道上不同组织的主节点。

  7. 记账节点验证区块内容并写入到账本

    ​ 所有的peer节点都是记账节点,记录的是节点已加入通道的账本数据。记账节点接收到排序服务节点生成的区块后,会验证区块交易的有效性,然后提交到本地账本并产生一个生成区块的事件,监听区块事件的应用程序会进行后续的处理。(如果接受的是配置区块,则会更新缓存的配置信息)

  8. 主节点在组织内部同步最新的区块

    ​ 如果交易是无效的,也会更新区块,但不会更新世界状态。(区块存储的是操作语句,而世界状态存储的是被处理的数据)

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦