【发布时间】:2018-11-16 21:45:45
【问题描述】:
假设有两个节点,Alice 和 Bob。爱丽丝有一个她想让鲍勃知道的状态。 Alice 如何将状态发送给 Bob 并让他将其存储在他的保险库中?
【问题讨论】:
标签: corda
假设有两个节点,Alice 和 Bob。爱丽丝有一个她想让鲍勃知道的状态。 Alice 如何将状态发送给 Bob 并让他将其存储在他的保险库中?
【问题讨论】:
标签: corda
您将需要一个发起者和一个响应者流:
发起者流程
@InitiatingFlow
@StartableByRPC
public class Initiator extends FlowLogic<Void> {
private final UUID stateId;
private final Party otherParty;
private final ProgressTracker progressTracker = new ProgressTracker();
public Initiator(UUID stateId, Party otherParty) {
this.stateId = stateId;
this.otherParty = otherParty;
}
@Override
public ProgressTracker getProgressTracker() {
return progressTracker;
}
@Suspendable
@Override
public Void call() throws FlowException {
// Find the correct state.
LinearStateQueryCriteria criteria = new LinearStateQueryCriteria(null, Collections.singletonList(stateId));
Vault.Page<IOUState> queryResults = getServiceHub().getVaultService().queryBy(IOUState.class, criteria);
if (queryResults.getStates().size() != 1)
throw new IllegalStateException("Not exactly one match for the provided ID.");
StateAndRef<IOUState> stateAndRef = queryResults.getStates().get(0);
// Find the transaction that created this state.
SecureHash creatingTransactionHash = stateAndRef.getRef().getTxhash();
SignedTransaction creatingTransaction = getServiceHub().getValidatedTransactions().getTransaction(creatingTransactionHash);
// Send the transaction to the counterparty.
final FlowSession counterpartySession = initiateFlow(otherParty);
subFlow(new SendTransactionFlow(counterpartySession, creatingTransaction));
return null;
}
}
响应者流程
@InitiatedBy(Initiator.class)
public class Responder extends FlowLogic<Void> {
private final FlowSession counterpartySession;
public Responder(FlowSession counterpartySession) {
this.counterpartySession = counterpartySession;
}
@Suspendable
@Override
public Void call() throws FlowException {
// Receive the transaction and store all its states.
// If we don't pass `ALL_VISIBLE`, only the states for which the node is one of the `participants` will be stored.
subFlow(new ReceiveTransactionFlow(counterpartySession, true, StatesToRecord.ALL_VISIBLE));
return null;
}
}
【讨论】: