Блокчейны используют токены в качестве основного средства передачи ценности. Они могут быть собственной валютной единицей сети, валютой приложения и даже использоваться в качестве валюты в игровом мире. Токены также поддерживают надежную деятельность 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. Начните с открытия онлайн-среды Remix IDE в браузере.

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

3. В проводнике на левой панели выберите Token.sol в каталоге контрактов, чтобы загрузить его зависимости.

4. Добавьте

_как

в конструктор по умолчанию, чтобы указать количество создаваемых токенов. В следующем примере кода показан один метод.

контракт 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) и нажмите кнопку «Развернуть».

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

Как представлены токены ERC-20

Чтобы найти свои токены, перейдите к контрактам зависимостей в Remix (папка .deps) и перейдите к файлу ERC-20.sol. Первая строка в этом абстрактном контракте:

сопоставление (адрес учетной записи => uint256) частные _balances;

В этом сопоставлении хранятся все балансы для всех пользователей. Чтобы получить баланс пользователя, вы можете позвонить в свой контракт

баланс

функция с адресом пользователя. Он запросит это сопоставление и получит значение. При отображении ваших средств ваш кошелек 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 имеет drop {} fun init(witness: MY_COIN, ctx: &mut TxContext) {         let (казначейство, метаданные) = coin::create_currency(witness, 6, b"MY_COIN", b"", b"", option ::нет(), ctx);         передача::public_freeze_object(метаданные);         Transfer::public_transfer(казначейство, ctx.sender())     }

Когда ты звонишь

create_currency()

, Sui возвращает объекты TreasuryCap<T> и CoinMetadata<T> для вашей валюты, где T — тип вашей валюты (MY_COIN в предыдущем примере). 

Адрес вашего кошелька на самом деле содержит эти объекты. Они существуют только в вашем кошельке, а не где-либо еще, в отличие от метода ERC-20, который использует сопоставления для отслеживания владения.

КазначействоCap

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

Как представлены объекты Coin

Чтобы отчеканить новую поставку,

КазначействоКепка

держатель вызывает функцию монетного двора. Функция чеканит или создает объект Coin<T>, который представляет сумму, которую чеканит функция. Он находится в вашем кошельке (при условии, что ваш адрес указан в качестве получателя) в буквальном смысле. Если держатель TreasuryCap снова вызывает mint(), процесс создает еще один объект Coin<T> и также переносит эту монету в ваш кошелек. У вас может быть несколько объектов Coin для одной и той же валюты, и ваш общий баланс этой валюты представляет собой сумму этих монет.

Особенности ERC-20 и монеты

Хотя Ethereum и Sui предлагают схожие действия, такие как перевод и расходование, когда дело доходит до токенов, фундаментальные структуры каждого блокчейна создают основные различия в том, как эти действия работают.

Чеканка и сжигание

Авторизованный пользователь может создать новые токены на Ethereum, вызвав

как

функция в контракте этого токена. Это обновит сопоставление _balances и увеличит общий запас. Любой пользователь может вызвать функцию записи, но ему разрешено сжигать только свой баланс. 

Аналогично в Sui авторизованный пользователь может позвонить

как

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

Sui поддерживает разделение и объединение монет одного типа. Поэтому, если у вас есть несколько объектов Coin, представляющих вашу валюту, вы можете объединить их в один объект. Вы также можете взять один объект Coin и разделить его на несколько объектов Coin одного типа. 

Перенос

При передаче токенов на Ethereum вы вызываете

передача

Функция контракта токена. Эта функция проверяет наличие баланса, который вы переводите, затем вычитает ваш баланс и увеличивает баланс адреса, на который вы перевели, действуя аналогично физическому реестру.

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

Отправка объекта таким способом называется транзакцией с одним владельцем и не требует консенсуса в блокчейне. Таким образом, Sui выполняет транзакции с одним владельцем параллельно, очень быстро достигая окончательности. Только общие объекты в Sui требуют консенсуса.

Расходы

Пользователи Ethereum знакомы с концепцией Approve. Всякий раз, когда вы взаимодействуете с каким-либо протоколом DeFi, вы должны сначала утвердить этот протокол, чтобы тратить свои токены от вашего имени. Например, при обмене на Uniswap утвержденный маршрутизатор вызывает функцию передачи в контракте токена. Затем контракт токена подтверждает, что вызывающий абонент является либо владельцем, либо утвержденным адресом.

У Суи нет этой конструкции. Если вы являетесь владельцем объекта, вы единственная сторона, которая может его передать. Другая организация не может вывести этот объект из вашего кошелька. Вместо этого протоколы Sui принимают в качестве входных данных объекты Coin. Например, чтобы вызвать функцию обмена на децентрализованной бирже, вы должны передать объект Coin в функцию обмена, передав право собственности на объект протоколу. Теперь, когда протокол владеет этим объектом Coin, он может заменить его на другой объект Coin желаемого типа и перенести в ваш кошелек.

Понимание Суй

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

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

Если вы хотите узнать больше о создании токенов на Sui, ознакомьтесь с документацией.