在Hyperledger Fabric 1.4中存储非字符串

问题描述 投票:1回答:3

根据我正在阅读的内容,只能通过submitTransaction将字符串值从Node SDK传递到链码。

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

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

hyperledger-fabric hyperledger
3个回答
1
投票

好的,这是从JAVA HLF实现的角度来看的。假设Node JS和Java具有相同的功能,则“ putState”方法采用“字节”或“字符串”数据类型,而就我所知,putState是将数据放入分类帐的唯一方法。因此,在我看来,除了字符串/字节以外,您不能输入其他任何内容。因此,尽管这很丑陋,但我认为将String或字节放入分类帐是放置和获取数据的唯一方法(至少从HLF 1.4开始)。

[所有写入分类帐的数据实际上都会存储在幕后,因此,如果您将JSON字符串写入分类帐,您以后可以编写'CouchDB查询”并从分类帐中获取数据(就像您使用SQL一样从传统的RDBMS获取数据)。


0
投票

关键是要将非字符串数据类型存储到分类帐。但是,现在,Node JS / Java SDK仅支持putState方法,只需要字符串或字节。

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

例如,如果要将Number或boolean放在putState方法上。因此在SDK端的submitTransaction处,您必须JSON.stringify输入数据(如果它不是String数据类型)。不幸的是,这是我们目前唯一的方法。


0
投票

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

Chaincode本身仅接受字节数组作为参数。如果您的参数具有简单/原始类型(字符串,整数,布尔值等),那么从客户端将它们作为字符串传递并在chaincode本身中进行转换是最简单的方法。我承认这不是很干净,但是鉴于我们支持多种语言的客户端和链码,并且允许您混合使用,因此我们不能对类型使用语言本机序列化。

© www.soinside.com 2019 - 2024. All rights reserved.