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 中的 智能合约教程,并非原创,感谢!

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为一名AI语言模型,我并不具备开发fabric智能合约的实践能力,但我可以给你一些基本信息。 fabric智能合约是一种用于Hyperledger Fabric平台的智能合约,它可以用于定义和管理各种资产,并提供了一个安全的、可编程的方式来管理这些资产的交易和状态。在fabric智能合约的开发中,需要使用一种称为链代码(chaincode)的程序来实现智能合约逻辑。链代码是一种独立运行的程序,它可以被安装在fabric网络的节点上,并与其他链代码共同协作完成智能合约的执行。 在fabric智能合约开发中,需要使用一些工具和技术,如: 1. Hyperledger Fabric SDK:提供了一种编写、测试和部署fabric智能合约的API。 2. Docker:用于打包和部署链代码,以及构建fabric网络。 3. Go或Java:链代码可以用Go或Java等编程语言编写。 4. VS Code或其他编辑器:用于编写和调试链代码。 在开发fabric智能合约时,需要遵循一些最佳实践,如: 1. 在编写链代码时,需要考虑安全性和可靠性问题,以确保合约的正确执行。 2. 链代码应该尽可能简单,以便于维护和升级。 3. 在编写链代码时,需要考虑性能和可扩展性问题,以应对不断增长的交易量。 4. 在测试链代码时,需要尽可能模拟真实的环境,并采用自动化测试工具来提高测试效率。 总之,fabric智能合约开发需要掌握一些基本的工具和技术,同时需要遵循一些最佳实践,以确保合约的安全、可靠和高效执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值