Блокчейни використовують токени як основний засіб передачі цінності. Вони можуть бути рідною одиницею обміну ланцюга, вони можуть бути одиницею обміну програми, і їх навіть можна використовувати як валюту в ігровому світі. Токени також підтримують надійну активність DeFi на Sui та інших блокчейнах.

Ethereum використовує стандарт ERC-20 для токенів. Ці токени, які розробники можуть створювати для різноманітних цілей, представлені як розумні контракти на Ethereum. На Sui токени використовують пакет Coin. Як і токени ERC-20, розробники можуть створювати монети на Sui для широкого спектру використання. Однак принципово інша модель даних Sui означає, що кожна монета належить адресі в мережі.

Перегляд процесів створення токенів ERC-20 на Ethereum і монет на Sui показує відмінності між цими двома стандартами. Розробники Ethereum також можуть бути здивовані гнучкістю пакета Coin на Sui.

Розгортання маркера ERC-20

У цьому прикладі ми використаємо Remix IDE, щоб продемонструвати кроки, необхідні для створення маркера за стандартом ERC-20.

1. Почніть із відкриття онлайнової IDE Remix у вашому браузері.

2. Виберіть шаблон проекту ERC-20 з OpenZeppelin.

3. У Провіднику файлів на лівій панелі виберіть Token.sol у каталозі контрактів, щоб завантажити його залежності.

4. Додайте a

_as

до конструктора за замовчуванням, щоб вказати кількість токенів для створення. У наступному прикладі коду показано один метод.

контракт MyToken — ERC-20, ERC-20Permit {     constructor() ERC-20("MyToken", "MTK") ERC-20Permit("MyToken") {_mint(msg.sender, 12);} }

 5. Клацніть піктограму Компіляція у швидкому меню.

6. Відкрийте плагін Deploy & Run Transactions, виберіть середовище Remix VM (Cancun) і натисніть кнопку Deploy.

Виконання наведених вище кроків копіює залежності ERC-20 у ваш проект. Ваш контракт разом із цими скопійованими залежностями компілюється в байт-код EVM і розгортається у віртуальному блокчейні. Вашу транзакцію було видобуто, і контракт, що представляє ваші токени ERC-20, тепер доступний у віртуальному блокчейні Remix.

Як представлені токени ERC-20

Щоб знайти свої токени, перейдіть до договорів залежностей на Remix (папка .deps) і перейдіть до файлу ERC-20.sol. Перший рядок цього абстрактного договору:

відображення (адреса облікового запису => uint256) private _balances;

У цьому відображенні зберігаються всі баланси для всіх користувачів. Щоб отримати баланс користувача, ви можете зателефонувати на свій контракт

balanceOf

функція з адресою користувача. Він запитає це відображення та отримає значення. Під час відображення ваших коштів ваш гаманець MetaMask робить кілька викликів balanceOf() до різних контрактів і показує результати.

Іншими словами, усі передачі, карбування, спалювання, а також взаємодії протоколів DeFi зрештою оновлюють значення всередині цього відображення.

Розгортання монети

На Sui розгорнуті контракти не представляють нових токенів. Натомість фреймворк Sui використовує пакет Coin для забезпечення цієї функції. Хоча це спрощена аналогія, ви можете розглядати один пакет як контракт. Він відкриває функції, які можуть приймати об’єкти та повертати інші об’єкти.

Дотримуйтесь документації щодо встановлення Sui, щоб налаштувати середовище кодування. Крім того, ви можете використовувати Remix IDE, згадане вище, щоб написати код Move на Sui, встановивши плагін WELLDONE Code.

Наступний приклад коду Move імпортує модуль Coin і використовує його

create_currency

функція для ініціалізації монети.

використовуйте sui::coin::{Self, TreasuryCap}; public struct MY_COIN has drop {} fun init(witness: MY_COIN, ctx: &mut TxContext) {         let (казначейство, метадані) = coin::create_currency(witness, 6, b"MY_COIN", b"", b"", option ::none(), ctx);         transfer::public_freeze_object(метадані);         transfer::public_transfer(казначейство, ctx.sender())     }

Коли дзвониш

create_currency()

, Sui повертає об’єкти TreasuryCap<T> і CoinMetadata<T> для вашої валюти, де T — тип вашої валюти ( MY_COIN у попередньому прикладі). 

Адреса вашого гаманця насправді містить ці об’єкти. Вони існують лише у вашому гаманці, і ніде більше, на відміну від методу ERC-20, який використовує відображення для відстеження власності.

TreasuryCap

, що скорочується від «казначейських можливостей», є ключем, необхідним для карбування нових монет. TreasuryCap можна перевести на іншу адресу довіреної третьої сторони або знищити. Знищення TreasuryCap схоже на відмову від права власності в контракті ERC-20. 

