💪Расширенные возможности
Ещё немного интересной инфы про KLYNTAR VM
Как KLYNTAR рассчитывает энергию для выполнения смарт-контрактов
Выполнение смарт-контрактов должно быть контролируемым - нам ведь не нужно чтоб наш процессор сгорел и нода остановилась. Нужно учитывать тот факт, что внутри байт-кода злоумышленник попытается спрятать бесконечный цикл или ещё каким-то образом повлиять на нормальный поток работы.
Кроме того, надо контролировать и то, сколько ресурсов будет потрачено при работе ноды. Ведь запуск функции которая просто возвращает сумму a+b явно требует меньше, чем цикл с 10 000 итераций.
В KLYNTAR VM мы будем использовать проект от EWASM для измерения работы смарт-контрактов. Вот их GitHub
Нам необходим репозиторий wasm-metering который предоставляет функцию, которую необходимо инжектировать внутрь байт-кода для измерения его выполнения
На выходе мы получим аналогичный по функционалу байт-код, но теперь выполнение операций контролируемо и идёт расчёт затрачиваемых ресурсов. Проведём небольшое исследование
Разбираемся детальней
Для этого, в README проекта представлен пример:
Здесь определяется глобальная переменная energyUsed и лимит энергии. Как видно из этих строчек, модуль берёт голый байт-код и возвращает изменённый байт-код куда инжектит ссылку на функцию извне(в данном случае это функция energyUsed из импортируемого объекта metering).
При превышении лимита - работа останавливается и мы ловим исключения. Хоть документация EWASM и описывает принцип работы, мы всё же не просто услышим, но и увидим как это работает.
Кстати, вот детальное и хорошее описание на GitHub
Смотрим на видоизменённый WASM модуль
После того, как произойдут изменения над нашим модулем, давайте запишем этот набор байт в .wasm файл, а затем декомпилируем в .wat откуда можно будет посмотреть на внутренности
Изначальный AssemblyScript модуль. Выберем что-то более сложное, например цикл
Хоть это можно было сделать через умножение, всё же сделаем так.
Получаем .wasm код
Запись в .wasm
Получим такой вывод
Видно что размер увеличился и сейчас будет видно почему. Прежде, протестируем работу
Декомпиляция в .wat
И смотрим на файл
Видим нашу функцию
Таким образом везде в коде где будет встречаться вызов этой функции, мы будем понимать что идёт счёт газа(энергии). Так можно заметить, что функция вызывается при входе в главную функцию testAdding, в начале цикла, при возврате из функции и так далее.
С помощью этих инструментов можете сами поиграть и протестировать механику работы
Зачем всё это
На основании этих и представленных ранее механизмов мы и предоставим мощность и силу возможностей KLYNTAR.
Вы сможете с помощью расчётных таблиц назначать цену опкодам за выполнение, предоставлять доступ к импортируемым объектам, предоставлять разные API для контрактов и многое другое. Каждый симбиот может самостоятельно конфигурировать свою виртуальную машину.
Следите за обновлениями на этой странице чтобы не пропускать ничего важного
Ссылки
Last updated