Hyperledger Fabric 链码(3) 生命周期和API

2024-03-28 09:32

本文主要是介绍Hyperledger Fabric 链码(3) 生命周期和API,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. Chaincode的5个生命周期命令

  • 链码打包
  • 链码安装
    eg.peer chaincode install ccpack.out
  • 链码实例化
    eg. peer.sh chaincode instantiate -n mycc -v 0 -c ‘{“Args”:[“init”,“a”,“100”,“b”,“200”]}’ -C mychannel
  • 链码升级(当链码的代码发生改变时,就需要升级链码)
  • 链码签名

2. peer命令提供了8个子命令管理链码

  • Install
  • instantiate
  • invoke
  • list
  • package
  • query
  • signpackage
  • upgrade

3.链码API(主要是shim包提供,分为5类)

3.1 参数解析API:用来获取参数的账本数据状态

  • GetStringArgs() []string
    返回调用链码时指定提供的参数列表(以字符串数组形式返回)

  • GetFunctionAndParameters() (function string, params []string)
    返回调用链码时在交易提案中指定提供的被调用的函数名称及函数的参数列表(以字符串数组形式返回)

  • GetArgsSlice() ([]byte, error)
    返回提交交易提案时提供的参数列表(以字节串数组形式返回)

  • GetArgs() [][]byte
    返回调用链码时在交易提案中指定提供的被调用的函数名称及函数的参数列表(以字符串数组形式返回)

3.2 操作API:对账本数据查询、更新等

  • GetState(key string) ([]byte, error)
    查询账本,返回指定键对应的值

  • PutState(key string, value []byte) error
    尝试添加/更新账本中的一对键值。 这一对键值会被添加到写集合中,等待 Committer 进一步确认,验证通过后才会真正写入到账本

  • DelState(key string) error
    尝试删除账本中的一对键值。 同样,对该对键值删除会添加到写集合中,等待 Committer 进一步确认,验证通过后才会真正写入到账本

  • GetStateByRange(startKey, endKey string) (StateQueryIteratorInterface, error)
    查询指定范围的键值,startKey 和 endkey 分别指定开始(包括)和终止(不包括),当为空时默认是最大范围。 返回结果是一个迭代器结构,可以按照字典序迭代每个键值对,最后需要调用 Close() 方法关闭

  • GetHistoryForKey(key string) (HistoryQueryIteratorInterface, error)
    返回指定键的所有历史值。该方法的使用需要节点配置中打开历史数据库特性(ledger.history.enableHistoryDatabase=true)

  • CreateCompositeKey(objectType string, attributes []string) (string, error)
    给定一组属性(attributes),将这些属性组合起来构造返回一个复合键。eg.CreateComositeKey(“name-age”,[]string{“Alice”, “12”});

  • SplitCompositeKey(compositeKey string) (string, []string, error)
    将指定的复合键进行分割,拆分成构造复合键时所用的属性

  • GetStateByPartialCompositeKey(objectType string, keys []string)
    根据局部的复合键(前缀)返回所有匹配的键值,即与账本中的键进行前缀匹配。返回结果是一个迭代器结构,可以按照字典序迭代每个键值对,最后需要调用 Close() 方法关闭
    (StateQueryIteratorInterface, error)

  • GetQueryResult(query string) (StateQueryIteratorInterface, error)
    对(支持富查询功能的)状态数据库进行富查询,返回结果是一个迭代器结构,目前只支持 CouchDB。注意该方法不会被 Committer 重新执行进行验证,所以不能用于更新账本状态的交易中

注意: 通过 put 写入的数据状态不能立刻 get 到,因为 put 只是链码执行的模拟交易(防止重复提交攻击),并不会真正将状态保存到账本中,必须经过 Orderer 达成共识之后,将数据状态保存在区块中,然后保存在各 peer 节点的账本中。

3.3 交易信息获取API:获取提交的交易信息

  • GetTxID() string
    返回交易提案中指定的交易 ID。一般情况下,交易 ID 是客户端提交提案时由 Nonce 随机串和签名者身份信息哈希产生的数字摘要

  • GetChannelID() string
    返回交易提案中指定的 Channel ID

  • GetTxTimestamp() (*timestamp.Timestamp, error)
    返回交易被创建时的客户端打上的的时间戳。这个时间戳是直接从交易 ChannnelHeader 中提取的,所以在所以背书节点处看到的值都相同

  • GetBinding() ([]byte, error)
    返回交易的 binding 信息。交易的 binding 信息是将交提案的 nonse、Creator、epoch 等信息组合起来哈希得到数字摘要

  • GetSignedProposal() (*pb.SignedProposal, error)
    返回该 stub 的 SignedProposal 结构,包括了跟交易提案相关的所有数据

  • GetCreator() ([]byte, error)
    返回该交易提交者的身份信息(用户证书)。 从 SignedProposal 中的 SignatureHeader.Creator 提取

  • GetTransient() (map[string][]byte, error)
    返回交易中带有的一些临时信息。从 ChaincodeProposalPayload.transient 提取,可以存放与应用相关的保密信息,该信息不会被写入到账本