Як представлені об’єкти Coin

Щоб відкарбувати нову поставку,

TreasuryCap

власник викликає функцію монетного двору. Функція карбує або створює об’єкт Coin<T>, який представляє суму, яку карбує функція. Він знаходиться у вашому гаманці (припускаючи, що ваша адреса вказана як одержувач), у буквальному сенсі. Якщо власник TreasuryCap знову викликає mint(), процес створює ще один об’єкт Coin<T> і також переносить цю монету у ваш гаманець. Ви можете мати декілька об’єктів Coin для однієї валюти, і ваш загальний баланс цієї валюти є сумою цих монет.

Функції ERC-20 проти Coin

Незважаючи на те, що Ethereum і Sui пропонують подібні дії, такі як переказ і витрачання, коли мова йде про токени, фундаментальні структури кожного блокчейна створюють основні відмінності в тому, як ці дії працюють.

Карбування та випалювання

Авторизований користувач може карбувати нові токени на Ethereum, зателефонувавши до

як

функції в контракті цього токена. Це оновлює відображення _balances і збільшує загальну пропозицію. Будь-який користувач може викликати функцію запису, але йому дозволено записувати лише власний баланс. 

Так само на Sui авторизований користувач може зателефонувати

як

карбувати нові монети, як описано вище. Різниця полягає в тому, що ваш баланс на Sui не представлений відображенням у спільному стані, а знаходиться серед самих об’єктів у вашому гаманці. У цьому сенсі ERC-20 схожий на картку банкомату, яка дозволяє вам цифрово маніпулювати готівкою в банківському сховищі, а Sui схожий на фізичний гаманець, де ваш баланс пов’язаний з готівкою, яку ви маєте на руках.

Sui підтримує розділення та злиття монет одного типу. Отже, якщо у вас є кілька об’єктів Coin, що представляють вашу валюту, ви можете об’єднати їх в один об’єкт. Ви також можете взяти один об’єкт Coin і розділити його на кілька об’єктів Coin одного типу. 

Перенесення

Під час передачі токенів на Ethereum ви викликаєте

передача

функція символічного контракту. Ця функція підтверджує, що у вас є баланс, який ви передаєте, потім вираховує ваш баланс і збільшує баланс адреси, на яку ви перевели, діючи подібно до фізичної книги.

На Sui, оскільки ви буквально володієте об’єктами Coin, ви просто надсилаєте об’єкт Coin на іншу адресу. Немає центрального місця, яке потрібно інформувати про трансакцію, щоб забезпечити актуальність балансів. Дія надсилання належного об’єкта з одного гаманця в інший не впливає на решту блокчейну. 

Надсилання об’єкта таким чином називається транзакцією одного власника і не потребує консенсусу блокчейна. Таким чином, Sui виконує транзакції одного власника паралельно, досягаючи завершеності дуже швидко. Консенсус потрібен лише для спільних об’єктів на Sui.

Витрати

Користувачі Ethereum знайомі з концепцією Approve. Щоразу, коли ви взаємодієте з будь-яким протоколом DeFi, ви повинні спочатку схвалити цей протокол, щоб витрачати свої токени від вашого імені. Коли ви змінюєте на Uniswap, наприклад, затверджений маршрутизатор викликає функцію передачі в контракті маркера. Тоді договір маркера підтверджує, що абонент є або власником, або затвердженою адресою.

Sui не має цієї конструкції. Якщо ви володієте об’єктом, ви єдина сторона, яка може його передати. Інша особа не може вилучити цей об’єкт із вашого гаманця. Натомість протоколи на Sui приймають об’єкти Coin як вхідні дані. Наприклад, щоб викликати функцію обміну на децентралізованій біржі, ви повинні передати свій об’єкт Coin у функцію обміну, передавши право власності на об’єкт протоколу. Тепер, коли протокол володіє цим об’єктом Coin, він може замінити його іншим об’єктом Coin потрібного типу та перенести у ваш гаманець.

Розуміння Суї

Розробники, які мають досвід Ethereum та інших блокчейнів, які зацікавлені в створенні на Sui, знайдуть багато подібних парадигм. Токени, наприклад, служать для багатьох тих самих практичних цілей. Однак розробники, які не знайдуть часу, щоб дізнатися про основні відмінності, описані вище, будуть спотикатися.

Знову ж таки, розробники, які мають досвід роботи в традиційних середовищах об’єктно-орієнтованого програмування, знайдуть подібні структури в Sui. Інтуїтивно зрозуміло думати про об’єкт як про річ, яку можна зберігати в гаманці або маніпулювати за допомогою коду. 

Якщо ви хочете дізнатися більше про створення токенів на Sui, перегляньте документацію.