在 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天,做个记录。
感谢寒暄的大企鹅不吝指点。