Fabric智能合约——Chaincode(一)简介

Fabric智能合约整体介绍,首先看一下Fabric交易流程

 在这张图中,5、6步是public数据的步骤,7、8、9是private数据的步骤,除了这一部分外,其他步骤均相同。

Fabric Chaincode简介

        Fabric中智能合约称为链码(Chaincode),使用计算机语言描述合约条款、交易的条件、交易的业务逻辑等,通过调用链码实现交易的自动执行和对账本数据的操作,是应用程序与底层交互的媒介。

        链码在一个独立于Peer节点的Docker容器中执行,通过gRPC与背书节点连接,双方通过发送ChaincodeMessage来进行交互通信。

        一个Chaincode的账本是与其他Chaincode互相隔离的,不能直接访问,只有在相同网络中的Chaincode获取相应的许可后才能调用其他链码来其他账本。

        链码是与数据分离的。相较于以太坊,Fabric链码和底层账本是分开的,升级链码时并不需要迁移账本数据到新的链码当中,真正实现了逻辑与数据的分离。

        链码支持多种语言编写,包括golang、Java、node.js。

        Chaincode包括两种链码:系统链码用户链码

        系统链码用来实现系统层面的功能,包括系统的配置,用户链码的部署、升级,用户交易的签名和验证策略等。系统链码运行在节点进程中,不以单独的Docker运行,包括LSCC、CSCC、QSCC。

  • LSCC:生命周期系统Chaincode,处理生命周期相关的功能;
  • CSCC:配置系统Chaincode,处理Peer侧channel的配置;
  • QSCC:查询系统Chaincode,提供账本查询API,比如获取区块及交易等。

        用户链码用于实现用户的应用功能。开发者编写链码应用程序并将其部署到网络上,终端用户通过与网络节点交互的客户端应用程序调用链码。用户链码都必须实现Chaincode接口,链码包含:Init、Invoke。

  • Init方法会在Chaincode接收到instantiate或者upgrade交易时被调用,使Chaincode执行必要的初始化操作,包括初始化应用的状态。
  • Invoke方法接受和处理链下业务系统调用事务处理提案,其参数包含调用的链码程序中函数的名称和具体业务处理数据参数,即在Invoke中根据不同的方法参数调用其他分支处理响应的业务,可以简单理解为链码方法的入口。我们可以在Invoke方法中路由到其他业务方法中去。

 Chaincode操作

        当Chaincode开发完成或者需要升级时,需要进行Chaincode部署。Chaincode操作贯穿Chaincode的整个生命周期,包含打包(package)、安装(install)、实例化(instantiate)、更新(upgrade)、停止和启动(stop and start)。在安装并实例化成功Chaincode之后,就可以调用Chaincode中的方法与账本进行交互。

        官方并没有实现停止和启动这两个生命周期,停止操作官方建议是通过移除Chaincode容器和每个背书节点,删除安装包来停止。具体的操作就是通过docker命令删除所有主机或者虚拟机上peer节点进行于其中的Chaincode的容器,最后从每个背书节点删除掉安装包。

本文的大部分内容来自于小破站上 区块链服务网络BSN 中的 智能合约教程,并非原创,感谢!

猜你喜欢

转载自blog.csdn.net/m0_51245596/article/details/121984081