hyperledger-fabric - Hyperledger Fabric golang 链码无法按预期工作,手动将数据存储在分类帐上,但在尝试通过函数调用存储时却没有
问题描述
我正在尝试将资金转移记录存储在超级账本结构上。我在 go lang 中编写了链代码。当我在 initLedger 函数中添加数据时它工作正常。但是当我从 createTransfer(我将提供两个代码)等其他函数调用它时,它显示成功的交易,但是当我检索链数据时,它没有出现在其中。
传输结构
type Transfer struct {
TransferID string `json:"transferID"`
FromAccount string `json:"fromAccount"`
ToAccount string `json:"toAcount"`
Amount string `json:"amount"`
}
此函数将数据写入分类帐:当我直接在 initLedger 方法中调用它时它工作正常
func writeTransferToLedger(APIStub shim.ChaincodeStubInterface, transfers []Transfer) sc.Response {
for i := 0; i < len(transfers); i++ {
key := transfers[i].TransferID
chkBytes, _ := APIStub.GetState(key)
if chkBytes == nil {
asBytes, _ := json.Marshal(transfers[i])
err := APIStub.PutState(transfers[i].TransferID, asBytes)
if err != nil {
return shim.Error(err.Error())
}
} else {
msg := "Transfer already exist" + key + " Failure---------------"
return shim.Error(msg)
}
}
return shim.Success([]byte("Write to Ledger"))
}
在 createTransfer 函数中调用 writeToTransferLedger 方法:
func (s *SmartContract) createTransfer(APIStub shim.ChaincodeStubInterface, args []string) sc.Response {
if len(args) != 4 {
return shim.Error("Incorrect Number of arguments for transfer func, Expecting 4")
}
transfers := []Transfer{Transfer{TransferID: args[0], FromAccount: args[1], ToAccount: args[2], Amount: args[3]}}
writeTransferToLedger(APIStub, transfers)
return shim.Success([]byte("stored:" + args[0] + args[1] + args[2] + args[3]))
}
当我从nodesdk代码调用createTransfer时,它成功执行但是当我从链代码中检索数据时没有返回。
我希望它与 createTransfer 函数一起使用,因为它与 writeTransferToLedger 一起使用。
在 initLedger 方法中,我用给定的数据创建了传输结构,并调用了 writeTransferToLedger 函数代码如下:
transfer := []Transfer{
{TransferID: "1233", FromAccount: "US_John_Doe_123", ToAccount: "UK_Alice_456", Amount: "200"},
{TransferID: "231", FromAccount: "JPY_Alice_456", ToAccount: "UK_John_Doe", Amount: "3000"},
}
writeTransferToLedger(APIstub, transfer)
解决方案
谢谢你的帮助 。我已经解决了这个问题。我在尝试从客户分类帐中检索数据时调用了调用函数。我必须查询分类帐并从分类帐中获取传输数据。
推荐阅读
- google-apps-script - Google App Script if then 语句返回错误值
- android - 类型推断失败。预期类型不匹配:响应
发现延期 > - powershell - add_Click 不执行块内的代码
- javascript - 如何使用 fotorama(嵌入 Bootstrap 3 模态)查看动态图像?
- java - 如何对带注释的方法的每个方法调用执行某些操作?
- javascript - 更新版本的删除按钮作为 Fabricjs 中对象的控件替换?
- java - 如何检查 Selenium 中是否存在 webelement?
- c# - 如何根据数据表生成脚本?(将 DataTable 转换为 SQL 查询)
- android - Android:当设备位置已启用时,FusedLocationProviderClient 不会调用 onLocationResult()
- ssl - 非阻塞 SSL 套接字最可靠的高级语言/库是什么?