Я новичок в DAML, я хотел запросить все активные контракты, используя привязку Java, Bot API и сохранить их в БД (или в памяти) для будущего запроса.
Согласно документации, LedgerViewможет отслеживать активные контракты в памяти. Однако я не могу успешно транслировать активные контракты.
Вы можете найти мой код здесь, https://github.com/agrawald/daml-java-bot. В приведенном выше коде есть задача расписания, которой я не очень горжусь.
Код для класса, в котором я создаю DamlLedgerClient
и запустите задание по расписанию, чтобы вызвать Bot
. Пожалуйста, обратите внимание
@Slf4j
@Service
@RequiredArgsConstructor
public class DamlContractSvc implements InitializingBean {
@Value("${daml.host}")
private String host;
@Value("${daml.port}")
private int port;
@Value("${daml.appId}")
private String appId;
@Value("${daml.party}")
private String party;
@Value("${daml.packageId}")
private String packageId;
@Autowired(required = true)
private ContractCache contractCache;
private DamlLedgerClient client;
@Scheduled(fixedDelay = 5000)
public void fetch() {
final TransactionFilter transactionFilter = new FiltersByParty(
Collections.singletonMap(party, NoFilter.instance));
Bot.wire(appId, client, transactionFilter, (ledgerView) -> Flowable.empty(),
contractCache);
}
@Override
public void afterPropertiesSet() throws Exception {
client = DamlLedgerClient.forHostWithLedgerIdDiscovery(host, port, Optional.empty());
client.connect();
}
}
Я считаю, что мне нужно запустить Command
на (ledgerView) -> Flowable.empty()
.
contractCache
- это класс, который берет объект CreatedContract
и загружает его в кэш.
Возможно, я что-то делаю не так. пожалуйста поправьте меня.