Hyperledger中的复合键功能

时间:2017-07-05 06:35:26

标签: composite-primary-key hyperledger

我需要在hyperledger中实现复合键,这样我就可以根据放入分类帐的属性获得一个唯一键。函数CreateCompositeKey(objectType string, attributes []string)(string,error) 接受objectType和属性字符串。我无法在网上找到任何这样的例子,如何传递复合键的相关属性以及输出的输出方式是什么?
因此,应该使用Composite键的方法是首先创建一个键,然后将其推送到带有PutState(key string, value []byte) error的区块链,其中PutState中的hey是CreateCompositeKey的输出?如果没有,那么如何使用复合键?
同样在

GetStateByPartialCompositeKey(objectType string, keys []string) (StateQueryIteratorInterface, error)

我们想要通过传递给函数来进行查询的键是什么?什么是输出数据类型" StateQueryIteratorInterface"和" HistoryQueryIteratorInterface"?
我对编程很新,并且没有数据库的先验知识,所以我对基本的东西感到困惑。我真的很感激一些帮助!

3 个答案:

答案 0 :(得分:2)

该函数只是通过将属性组合为单个字符串来创建密钥。它的应用程序是我们需要在分类账上存储一种类型的多个实例的地方。这些实例的键将通过属性的组合来构造,例如,“ Order” + ID,产生[“ Order1”,“ Order2”,...]。 当您打算根据范围查询中的键的组成部分来搜索资产时,就会使用此功能。

SHIM中的'CreateCompositeKey'基于多个属性的组合来构造复合键(实际上是唯一键)。

反函数是SplitCompositeKey,它将CompositeKey拆分为属性。

func SplitCompositeKey(compositeKey字符串)(字符串,[]字符串,错误)

“ {TestTradeWorkflow_Agreement”函数this code对理解整个过程也很有用:

答案 1 :(得分:1)

在Hyperledger Fabric中,有两个示例链代码,显示如何使用复合键:

  1. Marbles
  2. Map
  3. 基本上就像你说的那样:

    key, err := stub.CreateCompositeKey(index, []string{key1, key2, key3})
    
    // Skiped
    
    stub.PutState(key, value)
    

答案 2 :(得分:1)

对于Java实现,它未在文档/示例中明确提出,进行了一些挖掘,您可以使用“ compositeKey.toString()”作为组合键。

以下示例:

final String compositeKey = stub.createCompositeKey("my-key-part-1", "my-key-part-2").toString();
stub.putStringState(compositeKey, myJSONString); // use this
stub.putState(compositeKey, myJSONString.getBytes()); // or this