2016-06-27 2 views
1

Командлет Invoke метод интерфейса Chaincode возвращает два значения:Какова цель первого возвращаемого значения вызова цепочки?

Invoke(stub *ChaincodeStub, function string, args []string) ([]byte, error) 

source

Однако первое возвращаемое значение, как представляется, игнорируется. В примерах он всегда установлен в nil, и, похоже, нет никакого способа получить значение после проверки транзакции (не включенной в блоки).

Ожидаемое поведение? Если да, то почему это возвращаемое значение существует?

Существует еще один способ сохранить это значение, испустив событие с использованием stub.SetEvent, но это довольно неприятно, когда существует прямое возвращаемое значение.

+1

Не указывайте ссылку на весь код, скопируйте/вставьте здесь соответствующий код по вашему вопросу – Garf365

ответ

0

Большинство существующих образцов тривиально и возвращают нуль. вероятно, не идеальны, но они такие, какие они есть, в настоящее время. Однако цель состоит в том, чтобы предоставить Invoke для возврата значения ответа.

1

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

Например рассмотрим вызова пользователя chaincode А через ниже метод, который, в свою очередь, вызывает Б.

func (t *ChaincodeA) Invoke(stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) { 
    //DO stuff 
    valFromB, err := stub.InvokeChaincode("ChaincodeBDeployName", "someFunc", args) 

    fmt.Println(string(valFromB)) 
    return nil,nil 
} 

Вот chaincode B для справки

func (t *ChaincodeB) Invoke(stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) { 
    return []byte("This is a value from B"),nil 
} 

Это должно напечатать ниже консоли при выполнении, показывая, что это значение было получено:

Это значение от B

+0

Итак, вызовы синхронны между цепочными кодами. Спасибо, это не очевидно. – Lesterpig

Смежные вопросы