Я пытался изучить Corda, и у меня есть конкретный c вариант использования для контракта, в котором участвовало несколько участников. Простите, если мое понимание неверно, и, пожалуйста, поправьте меня, если я ошибаюсь! :)
Насколько я понимаю, в контракте мы реализуем функцию проверки транзакции, которая вызывает указанный контракт. Состояние может содержать «состояние» текущей транзакции вместе с любыми данными, касающимися транзакции. Поток - это бизнес-логика c, связанная с состоянием / контрактом.
У меня есть конкретный c вариант использования, который я хочу рассмотреть в контракте, и в нем участвуют несколько сторон, которые совместно используют один и тот же информация о контракте / транзакции. Я хочу, чтобы в состоянии могли находиться несколько участников.
Чисто из того, что я понимаю, я кодировал следующее для состояния:
@BelongsToContract(MasterContract.class)
public class MasterState implements ContractState {
private final List<Party> employers = emptyList();
private final List<Party> contractors = emptyList();
private final String projectName;
public MasterState(String projectName, List<Party> employers, List<Party> contractors) {
this.projectName = projectName;
this.employers.addAll(employers);
this.contractors.addAll(contractors);
}
public String getProjectName() {
return projectName;
}
public List<Party> getEmployers() {
return employers;
}
public List<Party> getContractors() {
return contractors;
}
@Override
public List<AbstractParty> getParticipants() {
List<AbstractParty> allParts = new ArrayList<>();
allParts.addAll(employers);
allParts.addAll(contractors);
return allParts;
}
}
Я хочу иметь возможность создавать ( через команду) новый экземпляр MasterContract
, предоставив несколько «работодателей» или «подрядчиков». Я пытаюсь определить: MasterCreationFlow.call()
следующим образом:
@Suspendable
@Override
public Void call() throws FlowException {
Party notary = getServiceHub().getNetworkMapCache().getNotaryIdentities().get(0);
// Create the transaction components
JCTMasterState outputState = new JCTMasterState(projectName, Arrays.asList(getOurIdentity()), contractors);
//List of required signers:
List<PublicKey> requiredSigners = Arrays.asList(getOurIdentity().getOwningKey());
requiredSigners.addAll(getOwningKeys(contractors));
Command createCommand = new Command<>(new JCTMasterContract.Create(), requiredSigners);
...
Однако я застрял с идеей InitiateFlow()
. Похоже, что вы можете сделать это только между двумя сторонами. Я понимаю, что Корда - точка-точка. Но я хочу понять, что именно FlowSession
делает? До сих пор я читал, что FlowSession
- это всего лишь канал между двумя сторонами, который затем используется некоторым подпотоком. Есть ли способ расширить FlowSession
для создания общего сеанса между несколькими контрагентами? Или мне придется инициировать несколько потоков?
Заранее спасибо!