Как вызвать цепной код из другого цепочечного кода, развернутого на двух разных одноранговых узлах организации, подключенных по одному каналу в hyperledger-fabric? - PullRequest
0 голосов
/ 11 мая 2018

Я написал цепной код1 (развернутый на одном узле ORG1), который принимает данные от пользователя и сохраняет их в бухгалтерской книге.Теперь я хочу написать chaincode2 (развернутый на узле ORG2), который берет некоторые данные из chaincode1 для вычисления.Этот chaincode2 должен вызываться chaincode1 с конкретными деталями, необходимыми для вычислений.Как мне достичь этого и где его проверить?

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Начнем с того, что существует несколько предварительных условий, таких как:

  1. Если вы хотите иметь chaincode1 для вызова chaincode2, вам нужно, чтобы оба цепных кода были установлены для одного и того же партнера и
  2. Необходимо убедиться, что эта равноправная часть обоих каналов

Далее необходимо использовать следующий API:

// InvokeChaincode locally calls the specified chaincode `Invoke` using the
// same transaction context; that is, chaincode calling chaincode doesn't
// create a new transaction message.
// If the called chaincode is on the same channel, it simply adds the called
// chaincode read set and write set to the calling transaction.
// If the called chaincode is on a different channel,
// only the Response is returned to the calling chaincode; any PutState calls
// from the called chaincode will not have any effect on the ledger; that is,
// the called chaincode on a different channel will not have its read set
// and write set applied to the transaction. Only the calling chaincode's
// read set and write set will be applied to the transaction. Effectively
// the called chaincode on a different channel is a `Query`, which does not
// participate in state validation checks in subsequent commit phase.
// If `channel` is empty, the caller's channel is assumed.
InvokeChaincode(chaincodeName string, args [][]byte, channel string) pb.Response

Вот пример:

chainCodeArgs := util.ToChaincodeArgs("arg1", "arg2")
response := stub.InvokeChaincode("chaincodeName", chainCodeArgs, "channelID")

if response.Status != shim.OK {
    return shim.Error(response.Message)
}
0 голосов
/ 12 мая 2018

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

func (stub *TestAPIStub) InvokeChaincode(chaincode1 string, args [][]byte, channel string) pb.Response {
   return pb.Response{}
}

Вы можете обратиться к этому документу , чтобы понять, как интеллектуальный контракт вызывает или вызывает "цепной код"еще один умный контракт.

...