在 Hyperledger Fabric 1.4 中存储非字符串

Store non-strings in Hyperledger Fabric 1.4

据我所知,只能通过 submitTransaction.

将字符串值从 Node SDK 传递到链代码

但是,从链代码的角度来看,创建包含布尔值和整数的资产并存储它们没有问题。

因此我的问题是:存储非字符串属性是否被认为是一种不好的做法,如果不是,实现它的最佳方法是什么?当然,我可以发送字符串,然后智能合约会将其转换回 bool/ints,但这听起来很丑陋。我还猜想我可以发送 JSON 而不是发送 ...args,但同样非常难看。

好的,这是从 JAVA HLF 实施的角度来看的。假设 Node JS 和 Java 具有相同的功能,'putState' 方法接受 'byte' 或 'String' 数据类型,据我所知,putState 是唯一的方法将数据放入分类帐。所以,你不能在我的视图中放置除字符串/字节以外的任何内容。所以,虽然它很丑陋,但我认为将 String 或 bytes 放入 ledger 是放置和获取数据的唯一方法(至少从 HLF 1.4 开始)。

所有写入 ledger 的数据实际上会在后台存储到 'CouchDB',因此如果您将 JSON 字符串写入 ledger,您可以稍后写入 'CouchDB query' 并获取数据也来自分类帐(就像您使用 SQL 从传统 RDBMS 获取数据一样)。

关键是你现在想将非字符串数据类型存储到ledger.But,Node JS / Java SDK只支持putState方法只接受字符串或字节。

https://hyperledger.github.io/fabric-chaincode-node/release-1.4/api/fabric-shim.ChaincodeStub.html

例如,如果你想在 putState method.So 上输入数字或布尔值,在 submitTransaction 的 SDK 端,你必须 JSON.stringify 输入数据(如果它不是 String 数据类型)。不幸的是,这是我们现在唯一的方法。

您总是需要进行某种类型的转换 | serialization/deserialization 在客户端和实际链码本身之间。

Chaincode 本身只接受字节数组作为参数。如果您的参数有 simple/primitive 类型(字符串、整数、布尔值等),那么将它们作为字符串从客户端传递并在链代码本身中转换它们是最直接的方法。我承认它不是超级干净,但考虑到我们支持多种语言的客户端和链代码并允许您混合和匹配,我们不能对类型使用语言的本机序列化。