Cryptonews

NeoGo v0.119.0 нацелен на готовность к хард-форку Gorgon и исправляет 41 несоответствие виртуальной машины

Source
CryptoNewsTrend
Published
NeoGo v0.119.0 нацелен на готовность к хард-форку Gorgon и исправляет 41 несоответствие виртуальной машины

Neo SPCC выпустила NeoGo v0.119.0 «Yawl», в котором представлены изменения протокола, которые активируются в предстоящем хард-форке Gorgon, устранены 41 разница в транзакциях MainNet между NeoGo и эталонным узлом C#, а также реализована оптимизация производительности для операторов узлов. Этот выпуск совместим с узлом C# v3.9.2 и не требует повторной синхронизации базы данных.

Обновление появляется, когда инфраструктурные команды Neo готовятся к Gorgon, следующему хард-форку сети. В апреле Совет Neo проголосовал за отсрочку предложенного снижения комиссии за исполнение в пользу ожидания модели ценообразования динамического кода операции Gorgon, которую Neo SPCC разработала, чтобы сделать стандартные транзакции значительно дешевле, в то время как вредоносные транзакции становятся экспоненциально дороже. Дата развертывания хард-форка не установлена.

Изменения в протоколе Горгоны

Некоторые изменения поведения в версии 0.119.0 вступают в силу только при активации Горгоны. К ним относятся более строгая обработка недопустимых аргументов криптографической подписи в операциях CryptoLib и System.Crypto, которые теперь будут вызывать ОШИБКУ вместо молчаливого продолжения. В выпуске также добавлены проверки отсутствующих операндов для инструкций SHR и SHL VM и проверка границ индекса для HASKEY, что приводит поведение NeoGo в соответствие с ожидаемой спецификацией Gorgon.

Также включены изменения в управлении контрактами: кеш ContractManagement теперь обновляется перед блокировкой контракта при уничтожении, а учетные записи контракта блокируются перед уничтожением контракта, и то, и другое действует в Gorgon.

Исправления совместимости виртуальных машин

Версия 0.119.0 адресует 41 транзакцию MainNet, в которой NeoGo и эталонный узел C# выдавали разные результаты FAULT. Эти несоответствия означали, что две реализации по-разному обрабатывали определенные контракты, что является проблемой надежности для многоклиентской сети.

Исправления включают исправленную обработку асинхронных обратных вызовов System.Contract.CallNative, проверку типа возвращаемого значения метода во время вызовов контракта, а также многочисленные исправления подсчета ссылок для анализа аргументов PACKMAP, SETITEM и SYSCALL. Также были устранены некоторые паники виртуальной машины, в том числе сбои при доступе к полю структуры и неправильный ответ от getBlock в Ledger при задании индекса блока за пределами текущей высоты — теперь NeoGo возвращает значение null, что соответствует поведению узла C#.

Базовая реализация stackitem.Map также была переработана: она была перенесена из эталонной реализации C# для использования упорядоченной структуры.

Улучшения производительности

Новая опция DirectRelay RPC позволяет осуществлять прямую трансляцию транзакций одноранговым узлам вместо маршрутизации через стандартную очередь для вызовов sendrawtransaction. Эта функция особенно актуальна после активации трехсекундного времени блокировки в MainNet в конце апреля, где более быстрое распространение имеет больший эффект. Neo SPCC отметила, что синтетические сетевые тесты показали минимальное улучшение, хотя реальные условия могут отличаться.

Операции Mempool подверглись микрооптимизации, что привело к сокращению времени и ассигнований до 24% для обычного сценария с одинаковой комиссией. Доставка консенсусных сообщений через уровень P2P также была улучшена, а BoltDB был обновлен до версии, оптимизированной для распределения, для снижения нагрузки на память.

Оперативные обновления

Операторы узлов, использующие systemd, теперь могут использовать интеграцию sd_notify, включая правильные сервисные единицы Type=notify с сигналами READY, RELOADING и STOPPING. Была добавлена ​​новая метрика Prometheus для активных соединений WebSocket, мотивированная тем, что узлы хранения NeoFS сталкиваются с ограничениями клиента WebSocket.

Четыре существующих метрики Prometheus были переименованы без переходного периода — current_state_height, current_block_height, current_persisted_height и current_header_height лишились префикса «current_». Операторам необходимо будет соответствующим образом обновить информационные панели и оповещения.

Для разработчиков тип ошибки actor.ErrExecFailed устарел в пользу neorpc.FaultException, требующего миграции в приложениях, проверяющих наличие сбоев выполнения.

Заглядывая в будущее

NeoGo v0.119.0 приближает клиент Go к готовности Gorgon, одновременно улучшая его соответствие эталонной реализации C#. Хардфорк Gorgon остается без запланированной даты, динамическое ценообразование на коды операций уже реализовано на стороне NeoGo и ожидает завершения на узле C#. Предыдущее освещение NeoGo можно найти в статье NNT о версии 0.118.0.

Полные примечания к выпуску можно найти по ссылке ниже: https://github.com/nspcc-dev/neo-go/releases/tag/v0.119.0.

NeoGo v0.119.0 нацелен на готовность к хард-форку Gorgon и исправляет 41 несоответствие виртуальной машины