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
поле. Это позволяет отправляющей стороне соотносить подачу команды и полученную транзакцию. Однако вам придется создать оболочку, объединяющую службы команд и транзакций самостоятельно.