Hyperledger中数据存取的实现

简介

本文介绍了在Hyperledger中数据存取的实现.

API接口

Hyperledger提供基于key/value的数据存储,其中key是字符串,value则是二进制字节数组,Hyperledger的Go API提供了三个方法用于数据存取:PutState(key, value)用于向Hyperledger中存储数据, GetState(key)用于从Hyperledger中提取数据,而DelState(key)则从Hyperledger中删除数据。

数据存取 Chaincode 示例

以下是一个简单的数据存取Chaincode, 以及其相应的REST请求。

package mainimport ("errors""fmt""github.com/hyperledger/fabric/core/chaincode/shim"
)type SaveState1Chaincode struct {
}func (t *SaveState1Chaincode) Init(stub shim.ChaincodeStubInterface, function string, args []string) ([]byte, error) {fmt.Printf("Init called with function %s!\n", function)return nil, nil
}func (t *SaveState1Chaincode) Invoke(stub shim.ChaincodeStubInterface, function string, args []string) ([]byte, error) {fmt.Printf("Invoke called with function %s!\n", function)var key, value stringkey = args[0]value = args[1]var err errorerr = stub.PutState(key, []byte(value))if err != nil {return nil, err} return nil, nil    
}func (t *SaveState1Chaincode) Query(stub shim.ChaincodeStubInterface, function string, args []string) ([]byte, error) {fmt.Printf("Query called with function %s!\n", function)var key stringkey = args[0]valInBytes, err := stub.GetState(key)if err != nil {return nil, errors.New("Failed to get state for " + key)}message := "State for "  + key + " = " + string(valInBytes)return []byte(message), nil;
}func main() {err := shim.Start(new(SaveState1Chaincode))if err != nil {fmt.Printf("Error starting Save State chaincode: %s", err)}
}

存储数据的REST请求

{"jsonrpc": "2.0","method": "invoke","params": {"type": 1,"chaincodeID":{"name":"mycc"},"ctorMsg": {"function":"invoke","args":["testKey", "testValue"]},"secureContext": "jim"},"id": 3}  

获取数据的REST请求

 {"jsonrpc": "2.0","method": "query","params": {"type": 1,"chaincodeID":{"name":"mycc"},"ctorMsg": {"function":"query","args":["testKey"]},"secureContext": "jim"},"id": 5}

关于Immutability

以上代码也可以看出Hyperledger和BitCoin和Ethereum等区块链对Immutability的不同理解, 在Hyperledger中,数据提交到区块链后不仅可以改变,还甚至可以被删除,而在BitCoin和Ethereum中数据一旦提交到区块链后就不能再被改变。

这也体现在R3的Corda区块链中,R3 CTO Richard Gendal Brown在这里 写道:

Immutability

The fourth feature in the “Blockchain Bundle” is often, if misleadingly, termed “immutability”: data, once committed, cannot be changed.

This isn’t quite true: if I have a piece of data then of course I can change it. What we actually mean is that: once committed, nobody else will accept a transaction from me if it tries to build on a modified version of some data that has already been accepted by other stakeholders.

Blockchains achieve this by having transactions commit to the outputs of previous transactions and have blocks commit to the content of previous blocks. Each new step can only be valid if it really does build upon an unchangeable body of previous activity.

总结

本文介绍了在Hyperledger中数据存取的实现以及关于Immutability的讨论.

转载于:https://www.cnblogs.com/huyouhengbc/p/5967428.html

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

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

相关文章

计算机基本操作术语

操作系统 计算机硬件系统外面加载的第一道软件系统,专门用于管理计算机硬件和其它软件,响应用户对硬件和软件的操作,在微机上常见的有DOS、Windows3.2,Win95/98/NT等。 安装程序 由于目前的软件都涉及许多文件和子目录,所以一般都提供安装程序帮助用户自…

mysql 4 中文模糊查询_解决MySQL中文模糊查询问题

解决MySQL中文模糊查询问题:我们在MySQL中进行中文模糊查询时,经常会返回一些与之不相关的记录,比如查找 "%a%" 时,返回的可能有中文字符,却没有 a 字符存在。对于此问题目前发现一种方法可以很方便解决。例…

《信息安全系统设计基础》 第五周学习总结

20145224 《信息安全系统设计基础》第五周学习总结 教材学习内容总结 3.1 历史观点 X86寻址的三个时代: 1、DOS时代的平坦模式,不区分用户空间和内核空间,很不安全; 2、8086的分段模式; 3、IA32的带保护模式的平坦模式…

中文版php.ini

;;;;;;;;;;;; ;; 语法 ;; ;;;;;;;;;;;; ; 该文件的语法非常简单。空白字符和以分号开始的行被简单地忽略。 ; 章节标题(例如: [php])也被简单地忽略,即使将来它们可能有某种意义。 ; ; 设置指令的格式如下: ; directive value ; 指令名(directive)是大小…

使用轻量级Spring @Scheduled注解执行定时任务

WEB项目中需要加入一个定时执行任务,可以使用Quartz来实现,由于项目就一个定时任务,所以想简单点,不用去配置那些Quartz的配置文件,所以就采用了Spring Scheduled注解来实现了定时任务。在这里做个备注。 spring配置文…

mysql 表名通配符导出_mysqldump根据通配符批量导出

