我正在尝试在Hyperledger Fabric节点版本2.4上运行test_network。参见此处:https : //hyperledger-fabric.readthedocs.io/en/latest/test_network.html#interacting-with-the-network。
我可以使用ReadAsset和UpdateAsset函数查询网络。
但是,使用以下查询的DeleteAsset函数不起作用。
对等链码查询-C mychannel -n基本-c'{“ Args”:[“ DeleteAsset”,“ idOfasset”]}'
其中,idOfasset是我要从分类帐中删除的资产的ID或密钥。
其次,如果命令将执行,我是否要从世界数据库或状态数据库中删除资产?或者当我执行ReadAsset时,换一种说法,它是从世界状态或通道状态数据库中读取的?
谢谢,帮助会很棒。
删除资产会更改资产的状态。对于涉及修改变量状态的任何类型的操作,都invoke
将使用该命令。每个“调用”事务都将添加到分类账中的“块”中。query
当你只想查询链式代码以读取资产的当前值时使用。因此,invoke
代替query
你的命令使用。
谈到你的第二个问题
其次,如果命令将执行,我是否要从世界数据库或状态数据库中删除资产?或者当我执行ReadAsset时,换一种说法,它是从世界状态或通道状态数据库中读取的?
世界数据库和州数据库与你的CouchDB / LevelDB相同。从Hyperledger Fabric的文档中:
有一个世界状态-一个数据库,该数据库保存一组分类账状态的当前值。世界状态使程序可以轻松地直接访问状态的当前值,而不必通过遍历整个事务日志来计算状态值
你可以在此处了解更多信息。
当执行删除操作时,Hyperledger Fabric并不会真正“删除”资产。区块链是不可变的,不会删除区块链上的任何数据。删除只是另一个事务,它说某些数据已删除,因此世界状态数据库可以删除该数据。
你可以参考此以获取更多信息。