Цепной код Hyperledger Fabric - не удалось прочитать данные из другого цепного кода с помощью InvokeChaincode.Статус 200, но полезная нагрузка пуста - PullRequest
0 голосов
/ 04 октября 2018

Я работаю над цепным кодом, где мне нужно прочитать данные, ранее сохраненные из другого.

Они создаются на одном канале, и я могу использовать их по отдельности для чтения и записи данных по отдельности.

Вы можете реплицировать его, используя цепной код marble, устанавливая его с разными именами на одном и том же узле.

В одном из них (A) я реализовал invokeChaincode (B) для чтения данныххранится в B следующим образом:

func (chaincode *SimpleChaincode) queryMarblesFromAnotherChaincode(stub shim.ChaincodeStubInterface, args []string) peer.Response {

    queryMarble := "queryMarble"

    if len(args) != 3 {
        return shim.Error("Incorrect number of arguments. Expecting 3")
    }

    chaincodeName := args[0]
    chaincodeArgs := toChaincodeArgs(queryMarble, args[1])
    chaincodeChannel := args[2]

    response := stub.InvokeChaincode(chaincodeName, chaincodeArgs, chaincodeChannel)
    if response.Status != shim.OK {
        return shim.Error(fmt.Sprintf("Failed to query chaincode: %s", response.Payload))
    }
    return shim.Success(response.Payload)
}

При запуске этого метода с использованием peer chaincode invoke .. я получаю status: 200, но полезная нагрузка пуста.

Не могли бы вы посоветовать, что я делаю не так?

1 Ответ

0 голосов
/ 05 октября 2018

Если shim.success(response.Payload) пусто, наиболее вероятно, что цепной код B возвращает пустую полезную нагрузку.Чтобы быть уверенным, попробуйте записать, что response.Payload здесь в цепочке кода A, прежде чем вернуться.

Кроме того, добавьте некоторые записи в код цепи B, чтобы вы могли точно увидеть, какой код цепи B предположительно возвращается в код цепи A.

...