Основной канал для обсуждения вопросов, связанных с разработкой на Exonum. Github: https://github.com/exonum/ Документация: https://exonum.com/doc/ English-speaking channel: https://gitter.im/exonum/exonum Telegram https://t.me/ExonumRU
@Sanin_Ivan_twitter , еще не пробовали, но судя по официальной документации котлина, то должно работать. Насколько понимаю, нужно будет в зависимостях сервиса указать стандартную библиотеку котлина и настроить сборку исходников.
Один нюанс: т.к. каждый Икзонум-сервис загружается отдельным загрузчиком, то при такой организации для каждого типа сервиса будет загружена своя копия стандартной библиотеки котлина, что при большом числе одновременно загруженных различных типов сервисов приведет к повышенному расходу памяти (и ЦПУ на JIT и GC). Но это несущественно для большинства применений (если у вас меньше дюжины различных типов сервисов).
Вообще illegal instruction обычно говорит о том, что виртуалка на которой запущено приложение не предоставляет инструкции какие-то обычно это sse4.1
Проверить очень далеко. Нужно или запустить ноду под gdb или lldb и дождаться падения, а потом посмотреть стек трейс.
Или уже найти куда он сохранил core dump и открыть уже его чтобы стек трейс получить
@Sanin_Ivan_twitter Для сервисов существует понятие дефолтного интерфейса. Это интерфейс с пустым именем, т.е. с атрибутом #[exonum_interface]
, в котором не указан аргумент interface
.
У сервиса может быть не более одного дефолтного интерфейса, но из-за нетривиальности реализации это сейчас не проверяется на уровне дерайв-макроса ServiceDispatcher
. Если указать несколько дефолтных интерфейсов, результат неопределен (по факту, будет "включен" только один из интерфейсов).
Для именованных интерфейсов действительно пока невозможно отправить транзакцию, подписанную публичным ключом (в т.ч. через тесткит, но и на реальных узлах такое же поведение). Единственный способ обратиться к сервису через такой интерфейс - вызов из этого же или другого сервиса; как пример, этот тест или интерфейс конфигурации (последний использует более низкоуровневый API). Такое ограничение связано с тем, что интерфейсы в целом пока являются экспериментальной фичой.
Подытоживая, если цель интерфейса заключается в обработке транзакций от внешних клиентов, то сейчас нет другого пути, кроме как определять все транзакции в единственном интерфейсе.