3.4 事件处理API:与事件处理相关

  • GetPrivateData(collection, key string) ([]byte, error)
    根据指定的 key,从指定的私有数据集中查询对应的私有数据

  • PutPrivateData(collection string, key string, value []byte) error
    将指定的 key 与 value 保存到私有数据集中

  • DelPrivateData(collection, key string) error
    根据指定的 key 从私有数据集中删除相应的数据

  • GetPrivateDataByRange(collection, startKey, endKey string) (StateQueryIteratorInterface, error)
    根据指定的开始与结束 key 查询范围(不包含结束key)内的私有数据

  • GetPrivateDataByPartialCompositeKey(collection, objectType string, keys []string) (StateQueryIteratorInterface, error)
    根据给定的部分组合键的集合,查询给定的私有状态

  • GetPrivateDataQueryResult(collection, query string) (StateQueryIteratorInterface, error)
    根据指定的查询字符串执行富查询 (只支持支持富查询的 CouchDB)

3.5 对私有数据操作的API:专门对私有数据操作

  • SetEvent(name string, payload []byte) error
    设定当这个交易在 Committer 处被认证通过,写入到区块时发送的事件(event),一般由 Client 监听

  • InvokeChaincode(chaincodeName string, args [][]byte, channel string) pb.Response
    调用另外一个链码的 Invoke 方法。 如果被调用链码在同一个通道内,则添加其读写集合信息到调用交易;否则执行调用但不影响读写集合信息// 如果 channel 为空,则默认为当前通道。目前仅限读操作,同时不会生成新的交易

这篇关于Hyperledger Fabric 链码(3) 生命周期和API的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/855212

相关文章

【LabVIEW学习篇 - 21】:DLL与API的调用

文章目录 DLL与API调用DLLAPIDLL的调用 DLL与API调用 LabVIEW虽然已经足够强大,但不同的语言在不同领域都有着自己的优势,为了强强联合,LabVIEW提供了强大的外部程序接口能力,包括DLL、CIN(C语言接口)、ActiveX、.NET、MATLAB等等。通过DLL可以使用户很方便地调用C、C++、C#、VB等编程语言写的程序以及windows自带的大

Maven(插件配置和生命周期的绑定)

1.这篇文章很好,介绍的maven插件的。 2.maven的source插件为例,可以把源代码打成包。 Goals Overview就可以查看该插件下面所有的目标。 这里我们要使用的是source:jar-no-fork。 3.查看source插件的example,然后配置到riil-collect.xml中。  <build>   <plugins>    <pl

如何更优雅地对接第三方API

如何更优雅地对接第三方API 本文所有示例完整代码地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/third 我们在日常开发过程中,有不少场景会对接第三方的API,例如第三方账号登录,第三方服务等等。第三方服务会提供API或者SDK,我依稀记得早些年Maven还没那么广泛使用,通常要对接第三方

Java基础回顾系列-第五天-高级编程之API类库

Java基础回顾系列-第五天-高级编程之API类库 Java基础类库StringBufferStringBuilderStringCharSequence接口AutoCloseable接口RuntimeSystemCleaner对象克隆 数字操作类Math数学计算类Random随机数生成类BigInteger/BigDecimal大数字操作类 日期操作类DateSimpleDateForma

Restful API 原理以及实现

先说说API 再说啥是RESRFUL API之前,咱先说说啥是API吧。API大家应该都知道吧,简称接口嘛。随着现在移动互联网的火爆,手机软件,也就是APP几乎快爆棚了。几乎任何一个网站或者应用都会出一款iOS或者Android APP,相比网页版的体验,APP确实各方面性能要好很多。 那么现在问题来了。比如QQ空间网站,如果我想获取一个用户发的说说列表。 QQ空间网站里面需要这个功能。

京东物流查询|开发者调用API接口实现

快递聚合查询的优势 1、高效整合多种快递信息。2、实时动态更新。3、自动化管理流程。 聚合国内外1500家快递公司的物流信息查询服务,使用API接口查询京东物流的便捷步骤,首先选择专业的数据平台的快递API接口:物流快递查询API接口-单号查询API - 探数数据 以下示例是参考的示例代码: import requestsurl = "http://api.tanshuapi.com/a

WordPress开发中常用的工具或api文档

http://php.net/ http://httpd.apache.org/ https://wordpress.org/ https://cn.wordpress.org/ https://core.svn.wordpress.org/ zh-cn:开发者文档: https://codex.wordpress.org/zh-cn:%E5%BC%80%E5%8F%91%E8%80%

Java后端微服务架构下的API限流策略:Guava RateLimiter

Java后端微服务架构下的API限流策略:Guava RateLimiter 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿! 在微服务架构中,API限流是保护服务不受过度使用和拒绝服务攻击的重要手段。Guava RateLimiter是Google开源的Java库中的一个组件,提供了简单易用的限流功能。 API限流概述 API限流通过控制请求的速率来防止

【Vue】关于Vue3的生命周期

目录 Vue3中新增了一个setup生命周期函数:(1) setup执行的时机是在beforeCreate生命周期函数之前执行,在setup函数中是不能通过this来获取实例的;(2) 为了命名的统一性,将beforeDestroy 改名为 beforeUnmount,destroyed 改名为 unmounted 生命周期函数: setup —— 不能通过this来获

09 生命周期

生命周期 beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestorydestoryed 辣子鸡:香辣入口,犹如吃了炫迈一样 - - - 根本停不下来 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport"