Перехід від EVM до SVM (Solana) вимагає розуміння кількох ключових відмінностей між віртуальними машинами. У цій статті ми розглянемо деякі з цих відмінностей, зокрема облікові записи, комісії, транзакції, розумні контракти (програми) тощо. Він також вивчатиме налаштування розробника, включаючи інструменти та SDK.
Наприкінці розробники отримають знання, необхідні для початку своєї подорожі Solana.
Розуміння основних відмінностей
Для початку давайте розглянемо найважливішу різницю між EVM і SVM — дизайн моделі облікового запису.
Модель облікового запису
На відміну від Ethereum, Solana була розроблена для використання переваг кількох ядер і підтримки паралельних транзакцій. Для цього Solana використовує модель облікового запису.
Обліковий запис у Solana — це запис у книзі Solana, який або містить дані (обліковий запис даних), або є виконуваною програмою (розумний контракт або програма в Solana).
Як і Ethereum, кожен обліковий запис має ідентифікатор адреси. Однак, на відміну від Ethereum, де кожен смарт-контракт є обліковим записом із пов’язаною логікою виконання та сховищем, смарт-контракти Solana повністю не мають статусу. Стан має бути переданий обліковим записам для їх виконання.
Давайте розглянемо приклад коду. У наведеному нижче коді Solidity стан прив’язано до смарт-контракту за допомогою рядка int private count = 0.
У Rust (Solana) у смарт-контракті є структура, яка вказує initialize_counter. Цей початковий лічильник створює обліковий запис із рахунком 0. Обліковий запис передається цьому лічильнику для збільшення лічильника. Це запобігає збереженню стану в самому розумному контракті.
У Solana дані зберігаються в окремих облікових записах за межами програми. Щоб виконати логіку в програмі, передайте обліковий запис для виконання.
У випадку цієї програми лічильника передайте обліковий запис лічильника програмі під час виклику функції збільшення, і програма потім збільшить значення в обліковому записі лічильника.
Переваги дизайну моделі облікового запису
Однією з головних переваг цієї моделі облікового запису є можливість повторного використання програми.
Завдяки інтерфейсу ERC20 на Ethereum кожен раз, коли розробник створює новий токен, він повинен повторно розгортати смарт-контракт ERC20 в Ethereum із зазначеними значеннями. Це перерозподіл вимагає великих витрат.
Але з Solana немає необхідності створювати та розгортати новий смарт-контракт, щоб створити новий токен. Натомість створіть новий обліковий запис, відомий як обліковий запис монетного двору, використовуючи Програму токенів Solana, передаючи такі відомості, як кількість токенів, десяткові коми, хто може карбувати тощо.
І це можна зробити, просто надіславши транзакцію програмі Token. Використовуючи, наприклад, 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 для написання смарт-контрактів, Solana використовує Rust. Якщо ви переходите з Ethereum, розгляньте Anchor framework або Neon, обидва вони можуть допомогти розробникам швидше розпочати роботу, дозволяючи їм створювати Solana за допомогою знайомих інструментів EVM.
Подібно до Ethereum, клієнтські SDK доступні для багатьох найпопулярніших мов програмування, включаючи JavaScript, Python і Java.
Інструмент розробника
У Solana наразі немає еквівалента Foundry, але він має широкий набір інструментів, еквівалентних тим, які використовуються для Solidity.
Для глибшого занурення ось ширший список ресурсів для розробників.
Створення смарт-контрактів
Під час створення програм на Solana (або під час міграції існуючих смарт-контрактів Ethereum) є кілька основних відмінностей — надто багато, щоб описати тут. Але давайте розглянемо кілька найпоширеніших:
Картографування не існує безпосередньо на Solana. Замість цього використовуйте адреси, отримані програмою. Подібно до відображення, отримані програмою адреси дають можливість створити відображення від ключа або облікового запису до значення, яке зберігається в мережі.
У Solana програми за умовчанням оновлюються. Розумний контракт можна оновити за допомогою простої команди CLI solana program deploy <program_filepath>.
Під час написання інтелектуального контракту solidity зазвичай перевіряють msg.sender або tx.origin. На Солані немає еквівалента цьому. Кожна транзакція може мати кілька підписувачів, і особа, яка надсилає транзакцію, не обов’язково є особою, яка підписала транзакцію.
Щоб дізнатися більше про програми та способи розгортання, перегляньте цей посібник.
Вивчайте більше
Це одні з найважливіших відмінностей між розробкою на Ethereum і Solana. Звичайно, є ще чому навчитися. І найкращий спосіб розпочати – відразу ж почати! Ось кілька ресурсів для наступних кроків:
Ігровий майданчик Solana, де розробники можуть писати, створювати та розгортати програми Solana з браузера
Знайомство з розробкою Solana за допомогою ігрового майданчика Solana
Детальніше про відмінності між розробкою на Ethereum і Solana
Навчальний табір Solana