2016-07-20 3 views
0

Я пытаюсь создать цепочку цепочек гиперссылок, доступ к которой осуществляется через веб-API, который передает json-объекты в код. Однако всякий раз, когда я выполняю метод invoke, я не могу фактически вернуть значения пользователю в ответ json.Как вернуть значения в Invoke json response

Например, вот некоторые примеры кода:

func (t *TLCChaincode) Invoke(stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) { 
    //Do some stuff 
    return []byte("Some string"), nil 
} 

И некоторые примеры кода для возвращения ошибки

func (t *TLCChaincode) Invoke(stub *shim.ChaincodeStub, function string, args []string) ([]byte, error) { 
    //Try to do some stuff 
    //Get some sort of error 
    return nil, errors.New("someError") 
} 

однако оба эти возвращать сообщение, как это, с сообщением всегда быть некоторые случайные строки символов, как показано ниже (я подозреваю, что какой-то хэш):

{ 
    "jsonrpc": "2.0", 
    "result": { 
    "status": "OK", 
    "message": "1e1123e3-b484-4120-a28e-c3a8db384557" 
    }, 
    "id": 11 
} 

As вы можете видеть, этот ответ не содержит ни ответа, который я возвращал (как в первом случае), либо ошибки, которую я вернул (во втором случае). Как я могу получить возвращаемые байты или возвращенную ошибку в возвращаемом json?

Редактировать: Обратите внимание, что если я вызываю метод вызова из другого кода цепи, он получает правильные возвращаемые значения. Это происходит только тогда, когда пользователю возвращается, что он не работает должным образом.

ответ

1

Если вам нужно получить возвращаемое значение, как только Invoke обрабатывается (входит в блок), лучше всего использовать некоторые события (на данный момент, я думаю).

В вашем chaincode, просто настроить событие с:

func (stub *ChaincodeStub) SetEvent(name string, payload []byte) error 

GoDoc

Вы можете прослушивать события в приложении с помощью SDK или Protobuf сообщения непосредственно. Я делаю это так на предварительном просмотре разработчика; но кажется, что стандартный способ получить результат Invoke - опросить блок-цепочку через Queries.

Существует связанный вопрос GitHub here.

2

"Invoke" не является синхронным вызовом. Одноранговое сообщение генерирует это сообщение ОК сразу после получения вашего веб-запроса. Позже, когда сверстники проверки будут пытаться сгенерировать новый блок, этот метод «invoke» будет выполнен вместе с другими кэшированными транзакциями.

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

В качестве обходного пути мы используем другой запрос запроса, чтобы проверить статус этого отправленного Invoke. Было бы здорово, если бы кто-нибудь мог предложить лучшее решение.

+0

Ну, по крайней мере сейчас я действительно понимаю, почему это не работает так, как я ожидаю. Знаете ли вы, как я буду проверять статус вызовов вызова с помощью запроса? Это вряд ли идеально, но я мог бы заставить его работать. –

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

  • Нет связанных вопросов^_^