Переход от EVM к SVM (Solana) требует понимания нескольких ключевых различий между виртуальными машинами. В этой статье мы рассмотрим некоторые из этих различий, включая счета, комиссии, транзакции, смарт-контракты (программы) и многое другое. Также будут рассмотрены настройки разработчика, включая инструменты и SDK.
К концу у разработчиков будут знания, необходимые для начала пути к Солане.
Понимание основных различий
Для начала давайте рассмотрим самое существенное различие между EVM и SVM — структуру модели учетной записи.
Модель аккаунта
В отличие от Ethereum, Solana была разработана для использования преимуществ нескольких ядер и поддержки параллельных транзакций. Для этого Солана использует модель учетной записи.
Учетная запись в Solana — это запись в реестре Solana, которая либо содержит данные (учетная запись данных), либо является исполняемой программой (смарт-контракт или программа в Solana).
Как и в случае с Ethereum, каждая учетная запись имеет идентификатор адреса. Однако, в отличие от Ethereum, где каждый смарт-контракт представляет собой учетную запись с логикой выполнения и хранилищем, связанными вместе, смарт-контракты Solana полностью не имеют состояния. Состояние должно быть передано учетным записям, чтобы они могли выполняться.
Давайте посмотрим на пример кода. В приведенном ниже коде Solidity состояние привязано к смарт-контракту с помощью строки int Private Count = 0.
В Rust (Solana) в смарт-контракте есть структура, указывающая Initialize_counter. Этот начальный счетчик создает учетную запись со счетчиком, равным 0. Учетная запись передается этому счетчику для увеличения счетчика. Это предотвращает сохранение состояния внутри самого смарт-контракта.
В Solana данные хранятся в отдельных учетных записях вне программы. Чтобы выполнить логику в программе, передайте учетную запись, над которой будет выполняться выполнение.
В случае этой программы-счетчика передайте в программу учетную запись счетчика при вызове функции приращения, а затем программа увеличит значение учетной записи счетчика.
Преимущества дизайна модели учетной записи
Одним из основных преимуществ этой модели учетной записи является возможность повторного использования программы.
Благодаря интерфейсу ERC20 в Ethereum каждый раз, когда разработчик создает новый токен, он должен повторно развернуть смарт-контракт ERC20 в Ethereum с указанными для него значениями. Такое перераспределение требует больших затрат.
Но с Solana нет необходимости создавать и развертывать новый смарт-контракт для создания нового токена. Вместо этого создайте новую учетную запись, известную как учетная запись монетного двора, с помощью программы токенов Solana, передав такие данные, как количество токенов, десятичные точки, кто может чеканить и многое другое.
И это можно сделать, просто отправив транзакцию в программу токенов. Например, при использовании CLI библиотеки программ Solana это всего лишь одна команда:
Местные рынки комиссий
Еще одним преимуществом модели счетов является то, что рынки комиссий являются локальными для каждого счета.
В Ethereum рынки комиссий являются глобальными. Если коллекция NFT становится вирусной и все ее чеканят, плата вырастет для всех. Но на Solana, поскольку рынки комиссий являются локальными для каждого аккаунта, только те, кто чеканит эту коллекцию NFT, платят повышенные комиссии. Пользователи, не участвующие в проекте, не затрагиваются.
Сборы
Давайте углубимся в комиссии. На Solana сборы разбиты на три категории: базовый сбор, приоритетный сбор и арендная плата. Давайте посмотрим на каждый.
Базовая комиссия рассчитывается на основе количества подписей в транзакции. Каждая подпись стоит 5000 лампортов (0,000000001 соль = 1 лампорт). Если транзакция имеет 5 подписей, базовая комиссия составляет 25 000 лампортов.
Комиссия за приоритет — это необязательная комиссия, которую можно добавить к транзакции, чтобы придать ей приоритет. Эта комиссия зависит от количества вычислительных единиц, использованных в транзакции. Подобно газу Ethereum, эта комиссия представляет собой простое измерение вычислительных ресурсов, необходимых для транзакции.
Последняя плата, арендная плата, больше похожа на залог. Когда разработчики создают учетные записи или выделяют место в сети, они должны внести SOL в сеть, чтобы сохранить свою учетную запись. Арендная плата рассчитывается исходя из количества байт, хранящихся в сети, а за выделение места взимается дополнительная базовая плата.
Транзакции
В Solana выполнение программы начинается с отправки транзакции в кластер. Каждая транзакция на Solana состоит из четырех частей:
Одна или несколько инструкций. Инструкции — это наименьшая логика выполнения в Solana. Их можно рассматривать как вызовы функций смарт-контракта Ethereum. Они вызывают программы, которые обращаются к среде выполнения Solana для обновления состояния (например, вызывают программу токена для передачи токенов из одной учетной записи в другую).
Массив учетных записей для чтения или записи.
Одна или несколько подписей
Недавний блокхеш или nonce. Вместо использования инкрементного nonce, как в Ethereum, в Solana из кластера извлекается недавний хэш блока. С этим хэшем блока транзакция действительна только для 150 блоков, что предотвращает выполнение долгоживущих подписей транзакций гораздо позже.
Еще одно существенное различие между Ethereum и Solana заключается в том, что в Solana транзакции могут иметь несколько инструкций (вызовов функций в Ethereum). Это означает, что нет необходимости создавать собственные смарт-контракты для объединения функций в одну транзакцию. Каждая инструкция может представлять собой отдельный вызов функции, выполняемый по порядку в транзакции. Транзакции также являются атомарными: если инструкция завершится неудачно, вся транзакция завершится неудачей.
Ограничения транзакций
Как и в случае с ограничениями на газ Ethereum, для транзакций Solana существуют ограничения на вычислительные единицы.
Другие ограничения включают в себя:
Каждая указанная учетная запись может содержать не более 12 000 000 вычислительных единиц, используемых на блок.
Инструкции можно вызывать только на глубине 4, прежде чем транзакция будет отменена.
Мемпул
В отличие от Ethereum, Solana не имеет мемпулов. Вместо этого валидаторы Solana перенаправляют все транзакции максимум четырем лидерам в расписании лидеров. Отсутствие мемпула заставляет транзакции переходить от лидера к лидеру до истечения срока действия хеш-блока, но это также снижает накладные расходы на распространение слухов по кластеру.
Среда разработки Solana
Теперь давайте посмотрим на некоторые инструменты разработчика на Solana.
Языки программирования
В то время как Ethereum в основном использует Solidity для написания смарт-контрактов, Солана использует Rust. При переходе с Ethereum рассмотрите фреймворк Anchor или Neon, оба из которых могут помочь разработчикам начать работу быстрее, позволяя им создавать Solana с использованием знакомых инструментов EVM.
Как и в случае с Ethereum, существуют клиентские SDK для многих наиболее популярных языков программирования, включая JavaScript, Python и Java.
Инструменты разработчика
У Solana в настоящее время нет эквивалента Foundry, но у нее есть широкий набор инструментов, эквивалентных тем, которые используются в Solidity.
Для более глубокого погружения вот более широкий список ресурсов для разработчиков.
Создание смарт-контрактов
При создании программ на Solana (или при переносе существующих смарт-контрактов Ethereum) существует несколько основных отличий — их слишком много, чтобы их здесь описывать. Но давайте рассмотрим некоторые из наиболее распространенных:
Картирование на Солане напрямую не существует. Вместо этого используйте адреса, полученные программой. Как и сопоставление, адреса, полученные программой, дают возможность создать сопоставление ключа или учетной записи со значением, хранящимся в цепочке.
В Solana программы по умолчанию обновляются. Смарт-контракт можно обновить с помощью простой команды CLI solana program Deploy <program_filepath>.
При написании смарт-контракта Solidity обычно проверяют msg.sender или tx.origin. На Солане нет эквивалента этому. Каждая транзакция может иметь несколько подписантов, и лицо, отправляющее транзакцию, не обязательно является тем, кто ее подписал.
Дополнительную информацию о программах и способах их развертывания можно найти в этом руководстве.
Узнать больше
Это некоторые из наиболее важных различий между разработкой на Ethereum и Solana. Конечно, есть еще чему поучиться. И лучший способ начать — это сразу приступить к делу! Вот несколько ресурсов для следующих шагов:
Игровая площадка Solana, где разработчики могут писать, создавать и развертывать программы Solana из браузера.
Введение в разработку Solana с использованием Solana Playground
Более детальный взгляд на различия между разработкой на Ethereum и Solana.
Учебный лагерь Соланы
