超级账本Fabric的世界状态操作与账本操作

news2024/11/15 4:00:30

在 Hyperledger Fabric 中,账本由两个不同但相关的部分组成 - 世界状态和区块链。

世界状态: 一个数据库,其中存储了一组帐本状态的当前值的缓存。世界状态使程序可以轻松地直接访问状态的当前值,而不必通过遍历整个交易日志来计算状态值。世界状态可以频繁更改,因为可以创建,更新和删除状态。

区块链 : 交易日志,记录了导致当前世界状态的所有更改。交易收集在附加到区块链的区块内部,使你能够了解导致当前世界状态变化的历史。区块链数据结构与世界状态非常不同,因为一旦写入,就无法修改;这是一成不变的。这就是银行的流水吧。


账簿数据状态操作API包括以下内容。
getstate(Key string)([]byte,error):根据指定的Key查询对应的数据状态。
put state (key string,value [] byte):根据指定的key,在分类帐中保存相应的值。
DelState(key string):根据指定的key删除对应的数据状态

******************************************************

以下来自网页
https://dandelioncloud.cn/article/details/1575115195137880066
3.3.2.3 链码查询
与调用交易一样,验证 peer 发送QUERY消息给链码容器的shim,由它来调用链码的Query函数,并传递从ChaincodeInput得到的参数。Query函数可能会返回状态值或错误,它会把它通过RESPONSE或ERROR消息来传递给验证 peer。

3.3.2.4 链码状态
每个链码可能都定义了它自己的持久化状态变量。例如,一个链码可能创建电视,汽车或股票这样的资产来保存资产属性。当Invoke函数处理时,链码可能会更新状态变量,例如改变资产所有者。链码会根据下面这些消息类型类操作状态变量:

PUT_STATE
链码发送一个payload包含PutStateInfo对象的PU_STATE消息来保存键值对。

message PutStateInfo {
    string key = 1;
    bytes value = 2;
}
GET_STATE
链码发送一个由payload指定要获取值的键的GET_STATE消息。

DEL_STATE
链码发送一个由payload指定要删除值的键的DEL_STATE消息。

RANGE_QUERY_STATE
链码发送一个payload包含RANGE_QUERY_STATE对象的RANGE_QUERY_STATE来获取一个范围内的值。
ReadOnlyLedger 接口是为了查询总账的本地备份,而不会修改它。
UtilLedger 接口定义了一些由本地总账提供的有用的功能。
HashBlock(block *pb.Block) ([]byte, error)
VerifyBlockchain(start, finish uint64) (uint64, error)
这个方法是用来校验区块链中的大的区域。
WritableLedger 接口
定义:

type WritableLedger interface {
    PutBlock(blockNumber uint64, block *pb.Block) error
    ApplyStateDelta(id interface{}, delta *statemgmt.StateDelta) error
    CommitStateDelta(id interface{}) error
    RollbackStateDelta(id interface{}) error
    EmptyState() error
}
WritableLedger 接口允许调用者更新区块链。注意这NOT 不是共识插件的通常用法。当前的状态需要通过Executor接口执行交易来修改,新的区块在交易提交时生成。相反的,这个接口主要是用来状态改变和腐化恢复。特别的,这个接口下的函数永远不能直接暴露给共识消息,这样会导致打破区块链所承诺的不可修改这一概念。这个结构包含下面这些函数。
PutBlock(blockNumber uint64, block *pb.Block) error这个函数根据给定的区块编号把底层区块插入到区块链中。
ApplyStateDelta(id interface{}, delta *statemgmt.StateDelta) error这个函数接收状态变化,并把它应用到当前的状态。
CommitStateDelta(id interface{}) error
RollbackStateDelta(id interface{}) error
EmptyState() error删除整个当前状态

******************************************************

看来目前只能操作世界状态了。网上看资料,看3-4天,做个记录。

感谢寒暄的大企鹅不吝指点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/12570.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PROTAC与抗体偶联药物的结合

PROTAC 的靶点真核生物的蛋白降解途径主要分为溶酶体途径、泛素蛋白酶体途径、胞液蛋白酶水解途径和线粒体蛋白酶途径等四种 (图1)。其中,PROTAC 所依赖的蛋白酶体途径主要针对细胞周期蛋白、转录因子、细胞表面受体以及胞内变性蛋白等进行降解。 图 1. 不同蛋白降…

《安富莱嵌入式周报》第291期:分分钟设计数字芯片,单片机版JS,神经网络DSP,microPLC,FatFS升级至V0.15,微软Arm64 VS正式版发布

往期周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版: https://www.bilibili.com/video/BV1Dd4y1b74x 《安富莱嵌入式周报》第291期:分分…

分享几个小技巧教你图片怎么加边框

大家平时出去玩的时候,肯定没少拍摄照片吧?那你们都是怎么对图片进行修饰的呢?我比较喜欢给图片加上一些边框线条,这样子的图片会比较有意境,能凸显我想要表达的意思。那么大家知道怎么在图片里加边框吗?今…

【Vue.js设计与实现】第4章 响应系统的作用与实现

前言: 本文是我看的Vue.js设计与实现这本书第二篇 响应系统 的第4章 响应系统的作用与实现的一些总结与收获。 第4章从宏观视角讲述了Vue.js 3.0中响应系统的实现机制。从副作用函数开始,逐步实现一个完善的响应系统,还讲述了计算属性和watch…

java计算机毕业设计基于安卓Android的在线心理咨询与健康App

项目介绍 本文介绍了心理咨询与健康App软件开发建设的意义和国内外发展现状,然后详细描述了所开发手机APP的可行性分析,并分析了手机APP所要实现的功能。因为心里咨询设施较多,而且人口密集,不能更好的管理健康问题,造成需要时人员不必要的身心伤害,所以采用比较方便的、容易便…

