代码之家  ›  专栏  ›  技术社区  ›  Block Crasher

golang链码不能按预期工作,手动将数据存储在分类帐上,但在尝试通过函数调用存储数据时不能这样做

  •  0
  • Block Crasher  · 技术社区  · 7 年前

    我试图在超账本结构上存储资金转移记录。我已经在go lang中编写了链代码。当我在initLedger函数中添加数据时,它工作得很好。但当我从createTransfer(我将提供两个代码)等其他函数调用它时,它会显示成功的事务,但当我检索链数据时,它不会出现在其中。

    传输结构

    type Transfer struct {
        TransferID  string `json:"transferID"`
        FromAccount string `json:"fromAccount"`
        ToAccount   string `json:"toAcount"`
        Amount      string `json:"amount"`
    }
    

    这个函数将数据写入分类账:当我在in it ledger方法中直接调用它时,它工作正常

    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方法中,我用给定的数据创建了transfer struct,并调用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)
    
    0 回复  |  直到 7 年前
        1
  •  0
  •   Block Crasher    6 年前

    谢谢你的帮助。我已经解决了这个问题。 我在试图从客户分类账中检索数据时调用了invoke函数。 我必须查询分类帐并从分类帐中获取传输数据。

    推荐文章