May 4, 2022

Neon EVM: Ограничения для совместимости с Ethereum (Подробный перевод на Русский язык)

https://neonlabsorg.medium.com/neon-evm-the-limitations-for-ethereum-compatibility-47d059fc1742

Neon EVM - это эмуляция сети Ethereum, предназначенная для обработки транзакций, подобных Ethereum, и их выполнения на Solana.
Однако некоторые транзакции в настоящее время не могут быть обработаны через Neon EVM, поэтому для их обработки могут потребоваться корректировки. Эти ограничения являются следствием отсутствия стандартизированной практики программирования в блокчейн - отражение того факта, что разработка смарт-контрактов все еще находится на ранней стадии. Кроме того, несмотря на то, что Ethereum является самым популярным блокчейном первого уровня для dApps, он намеренно спроектирован так, что его исполнение происходит в отдельной сети (например, Solana), и в вопросах безопасности полагается в основном на себя.

Совместимость Neon EVM с Ethereum

Neon EVM - это созданный как смарт-контракт на Solana. Используя архитектуру обработки Neon Proxy, Neon EVM может соответствовать правилам Ethereum и Solana, что делает его способным многократно обрабатывать параллельное выполнение контрактов EVM в байткоде на Solana. Для этого контракты EVM, созданные с помощью компиляторов Vyper/Solidity, загружаются на отдельные аккаунты Solana. Затем подписи проверяются на Solana в соответствии с правилами Ethereum. Однако некоторые проблемы с этим еще имеются, прямо сейчас их решением занимаются разработчики.

Интеграция собственных dApps Ethereum и их подключение к Neon сопряжены с двумя трудностями, а именно: работа с прекомпилированными контрактами и сложными многократными транзакциями. В этой статье мы рассмотрим редко используемые функции, прекомпилированные контракты и методы RPC, которые в настоящее время не поддерживаются релизом Neon EVM MVP.

Предварительно неподтвержденные составленные контракты

Разработчики обычно полагаются на прекомпилированные контракты для сложных операций, которые не подходят для записи в "опкодах" (код операции), либо из-за их вычислительных затрат, либо по другим причинам. Например, прекомпиляция ECRecover является популярным методом проверки подписи сообщения и совместима с Neon EVM. Поскольку прекомпилированные контракты полагаются на то, что находится за пределами Neon EVM, не все из них в настоящее время поддерживаются.

Из всех (8ми) основных контрактов Ethereum следующие четыре в настоящее время не поддерживаются Neon EVM:

  • bigModExp - используется для эффективной проверки RSA внутри EVM и для других форм криптографии на основе теории чисел.
  • bn256Add - Выполняет сложение на операциях с эллиптическими кривыми.
  • bn256ScalarMult - Выполняет скалярное умножение на операции эллиптической кривой.
  • bn256Pairing - операции сопряжения эллиптических кривых, необходимые для выполнения верификации zkSNARKs в пределах лимита блочного газа.

Смарт контракты, написанные на Solidity, не будут работать на Neon EVM, если они используют любой из этих предварительно скомпилированных контрактов на Solana. Если же разработчики хотят их использовать, то им следует сделать sys-вызовы в ядре Solana - аналогично реализации erc-recover. Для примера посмотрите на реализацию bn256* Solana Syscalls здесь. Вы также можете посмотреть, как Neon EVM использует прекомпилированные контракты Ethereum под капотом здесь.

В целом, разработчики могут предпринять следующие шаги для реализации вышеупомянутых предварительно скомпилированных контрактов через Neon EVM:

  1. Подготовьте необходимые изменения для поддержки предварительно скомпилированных контрактов в ядре Solana.
  2. Создайте запросы на внесение изменений в ядро Solana для внесения этих улучшений.
  3. Тестовые изменения в Testnet.
  4. Тестовые изменения в Devnet.
  5. Протестируйте изменения в Mainnet.
  6. Обновите Neon EVM для поддержки этих предварительно скомпилированных контрактов.

Не поддерживаемые JSON-RPC методы

Чтобы программное обеспечение могло взаимодействовать с Ethereum, оно должно иметь возможность подключиться к узлу Ethereum. Эта связь осуществляется с помощью JSON-Remote Procedure Call (JSON-RPC). Neon EVM взаимодействует с API JSON-RPC так же, как и Ethereum, следуя спецификации Ethereum JSON-RPC.

Некоторые из наиболее популярных методов RPC уже поддерживаются Neon EVM, и с ними можно ознакомиться здесь. Есть и другие поддерживаемые методы, которые еще не добавлены в список.

Не поддерживаемые токены

Как в Testnet'e, так и в Devnet'e, Neon EVM поддерживает операции с токенами, соответствующими стандарту ERC-20. NFTs (не взаимо заменяемый токен, одним словом картинка) созданные в соответствии со стандартом ERC-721, в настоящее время не могут обрабатываться Neon EVM. Хотя они могут быть сгенерированы в EVM, они не будут иметь никакой ценности и будут заблокированы в экосистеме, поскольку они не распознаются за пределами Neon EVM.

Ограничения на многократные операции и их текущее решение

В многократной транзакции отдельные счета последовательно выполняют разные шаги. При использовании итеративного режима Neon EVM после попытки выполнения может появиться сообщение об ошибке, связанной с заблокированными счетами, что приведет к приостановке транзакции. Это сообщение об ошибке возникает в результате того, как Neon EVM обрабатывает итеративные транзакции.

Neon EVM обрабатывает многократную транзакцию следующим образом:

  1. Получает транзакцию для итеративного выполнения и блокирует указанные в ней счета.
  2. Когда очередная транзакция поступает в Neon EVM, EVM просматривает список указанных в ней счетов, участвующих в ее выполнении. Если в этот момент какой-либо из перечисленных счетов заблокирован из-за его участия в итеративном выполнении другой транзакции, Neon EVM возвращает ошибку.
  3. Первая транзакция должна быть сначала завершена, прежде чем он разблокирует заблокированные им счета.

Смысл этой реализации для mainnet заключается в том, чтобы иметь последовательное состояние для счетов Solana во время выполнения транзакции до ее завершения. Поскольку транзакция выполняется в многократном режиме, между выполнением каждого шага существуют временные интервалы. Поэтому данное решение предотвращает возможность изменения данных учетных записей Solana, находящихся в состоянии системы, в течение этих интервалов.

Выдача ошибки о заблокированных счетах при начале транзакции является временным обходным решением. Данная ошибка и обходное решение, будут реализованы после релиза MVP в Mainnet.

Несмотря на эти ограничения, Neon EVM остается мощным инструментом эмуляции. Он позволяет разработчикам в подавляющем большинстве случаев эффективно переносить свои смарт-контракты на базе Solidity в блокчейне Solana. Даже если контракту требуется какая-то не поддерживаемая функциональность, часто есть возможность реализовать ее другим, более совместимым способом. Со временем Neon планирует внедрить в EVM больше совместимости для этих не поддерживаемых в настоящее время функций.

Официальные ссылки на NeonLabs:

Discord: https://discord.gg/5ynFYfa9TU
Twitter: https://twitter.com/neonlabsorg
Telegram: https://t.me/Neonlabsorg
GitHub: https://github.com/neonlabsorg
Reddit: https://www.reddit.com/r/neonlabsorg/
Medium: https://neonlabsorg.medium.com/