栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

Hyperledger Fabric 开发——初步认识智能合约(链码)

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Hyperledger Fabric 开发——初步认识智能合约(链码)

前言

本系列文章代码均为Go语言。

  • Hyperledger Fabric 开发——初步认识智能合约(链码)
  • Hyperledger Fabric 开发——开发用户链码
  • Hyperledger Fabric 开发——测试用户链码(待更新)
智能合约(链码)

在 Hyperledger Fabric 中,链码(Chaincode)又称为智能合约(下文中我们统一称为链码),是用Go,node.js或Java编写的程序,主要用于操作账本上的数据。用户的应用程序通过链码与 Fabric 账本数据进行交互。

在 Hyperledger Fabric 中,链码一般分为:

  • 系统链码
  • 用户链码
系统链码

系统链码负责 Fabric 节点自身的处理逻辑,包括系统配置、背书、校验等工作。系统链码仅支持 Go 语言,在 Peer 节点启动时会自动完成注册和部署,所以安装,实例化和升级不适用于系统链码。

底层的 Fabric 开发人员和管理员可以根据自己的需要修改这些系统链码。然而,系统链码的开发和管理是一项专门的活动,完全独立于智能合约的开发,通常没有必要进行系统链码的开发和管理。

系统链码主要包括以下几种:

  • 生命周期系统链码(LSCC):Lifecycle System Chaincode,负责对用户链码的生命周期进行管理。
  • 配置系统链码(CSCC):Configuration System Chaincode,负责处理 Peer 端的通道配置。
  • 查询系统链码(QSCC):Query System Chaincode,提供账本查询 API,如获取区块和交易等信息。
用户链码

用户链码是由应用程序开发人员根据业务场景需求使用 Golang、node.js 或 Java 语言编写的操作区块链分布式账本的状态的业务处理逻辑代码,用户链码运行在与 peer 进程隔离的 Docker 容器中,通过 Fabric 提供的接口与账本状态进行交互。

用户链码在区块链应用上处于非常关键的一环,它直接接受用户业务逻辑的调用,并对区块链分布式账本数据进行操作。

链码API

完整 API 介绍请参照官方文档:
https://pkg.go.dev/github.com/hyperledger/fabric/core/chaincode/shim?utm_source=godoc#ChaincodeStub

以下为部分常用 API 的简单介绍,详细用法见链接 Hyperledger Fabric 链码API的介绍

参数读取API
接口名称说明
GetStringArgs() []string获取链码调用请求中调用参数
GetFunctionAndParameters() (function string, params []string)获取链码调用的函数名和调用参数,默认第一个参数为函数名
账本状态交互API
接口名称说明
GetState(key string) ([]byte, error)获取指定键对应的值
PutState(key string, value []byte) error在账本中添加或者更新一对键值
DelState(key string) error在账本中删除一对键值
GetStateByRange(startKey, endKey string) (StateQueryIteratorInterface, error)查询指定范围内的键值,startKey为起始key,endKey为终止key
GetHistoryForKey(key string) (HistoryQueryIteratorInterface, error)返回对应键的历史值
其他API
接口名称说明
CreateCompositeKey(objectType string, attributes []string) (string, error)组合属性,构造复合键
SplitCompositeKey(compositeKey string) (string, []string, error)将复合键拆分成一系列属性
GetStateByPartialCompositeKey(objectType string, attributes []string) (StateQueryIteratorInterface, error)根据局部的复合键返回所有的匹配的键值
GetQueryResult(query string) (StateQueryIteratorInterface, error)对状态数据库进行富查询(目前仅有CouchDB支持富查询)
InvokeChaincode(chaincodeName string, args [][]byte, channel string) pb.Response调用其它链码的 Invoke 方法
致谢
  • https://www.jianshu.com/p/9809a0c4e5e7
  • https://help.aliyun.com/document_detail/141365.html?spm=a2c4g.11186623.6.621.1d791ef7kaeGiY
  • https://hyperledger-fabric.readthedocs.io/zh_CN/release-1.4/smartcontract/smartcontract.html#developing
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/991204.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号