0

我在 Hyperledger Fabric 的数据库中存储生成的 ecdsa 私钥时遇到问题。

我正在做的是使用 ecdsa 提供的 ecdsa.GenerateKey(elliptic.P224(), rand.Reader) 函数,并尝试使用 shim 的 PutState() 函数将该密钥存储在分类帐中。结构中的变量类型是 ecdsa.PrivateKey 但是当我尝试链码似乎停止并出现以下错误时:

错误:无法组装交易:ProposalResponsePayloads 不匹配 - 提案响应:版本:1 响应:

当然,这表明链码没有安装在两个组织对等点中。但是我有。然后我尝试将 ecdsa.PrivateKey 转换为字节,然后转换为字符串,但似乎没有任何效果。我将附上下面的代码。

    type UserDetails struct {
ObjectType string          `json:"docType"`
FirstName  string          `json:"firstName"`
LastName   string          `json:"lastName"`
PublicKey  ecdsa.PublicKey `json:"publicKey"`
PrivateKey []byte          `json:"privateKey"`
    }

以上是我的结构

    priv, err := ecdsa.GenerateKey(elliptic.P224(), rand.Reader)
if err != nil {
    fmt.Println(err)
}

enc_key := priv.D.Bytes()
fmt.Println(enc_key)

bytesPrivK := string(enc_key)



objectType := "userDetails"
userDetailsReg := &UserDetails{objectType, firstName, lastName, *ecdsaPublicKey, enc_key}
userDetailsJSONasBytes, err := json.Marshal(userDetailsReg)
if err != nil {
    return shim.Error(err.Error())
}
fmt.Println(userDetailsReg)
// === Save userDetails to state ===
err = stub.PutState(lastName, userDetailsJSONasBytes)
if err != nil {
    return shim.Error(err.Error())
}

我还尝试使用 ecies 包生成一个 ecies 私钥,然后将其转换为 ecdsa 并存储它,但仍然是同样的错误。我使用了 ecies 因为我需要使用 ecies 加密来加密消息。

prv, err := ecies.GenerateKey(rand.Reader, ecies.DefaultCurve, nil)
if err != nil {
    fmt.Println(err.Error())
}

eciesPrivatePem, err1 := ecies.MarshalPrivate(prv)
if err1 != nil {
    fmt.Println(err1)
}
encodedToStr := string(eciesPrivatePem)

ecdsaPrivate := prv.ExportECDSA()

在这里,我尝试存储在 ecies.PrivateKey 类型或字符串甚至 ecdsa.PrivateKey 但总是得到相同的错误。

为此,我正在使用 Hyperledger Fabric 和 CouchDB。有谁知道为什么我不能将它存储为字符串?尽管其他 2 个变量是字符串和 1 个 ecdsa.PublicKey 类型,但即使作为字符串也不能存储它,这似乎真的很奇怪。我在日志中找不到任何其他指示此处更多内容的错误。

任何帮助或建议将不胜感激。

谢谢

4

1 回答 1

0

我发现问题确实是由同行产生的。我遇到的背书政策错误与同行有关,我很难找到解决方案。

所以,问题在于,在我的链代码中,我将一个密钥存储在分类帐中,该密钥是通过一个函数生成的,我必须将随机变量作为参数传递:rand io.Reader

每次在每个对等点中创建的随机变量都不同,因此导致对等点发生冲突。

总而言之,请记住,每次您创建并运行链代码时,您都会将其安装在 2 个或更多对等节点中,并且每个对等节点以不同的方式运行链代码!很重要。

谢谢你。

于 2019-08-14T12:07:19.763 回答