Java Ledger API - вернуть contractId в команде отправки

Есть ли способ автоматического возврата contractId генерируется командой вроде:

client.getCommandSubmissionClient().submit(...).blockingGet();

Если нет, как лучше это сделать?

2 ответа

Простой способ найти искомую транзакцию будет выглядеть примерно так:

client.getTransactionsClient()
  .getTransactions(LedgerOffset.LedgerBegin.getInstance(), new FiltersByParty(Collections.singletonMap(party, NoFilter.instance)), false)
  .filter(t => "MyCommandId".equals(t.getCommandId))
  .singleOrError()
  .blockingGet()

Обратите внимание, что здесь мы читаем из LedgerBegin, Обычно вы запрашиваете конец книги через client.getTransactionsClient().getLedgerEnd() перед отправкой команды и используйте это смещение для подписки на транзакции.

Нет встроенного синхронного вызова API, который возвращает результирующую транзакцию (успешной) отправки команды. Служба команд возвращает только завершение команды (т. Е. Успех / сбой).

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

Другие вопросы по тегам