Linux基本指令(下)

Linux基本指令(下)前言cat指令more命令less命令head命令tail命令wc指令date指令cal指令find指令grep指令top命令alias命令zip/unzip命令前言 上一篇Linux基本指令主要讲解了关于文件操作方面的指令,接下来这一片Linux基本指令主要讲解一下关…

聊聊推荐系统的评测(下)

这是鼎叔的第三十九篇原创文章。 行业大牛和刚毕业的小白,都可以进来聊聊。 欢迎关注本人专栏和微信公众号《敏捷测试转型》,大量原创思考文章陆续推出。 上篇请查阅:聊聊推荐系统的评测(上) 下篇,我们…

基于SSM的旅游景点购票管理系统

1、项目介绍 基于SSM的旅游景点购票管理系统拥有两种角色,管理员和用户 管理员:用户管理、景点管理、购票管理、酒店管理、客房管理、客房预订管理、轮播图管理等 用户:登录注册、景区购票、评论、预订客房、收藏、发布攻略等 2、项目技术…

App推广渠道追踪技术更新及应用

如今App推广渠道追踪对App厂商来说非常重要,因为App厂商需要通过渠道追踪来寻找成本最低的和价值最高的获客渠道。 但是现在线上渠道的选择五花八门,比如各种新闻门户网站、字节系平台、腾讯系平台等,那么到底该花多少钱去获取用户&#xff…

本地浏览器打开远程服务器上的Jupyter Notebook

文章目录一、配置过程二、其他需求后台运行Jupyter端口映射实验环境及需求:远程服务器配置了 Jupyter Notebook,本地电脑没有相关的环境,想要在服务器端启动 Jupyter Notebook,然后直接从本地浏览器打开进行操作。 一、配置过程 …

【百度AI_文字识别】示例身份证图片识别(代码官方文档完整,只需获得修改参数、下载类)

文章目录提取身份证信息第一步:登录第二步:获取资源第三步:获取access_token参数(AuthService.java)第四步:请求代码Idcard.java第五步:修改Idcard.java文件注意:返回错误提取身份证…

【跨境电商卖家】Instagram营销初学者指南(一):重要性、优势

关键词:跨境电商卖家、instagram营销 1.为什么 Instagram 营销对企业很重要? Instagram 是接触大量受众的完美渠道——每月有超过10 亿活跃用户。平均而言,用户每天在 Instagram 上花费 53 分钟,这使得该平台成为仅次于Facebook的…

微信网页支付小白指南-域内浏览器支付 + 外部浏览器支付

关于微信网页支付,分为微信域内浏览器支付 外部浏览器支付,两者还是稍微有点点区别的,内部浏览器即在微信内打开网页,进行支付,支付调用是需要开通JSAPI支付方式;而外部浏览器「比如浏览器等」则需要开通 …

Leetcode刷题day2|数组二|977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

文章目录一、有序数组的平方错误的尝试思路注意AC代码暴力版本双指针方法二、长度最小的子数组错误的尝试思路滑动窗口介绍注意AC代码三、螺旋矩阵错误的尝试思路注意AC代码继承前边循环变量的写法不继承前边循环变量的做法四、数组做题思路总结基本知识解题思路一、有序数组的…

将爱心代码设为电脑屏保,俘获少女芳心,还能假装黑客,在酷炫的界面中保护隐私

本文介绍 Hacker Screen Saver 一款开源 Windows 屏保的使用。Hacker Screen Saver 是一款 .NET 设计的屏幕保护程序,可以显示 HTML 页面,你可以将黑客模拟器的网页,或者爱心代码网页设置为你的 Windows 电脑屏保。详细介绍了软件的使用和对应…

apritag 定位记录 C++ opencv 3.4.5

参考:2021-06-23 基于AprilTag的位姿估计,原理,完整代码(相机坐标系、世界坐标系) - 简书 Apriltag使用之二:方位估计(定位)_arczee的博客-CSDN博客_apriltag位姿估计 1.AprilTag概述 AprilTag是一种视觉…

Matlab:绘制日期时间

Matlab:绘制日期时间绘制日期时间数据指定坐标区范围指定刻度值指定刻度格式存储日期时间的坐标区属性导出和转换数据提示值绘制来自文件的日期时间数据此示例说明如何使用存储为 datetime 和 duration 数组的日期时间创建线图。datetime 数据类型表示时间点&#x…

Linux I/O 原理和 Zero-copy 技术全面分析

两万字长文从虚拟内存、I/O 缓冲区,用户态&内核态以及 I/O 模式等等知识点全面而又详尽地剖析 Linux 系统的 I/O 底层原理,分析了 Linux 传统的 I/O 模式的弊端,进而引入 Linux Zero-copy 零拷贝技术的介绍和原理解析,将零拷贝…

项目终于收尾了,第一次体验到专业项目管理软件的魅力

转眼到了年底,我跟进的项目也到了收尾阶段。之前陆陆续续给大家分享了入职新公司后,使用新引进的项目管理软件做项目的一些体会和心得,其中一些比较高效便捷的技巧和功能模块也引起了大家的兴趣。 最近刚好临近项目尾声,也给大家…

Maven的详解

在java中Maven就是一个包管理工具,在没有包管理工具时,我们要做一个java项目,需要第三方依赖包,将别人打包好的Jar包下载到本地,然后手动指定给项目.操作比较麻烦,比如版本控制,有的甚至还有其他包的依赖,属实是繁琐,技术是不断地迭代的,所以就出现了Maven,用了Maven之后,需要什…