Готовы для анонса реализованные воркером @aerostorm1 Golos Auth & Registration Service и начало мультиплатформенной библиотеки с WebAssembly, пока в примере с golos-lib-js.
Основные веб-клиенты уже обновлены и работают с новыми версиями.
Сервис регистрации и серверной авторизации
Выделение регистрации в отдельный сервис позволило не только унифицировать код и иметь на будущее возможность быстрых правок, но и уже сейчас расширить функциональность.
Интерфейс позволяет регистрировать новые аккаунты в блокчейне Голос, поддерживается смена стилей для разных веб-клиентов, выбор языка, переадресация после успешной регистрации, добавлена обработка ошибок, защита ReCaptcha, улучшена серверная авторизация, учтены Security Headers и прочее.
К Golos Auth есть API, позволяющий использовать общий сервис для регистраций и\или серверной авторизации, чтобы не тратить время на реализацию своего backend-функционала. Кроме того, веб-клиентам, которые не хотят использовать общую регистрацию, стало значительно проще настроить свою.
Подробнее о технических деталях сервиса на
https://github.com/golos-blockchain/ui-auth
Мультиплатформенная библиотека с WebAssembly
Возможно именно она в будущем позволит доставлять изменения сразу для нескольких языков программирования + расширять функционал полезными и быстрыми утилитами. Используется как напрямую из C++ или Rust, так и через библиотеки-обертки, работающие с основой через разные механизмы.
Как пример, golos-lib-js архитектурно является оберткой для golos-lib (которая написана на Rust и скомпилирована в WebAssembly). Впрочем, большинство функций и классов библиотеки golos-lib-js пока что не используют этот модуль.
Подробнее о применении WebAssembly (WASM) на https://github.com/golos-blockchain/libs/blob/master/golos-lib-js/docs/files/wasm.md
Примером использования WASM в библиотеке можно привести класс Asset для финансовых расчетов, расшифровку сообщений мессенджера, иных функций, которые будут скоро переезжать (стриминг, криптография, в том числе для оптимизации авторизации).
Документация и стриминг операций
Советую обратить внимание на обновление разделов документации по библиотеке https://github.com/golos-blockchain/libs/tree/master/golos-lib-js/docs, а также доработку стриминга событий из блокчейна (в процессе тестирования, возможны изменения).
Старая версия библиотеки Golos-JS отправлена в архив, изменения в новом репозитарии https://github.com/golos-blockchain/libs
и NPM golos-lib-js
- https://www.npmjs.com/package/golos-lib-js
Event-плагин ноды
Немного слов об event-плагине, если раньше было нужно анализировать операции блокчейна на стороне, то теперь разного рода события возможно "инициировать" прямо из плагинов и эвалуаторов (на выходе вирт. операции).
Напомню, в нодах есть настройки ограничивающие глубину хранения истории операций. На многих нодах плагин account_history (get_account_history)
и operation_history (get_ops_in_block)
лимитированы годом-полугодом, возможны белые/черные списки
хранения тех или иных операций с целью оптимизации объема и скорости.
Выделение в отдельный плагин таких событий как comment_feed
(сообщении о новом посте в ленте вашей подписки), account_reputation
(изменения репутации в профиле), comment_mention
(упоминания @ника), и многих других виртуальных операций, которые могут быть исключены из хранения на нодах без включенного плагина.
Например, для потребностей вашего клиента настраивается хранение только нескольких операций по "белому списку" (или выборке логинов) в account_history и operation_history. При этом в event_plugin (get_events_in_block)
есть всё что в get_ops_in_block + события, с отдельной настройкой количества блоков истории.
добавить event_plugin к списку плагинов
и
store-evaluator-events = true
event-blocks = 1200 # час
Это добавляет отдельный смысл для плагина и гибкости конструктора при конфигурировании АПИ-нод (с account_history
/ operation_history
/ event_plugin
).
@lex,
То-есть я правильно понял, что пока есть только Asset имплементация в коре, остальное так и остается в js варианте?
Я просто сделал свою либу на java и использую исходники js библиотеки для отправки транзакции. Работает очень медленно, так как интерпретатор javascript в java очень медленный. 12-20 секунд, что бы подписать транзакцию.
Потому думаю, на что заменить. Есть два варианта, как то вызвать node.js библиотеку из кода явы, что не очень. Есть так же возможность исполнять wasm байткод из явы и там обещают почти нативную скорость, должно быть быстрее. Но судя по тому, что я увидел на гитхабе, там еще совсем пусто, только класс Asset.
Про сериализацию и подпись транзакции ждать долго я так думаю. Сериализацию можно и дальше использовать из js варианта. Это работает быстро. Хотя бы подпись транзакции реализовать в коре, там с простыми числами вычисления, потому так медленно. Я в этом не соображаю. Даже не знаю с какой стороны подступиться, так бы на яве сделал бы давно.
@bitwheeze, в цитировании вроде понятно написано:
Примером использования WASM в библиотеке можно привести
Вот это и будет на WASM в ближайшее время, что в задачах.
Остальное, зависит либо от желания разработчика или спроса сообщества на оптимизацию (WASM для этого и начинали, чтобы переносить туда тяжелые вещи). Про подпись транзакции уточню...
@lex, спасибо. Я просто далек от обсуждения планов работ, потому не знаю, что значит "скоро". Видел только две заявки и там очень много всего. wasm только малая часть и непонятно, что конкретно под этим подразумевается. Мне бы лично этих двух заявок хватило на пол года работ 😂
Я кстати нашел EOS Java библиотеку. Там вроде подпись транзакции реализована. Я думаю принцип должен быть одинаков для EOS и GOLOS. Там только какие то Actions, видимо для работы с контрактами. Если подпись транзакции понадобится раньше, чем будет сделан wasm, то попытаюсь выдернуть подпись транзакций из нее.
@bitwheeze, ну напр. вынос криптографии в WASM (для ускорения авторизации) в том числе приближает и к подписи, посмотрим.
В заявке речь про "обновление зависимостей (старья и осв. места) и оптимизацию авторизации/криптографии". А так, все тяжелое и медленное есть планы выносить и оптимизировать (заодно и документируя что было не очень сделано в JS либе).
Для примера новые виртуальные операции, возможно кто-то будет готов добавить их и к своим сервисам, упоминание @ника
уведомление о новом посте автора на кого были подписаны
изменение репутации аккаунта из профиля