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

这篇具有很好参考价值的文章主要介绍了超级账本Fabric的世界状态操作与账本操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

超级账本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天,做个记录。

感谢寒暄的大企鹅不吝指点。文章来源地址https://www.toymoban.com/news/detail-499886.html

到了这里,关于超级账本Fabric的世界状态操作与账本操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包