Пометка состояния как потребляемого без изменения его содержимого в Corda - PullRequest
0 голосов
/ 17 сентября 2018

Я работаю над простым вариантом использования, в котором мне нужно взять состояние в качестве входных данных в транзакции и сгенерировать новое выходное состояние. Но я хочу, чтобы содержание государства было таким же. Я просто хочу пометить состояние ввода как использованное и сгенерировать новое состояние вывода с тем же содержимым. Cordapp, который я пишу, написан на Java.

Как я могу это сделать в Корде?

1 Ответ

0 голосов
/ 17 сентября 2018

Для этого вам нужно выполнить три шага:

  1. Получить состояние ввода, которое вы хотите использовать
  2. Сделать состояние вывода, которое является копией состояния ввода
  3. Добавьте их обоих в построитель транзакций

Вот пример выполнения этого для состояния, представляющего обязательство:

// Retrieve the state using its linear ID.
QueryCriteria queryCriteria = new QueryCriteria.LinearStateQueryCriteria(
        null,
        ImmutableList.of(linearId),
        Vault.StateStatus.UNCONSUMED,
        null);

List<StateAndRef<Obligation>> obligations = getServiceHub().getVaultService().queryBy(Obligation.class, queryCriteria).getStates();
if (obligations.size() != 1) {
    throw new FlowException(String.format("Obligation with id %s not found.", linearId));
}
StateAndRef<Obligation> inputStateAndRef = obligations.get(0);
Obligation input = inputStateAndRef.getState().getData();

// Create the new output state.
Obligation output = new Obligation(input.getAmount(), input.getLender(), input.getBorrower(), input.getPaid(), input.getLinearId());

// Creating the transaction builder (don't forget to add a command!)
final TransactionBuilder builder = new TransactionBuilder(notary)
        .addInputState(inputStateAndRef)
        .addOutputState(output, OBLIGATION_CONTRACT_ID);
...