For the complete documentation index, see llms.txt. This page is also available as Markdown.

Известные ограничения

Текущие ограничения Rome EVM и их последствия — неподдерживаемые opcode, структура хранилища аккаунтов, лимиты CU, глубина CPI и ограничения оракулов.

Честная документация текущих ограничений Rome Protocol и их последствий.

Ограничения выполнения

SELFDESTRUCT не поддерживается. Для этого opcode нет обработчика, поэтому контракт, выполняющий его, прерывает всю транзакцию (см. ниже); откат отдельного фрейма не происходит.

Opcode, не реализованный в Rome, прерывает всю транзакцию. У интерпретатора нет обработчика для этого байта, поэтому транзакция завершается с IncompatibleVersionEVM(opcode), ничего из выполненного не фиксируется, и ошибка доходит до отправителя, а не подавляется вызывающим контрактом.

Нет отдельного расписания газа для каждого opcode. Значение газа, передаваемое в CALL, DELEGATECALL, STATICCALL и CREATE принимается для совместимости с ABI, но не применяется на практике — вызываемый код выполняется с полным оставшимся бюджетом вызывающего, и 2300-газовый стиипенд отсутствует. Защита от реентерабельности на основе стиипендов (transfer() / send()) в Rome не действует; используйте явные защиты от реентерабельности и шаблон checks-effects-interactions.

Modexp (0x05) отключён. Вызов откатывается с вызов big_mod_exp отключен до тех пор, пока Solana не активирует big_mod_exp системным вызовом.

256 слотов хранения на каждую учётную запись хранения. Хранилище контракта распределяется по аккаунтам Solana, по 256 слотов в каждом. Контракты с большим объёмом хранимых данных используют несколько аккаунтов, что влияет на затраты CU.

Около 1,4 млн вычислительных единиц на атомарную транзакцию. Работа, превышающая бюджет одной транзакции Solana, переходит в итеративное выполнение (разбивается на несколько транзакций). Некоторые операции поддерживаются только в атомарном режиме и не могут выполняться итеративно — в частности, CPI по устаревшему пути (CpiProhibitedInIterativeTx; эффекты cached-track откладываются и действительно выполняются итеративно).

Ограничение глубины CPI — 4. Глубоко вложенные вызовы CPI завершатся ошибкой. Проектируйте контракты с неглубокими деревьями вызовов.

Ограничения оракулов

Нет данных по историческим раундам. Адаптеры Oracle Gateway поддерживают только latestRoundData(). Запросы исторических цен через getRoundData(roundId) завершаются откатом.

Смещения парсера проверяются относительно текущих схем. Данные аккаунтов Pyth и Switchboard разбираются с использованием байтовых смещений. Если Pyth или Switchboard изменят структуру своих аккаунтов, адаптеры будут возвращать некорректные данные, пока смещения не будут повторно проверены.

Ограничения инструментов

Нет трассировки транзакций в стиле Ethereum. debug_traceTransaction и trace_* не поддерживаются. Единственный метод трассировки — debug_traceRomeTransaction, который разбивает транзакцию, объединяющую несколько вызовов в один пакет, на её подызовы и CPI. Обычные транзакции возвращают null. Для всего остального используйте eth_call и Через обозреватель (который показывает инструкции Solana, лежащие в основе транзакции), для отладки. См. JSON-RPC.

eth_getLogs имеет ограничение по диапазону. Публичные сети отклоняют слишком широкие диапазоны блоков (ошибка -32005); ограничивайте диапазон запросов. См. JSON-RPC.

Ограничения инфраструктуры

Модель с единственным оператором. Каждое развертывание Rome обслуживается одной сущностью (оператором пула плательщиков). Децентрализованного набора операторов нет.

Блокировка в итеративном режиме. Во время итеративного выполнения аккаунты блокируются на несколько секунд, что может вызывать конкуренцию за доступ к часто используемым аккаунтам.

Что дальше

Последнее обновление

Это было полезно?