将状态标记为已消耗而不更改Corda中的内容

问题描述 投票:0回答:1

我正在研究一个简单的用例,其中我需要将状态作为事务中的输入并生成新的输出状态。但我希望国家的内容是一样的。我只想将输入状态标记为已消耗并生成具有相同内容的新输出状态。我写的Cordapp是用Java编写的。

我怎么能在Corda做到这一点?

java blockchain rpc corda
1个回答
2
投票

为此,您需要执行三个步骤:

  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);
© www.soinside.com 2019 - 2024. All rights reserved.