xtrabackup的主要优点:1,物理备份,备份速度快2,热备份、无需停机3,恢复速度快4.自动会对备份文件进行验证1. xtrabackup 工具的安装1.1 安装依赖包#No package perl-Digest-MD5 available.yum install -y rsync perl l perl-Digest-MD5 perl perl-devel …

系统垃圾清理.cmd

将以下内容保存为“系统垃圾清理.cmd”文件,运行即可 echo off echo 正在清除系统垃圾文件,请稍等...... del /f /s /q %systemdrive%\*.tmp del /f /s /q %systemdrive%\*._mp del /f /s /q %systemdrive%\*.log del /f /s /q %systemdrive%\*.gid del …

Android内存优化(使用SparseArray和ArrayMap代替HashMap)

出处:Sunzxyong HashMap HashMap内部是使用一个默认容量为16的数组来存储数据的,而数组中每一个元素却又是一个链表的头结点,所以,更准确的来说,HashMap内部存储结构是使用哈希表的拉链结构(数组链表&#…

mysql按日期获取最新_mysql获取按日期排序获取最新的记录

主要按照日期获得最新的数据;今天记录两种方式,并不涉及效率等其他方面问题:第一种, 利用GROUP BY原理:select * from (select * from authenticationrecord order by authenticationtime desc) temp group by merchan…

vbs运算符号和函数

基本运算 数字加法及字符串连接 - 数字减法 * 数字乘法 / 数字除法 Mod 求余数 \ 求商数 & 字符串连接 ^ 次方 相等 <> 不相等 > 大于或等于 > 大于 < 小于或等于 < 小于 Not 非 And 且 Or 或 Xor 异或 循环及决策 if ....then 若…

VS2010与QT的集成开发环境

http://blog.csdn.net/hbsong75/article/details/9293773 QT与Java有点类似&#xff0c;也是一种跨平台的软件&#xff08;当然在windows平台和Linux平台需要安装相应的QT开发环境和运行库&#xff0c;类似于JAVA在不同平台下的虚拟机JVM环境&#xff09;&#xff0c;因此对于某…

yum mysql 5.1 innodb_Yum升级mysql5.1到5.6

Yum升级mysql5.1到5.6有一些虚拟机、云主机提供商仍然使用的是老版本的安装套件。预装的应用软件版本很低。比如 techbrood.com 使用的云服务器&#xff0c;其中MySQL预装版本为老版本5.1.x。而最新的mysql版本在性能、功能、安全性等方面都有了很多的改进。要从最新版本获益&a…

遍历处理path及其子目录所有文件

遍历处理path及其子目录所有文件Sub ShowAllFile(Path) Set FSO CreateObject("Scripting.FileSystemObject") Set f FSO.GetFolder(Path) Set fc2 f.files For Each myfile in fc2 WScript.Echo path&"\"&myfile.name …

mysql用户和权限备份_备份MySQL用户和权限

Mysql用户在数据库Mysql的表用户中,为了备份这个表,你可以这样做&#xff1a;mysqldump -u root -p mysql user > UserTableBackup.sql对于备份所有mysql数据库并为每个数据库创建一个文件,你可以自己编写shell脚本,遵循一些可以帮助你的代码&#xff1a;# Get all database…

获取所有某格式文件到文件

扫描文件sub scan(folder_)Set fsocreateobject("scripting.filesystemobject") set folder_fso.getfolder(folder_)set filesfolder_.files遍历路径中的文件for each file in files extmid(file,InStrRev(file, ".")1) extlcase(ext) if extkuozhan then …

linux mysql 系统时间函数吗_Linux 宝库 - Mysql日期和时间函数不求人

对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6 日期和时间类型。这里是一个使用日期函数的例子。下面的查询选择了所有记录&#xff0c;其date_col的值是在最后30天以内&#xff1a;mysql> SELECT something FROM tableWHERE TO_DAYS(NOW()) - …

各种排序笔记---基于非比较排序部分

在计算机科学中&#xff0c;排序是一门基础的算法技术&#xff0c;许多算法都要以此作为基础&#xff0c;不同的排序算法有着不同的时间开销和空间开销。排序算法有非常多种&#xff0c;如我们最常用的快速排序和堆排序等算法&#xff0c;这些算法需要对序列中的数据进行比较&a…

vbs特殊符号

常数 值 描述 vbCr Chr(13) 回车符。 vbCrLf Chr(13) & Chr(10) 回车符与换行符。 vbFormFeed Chr(12) 换页符&#xff1b;在 Microsoft Windows 中不适用。 vbLf Chr(10) 换行符。 vbNewLine Chr(13) & Chr(10) 或 Chr(10) 平台指定的新行字符&#xff1b;适用于…

在mysql表中如何变换列和行_在SQL中转换列和行的简单方法?

有几种方法可以转换这些数据。在你最初的帖子中&#xff0c;你说PIVOT对于这个场景来说似乎太复杂了&#xff0c;但是可以很容易地使用UNPIVOT和PIVOTSQL Server中的函数。但是&#xff0c;如果您无法访问这些函数&#xff0c;则可以使用UNION ALL到UNPIVOT然后是一个具有CASE向…

powerpoint文字教程

建立空白演示文稿 如果所有模板都不满足要求&#xff0c;或者想制作一个特殊的、具有与众不同外观的演示文稿&#xff0c;可从一个空白演示文稿开始&#xff0c;自建背景设计、配色方案和一些样式特性。选择“空演示文稿”选项&#xff0c;或者在PowerPoint 2000窗口中&#xf…