Арчи Чаудхури

Виртуальная машина Adamnite, или ADVM, является важной частью экосистемы Adamnite. Первоначально описанная как обобщенная виртуальная машина на основе 256-битного стека, ADVM претерпела множество изменений с момента своего создания, а совсем недавно претерпела довольно значительные изменения, которые изменят способ разработки на платформе Adamnite. В этом посте рассматриваются некоторые из этих изменений и дается обоснование того, почему мы решили пойти с ними. Хотя основное видение создания виртуальной машины, оснащенной стандартными библиотеками и имеющей те же гарантии выполнения/безопасности, что и традиционные виртуальные машины, такие как JVM, остается прежним, наш подход в значительной степени изменился благодаря советам, данным несколькими открытыми исходные участники и обычные члены сообщества.

Первая версия ADVM, названная просто ADVM 1.0, была слишком похожа, а в некотором смысле и сложнее, чем текущие реализации на основе блокчейна. Предлагаемый дизайн ADVM включал около 60 OPCODES: помимо базовой арифметики и хеширования, была дополнительная поддержка 32-битной и 64-битной арифметики, чтобы гарантировать, что разработчикам не придется полагаться на 256 бит для каждой операции. Дополнительные сложности, такие как стандартные библиотеки, были построены сверху, а сложные функции эллиптических кривых (скажем, ED-25519, а не SECP256K1) также были включены в качестве отдельных кодов операций. Еще одна серьезная проблема с ADVM заключалась в том, что она была специфичной для экосистемы: например, разработчик, работающий в Solidity в цепочке на основе EVM, не сможет писать контракты или dApps для Adamnite. Хотя изначально мы несколько академически гордились тем, что несовместимы с EVM, мы быстро поняли, что языковая специфичность, а не языковая независимость, значительно ограничит возможности разработчиков в долгосрочной перспективе. В то время как A1 по-прежнему должен быть предпочтительным языком контрактного программирования, исходя из его собственных достоинств, программисты, работающие на других цепочках, таких как Ethereum или Avalanche, должны иметь возможность без особых трудностей переводить свои приложения на Adamnite.

ADVM 2.0 предназначен для решения этих проблем. ADVM 2.0 представляет собой не обобщенную виртуальную машину на основе стека, а обобщенную реализацию, а скорее расширение механизма WebAssembly (WASM). WebAssembly — это низкоуровневый язык, предназначенный для создания мощных и масштабируемых веб-приложений: он предназначен для компиляции таких языков программирования, как Javascript, C++ и Python. Виртуальные машины на основе WebAssembly, такие как WAVM, позволяют использовать WebAssembly в локальных приложениях, не основанных на браузере. ADVM 2.0 — это виртуальная машина WASM, созданная специально для смарт-контрактов и децентрализованных приложений. Хотя конкретные детали реализации будут опубликованы в одном из последующих сообщений в блоге, ниже приведены некоторые элементарные параметры и примеры. ADVM 2.0 специально реализует функции хеширования и другие процедуры, требующие больших вычислительных ресурсов, как функции, построенные поверх самого WebAssembly, а не как коды операций. Это помогает уменьшить сложность и беспорядок для разработчиков более низкого уровня, позволяя разработчикам высокого уровня работать в знакомой среде WASM. WASM также позволяет разработчикам писать смарт-контракты на различных языках программирования высокого уровня, включая Python, Javascript и даже Solidity. Хотя работа с Solidity потребует некоторых модификаций, мы надеемся, что собственная миграция Ethereum на EWASM (движок WASM со вкусом Ethereum, предназначенный для замены EVM) поможет в этом процессе. В этом смысле ADVM 2.0 — это шаг к нашему видению унифицированной и совместимой экосистемы Web 3.0.

Большое спасибо Рейду (MrNerdHair) за предложение ADVM 2.0 и предложение его внедрения!