Create token account что это
Перейти к содержимому

Create token account что это

  • автор:

Understanding Solana’s Mint Accounts and Token Accounts

Jorge Londoño, Ph.D

Solana dApp development poses some new challenges, specially for those who, like me, had some previous experience with Ethereum-like development where smart contracts include both, code and state storage. In the Solana world, programs do not contain any data, but instead reference accounts where data can be stored. This is a huge paradigm change for developers, but one that greatly helps improve performance as this enables programs to run concurrently, as long as they are not accessing the same account data.

An additional plus is that there is no need to deploy a new program for each new token, as is typically the case when using the ERC-20 standard. In fact, the functionality of a token is always the same, what differs is the data associated with a particular token. For this reason, Solana developers included a standard Token Program already deployed and ready for anyone to use for creating, minting, trading, and even burning tokens.

One picture says it all

The following diagram illustrates the relationships between the Token Program, the accounts it uses, and the related roles:

The first element is the Token Program itself, which is already deployed and ready to use.

Mint Accounts

When someone wants to create a new token, he uses the create-token function to initialize a new Mint Account, which contains basic information about the token: The mint-authority which is a public-key (pubkey) authorized to mint this token, the freeze-authority who can freeze token accounts (to be described below), and some additional data as the total supply of the token, the number of decimals , and the isInitialized flag. This account stores general information about the token and who has permissions over it. Observe that there is no data about token holdings of particular individuals. These are stored in Token Accounts.

Token Accounts

The token account holds information about the tokens owned by a pubkey. Ownership relationships become a bit confusing, though. The token account itself is owned by the Token program and it is the Token program who controls access to these tokens using the owner , close-authority and delegate fields within the account. The owner is the pubkey who can spend/transfer the tokens, the close-authority can close the account, and the owner can give rights to a delegate pubkey to spend up to a delegatedAmount of tokens. Besides these fields, there are also a few flags: isInitialized , isFrozen , isNative . By default, token accounts are initialized upon creation, are not frozen and are not native. Previously, we saw the mint account defines a freeze-authority , who has the right to freeze the tokens in a user account. Often times, the freeze-authority is null (all zeroes). In that case, no one can freeze the corresponding tokens held in the token account.

Too much theory, let’s see all of this in practice

Solana CLI

We are going to be using the Solana Tool Suite to interact with the Token program. You can get it here:

Как создать токен

Первая криптовалюта Bitcoin стартовала более десяти лет назад ― в далеком 2009-ом. За это время не только выросла цена на монеты Биткоина, но и сами блокчейн-технологии продвинулись далеко вперед. Сегодня уже необязательно разрабатывать новую цепь блоков, чтобы запустить собственный токен. А как это сделать и что для этого нужно, ― сегодня и разберемся.

Содержание

Как создать токен со смартфона.

Для начала стоит определить базовые понятия. «коин» и «токен» часто используют как слова-синонимы. Обычно это не имеет особого значения, но в контексте данной статьи понятия различаются фундаментально. «Coin» ― это крипта на собственном, разработанном с нуля блокчейне. Соответственно, такая крипта будет иметь хождение во всех проектах, функционирующих в этой сети. А вот «token» запускается на существующей платформе и применяется строго в рамках единственного приложения.

Соответственно, выпуск новых коинов потребует гораздо больше вложений ― как капитальных, так и человеческих. Токен в этом плане предъявляет гораздо меньше требований, из-за чего может быть создан даже единолично.

Что такое токен и каких видов он бывает

Итак, token и coin имеют фундаментальные различия в условиях запуска, но функции исполняют аналогичные. Дословно с английского слова переводятся как «жетон» и «монета» соответственно, что максимально точно характеризует это явление. Но, помимо платежного средства, токены могут исполнять и другие функции. Они зависят от вида жетона. Выделяют следующие типы.

  • Utility. Средство платежа в классическом понимании, но в цифровом виде и для конкретной платформы. Типичный пример ― крипта AXS, применяемая для покупки предметов и персонажей в игре Axie Infinity.
  • Governance. Жетоны управления, которые предназначены для голосования по вопросам развития площадки. Например, токен WAXG в системе WAX.
  • NFT. Невзаимозаменяемые, уникальные токены. Это, грубо говоря, цифровой ярлык для уникализации контента. Главная площадка по распространению NFT ― это Opensea.
  • Security. Аналог реальных акций. Такие жетоны дают держателю право на получение дивидендов или исполнение других обязательств со стороны эмиссионера.
  • Asset-backed. Токены, которые имеют базу в качестве реальных активов.

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

Выбор базовой сети

Определить фундаментальный блокчейн для будущего токена можно с помощью пяти ключевых параметров:

  1. сложность и необходимость работы с кодом блокчейна или смарт-контрактов;
  2. тип и целеполагание платформы;
  3. стоимость запуска токена;
  4. активность комьюнити сети;
  5. спрос на проекты, действующие на блокчейне, и его общая популярность.

Так, например, Ethereum сегодня ― самая популярная и востребована сеть. Соответственно, вероятность, что новое платежное средство в этой сети «выстрелит», выше, чем в никому неизвестном блокчейне. Но и стоимость запуска жетонов на Эфире просто заоблачная. Если в запасе нет достаточно средств, придется искать менее дорогие и популярные площадки. Кроме того, на Ethereum придется самостоятельно кодить смарт-контракты, что выдвигает дополнительные требования.

Параметры нового жетона и его токеномика

Четкого и стандартного определения слову «токеномика» до сих пор не сформулировано. Если говорить обобщенно, то это экономическая модель токена ― стоимость, объем и график эмиссии, методы распространения и так далее.

Однако, на практике заранее спланировать все без исключения факторы невозможно. Поэтому достаточно задать общее количество будущих токенов и график их выпуска, а также модель распределения. Чаще всего применяются следующие модели.

  • Майнинг. Классический метод распределения токенов между пользователями, которые обеспечивают работу системы своими вычислительными мощностями.
  • Первичная продажа жетонов или ICO. Позволяет привлекать средства сторонних инвесторов для дальнейшего развития площадки.
  • Первичное размещение токенов на бирже. Метод аналогичен предыдущему, но в качестве посредника выступает DEX или централизованная биржа. В таком случае актив будет более ликвидным.
  • Аукцион. После установки эмитентом минимальной цены за жетон, начинаются торги. Покупает токен тот, кто предложит самую большую цену.

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

Кроме того, принято также указывать, на какие части будет разделена эмиссия криптовалюты, и кому эти части в последующем достанутся. Например, сколько процентов токенов разработчики оставят за собой, сколько отправится на продажу, сколько получат инвесторы в качестве вознаграждения и так далее.

Практика ― как запустить свой токен

Развитие блокчейн-технологий привело к расширению активного комьюнити в этой индустрии. Сегодня сети как на базовом уровне, так и посредством сторонних дополнений, предоставляют удобный и понятный инструментарий для создания новых проектов. Тем более, когда это касается выпуска собственных токенов. Платформа зачастую дает готовый шаблон, который нужно лишь кастомизировать под соответствующие цели и задачи.

Поэтому в настоящий момент гораздо сложнее продвинуть свой жетон и выделить его на фоне тысяч других аналогичных проектов. Но это уже совсем другая история. Сейчас же разберемся с практической стороной вопроса для трех главных сетей по созданию токенов.

Ethereum

В сети Ethereum создается больше всего токенов.

Самая популярная платформа для запуска токенов, где выпускается 9 из 10 новых жетонов. Инструментарий среды разработки, предоставляемой Ethereum, позволяет создавать собственную валюту без глубоких познаний в программировании. Достаточно взять шаблон для будущего токена и выставить переменные под нужные задачи. За годы существования Эфирума площадка запустила множество стандартов, но сейчас нас интересуют только четыре из них.

  • ERC-20. Основной шаблон для запуска платежных и управляющих токенов, поддерживается подавляющим большинством кошельков.
  • ERC-721. Стандарт ориентирован на выпуск NFT, потому что каждый жетон здесь уникален.
  • ERC-777. Продолжение и аналог шаблона ERC-20. Полностью совместимы, но 777 дешевле и быстрее при совершении операций.
  • ERC-1400. Предназначен для выпуска жетонов security.

Чтобы максимально упростить процесс создания токена на Ethereum, можно воспользоваться сторонними средами разработки, ориентированными на новичков. Популярны Truffle, Embark и Remix. Причем последний наиболее дружелюбен и умеет указывать на сделанные ошибки. Кроме того его не нужно устанавливать ― утилита работает даже через браузер. Но для ее использования потребуется учетная запись в MetaMask.

Определившись с шаблоном и выбрав инструментарий, скачиваем исходный код блокчейна. Сделать это можно, например, здесь https://geth.ethereum.org/downloads/. Когда все готово, приступаем непосредственно к созданию. Чтобы новый токен отличался от других, создаем ему уникальные атрибуты:

  1. «Name» ― название жетона.
  2. «Symbol» ― тикер, краткий индекс. У Эфирума, например, это ETH.
  3. «Total supply» ― итоговая эмиссия.
  4. «Decimals» ― дробление единичной монеты. Выражается в количестве знаков после запятой. Параметр определяет, на какое значение можно разбить один токен для проведения операций.

Последний шаг ― деплоит жетона. Чтобы новый токен вошел в общую сеть, необходимо оплатить комиссию в несколько ETH. В техническом плане «загрузить» жетон в блокчейн проще всего через тот же Remix. Здесь это делается через соответствующую кнопку интерфейса. В остальных случаях придется действовать через командную строку.

Binance Smart Chain

Сеть от Binance Smart Chain тоже набирает популярность для создания токенов.

Относительно молодая площадка, которая стремительно набирает аудиторию. BSC также предлагает набор инструментов для создания собственной крипты. Как и в случае с Ethereum, Бинанс обладает большим выбором сред разработки, а основной стандарт токенов поддерживается почти всеми криптокошельками.

Сам же процесс аналогичен запуску токена на Эфируме. Здесь также проще всего воспользоваться средой Remix, а все шаги практически полностью совпадают. Ключевые различия:

  • в качестве стандарта для криптовалюты выбираем не ERC-20, а BEP-20;
  • исходный код находится здесь https://github.com/bnb-chain/BEPs/blob/master/BEP20.md;
  • комиссия за выпуск выплачивается в BNB.

Соответственно, здесь также потребуется кошелек MetaMask, причем привязанный к блокчейну BSC.

Solana

Сеть Solana молодая, но очень перспективная.

Еще более молодой блокчейн, чем BSC. Важной чертой Solana является реализация последних достижений отрасли, а именно ― консенсусов Proof-of-History и Delegated Proof-of-Stake. Применение этих решений повышает операционную скорость сети до 111 тысяч транзакций в секунду с дальнейшим потенциальным ростом. Тот же Ethereum обрабатывает лишь до 20 операций в секунду. Заметная разница, поэтому Solana привлекает все большую аудиторию.

Стандарт жетонов здесь всего один. Он покрывает все возможные ситуации и подойдет как для создания валюты, так и NFT, security и так далее. А это уже некоторым образом упрощает создание жетона.

Для начала создания собственного токена на Solana потребуется кошелек. Подойдет как Sollet, так и Phantom. Оба обладают нужным функционалом и работают в режиме браузерного расширения. Соответственно, для оплаты комиссий в кошельке должен быть запас крипты SOL. Впрочем, можно обойтись и без этих кошельков, но придется действовать через командную строку. Но сегодня рассмотрим простой метод через кошелек.

Итак, в первую очередь создаем сам токен и аккаунт для управления. Делается это простым нажатием кнопки «Mint Token» в интерфейсе кошелька. Указываем объем эмиссии, оплачиваем комиссию и ждем завершения операции. Когда все будет готово, жетоны отобразятся на балансе кошелька. Здесь же можно получить информацию, которая понадобится в дальнейшем ― адрес управляющего аккаунта.

Далее делаем токен «публичным». Для этого отправляемся на страницу https://github.com/solana-labs/token-list, где:

  1. Нажимаем «Fork» в правом верхнем углу страницы.
  2. Открываем папку «src».
  3. Затем папку «tokens».
  4. Открываем файл «solana.tokenlist.json».

Уже записанную информацию менять нельзя, зато можно добавить новую. Что и делаем. Дописываем строки:

Пустые кавычки заполняем следующей информацией:

  • address ― адрес токена;
  • symbol ― короткое название жетона;
  • name ― полное название;
  • decimals ― количество знаков после запятой для дробления токена;
  • logoURI ― ссылка на логотип;
  • tags ― тип токена, если нужно;
  • exceptions ― ссылки на соцсети или личный сайт, если нужно.

Когда все готово, в самом низу страницы нажимаем кнопку «Propose changes». Это действие отправит заявку о публикации токена на рассмотрение, которое займет около двух недель.

Другие сети

Помимо указанных выше блокчейнов, запуск токена возможен и вдругих сетях. В их числе, например, Enecuum, TRON и EOS. Все они поддерживают большинство распространенных стандартов ― utility, NFT и так далее. Принцип и алгоритм действий везде плюс-минус аналогичен ― создаем кошелек и/или скачиваем необходимые дистрибутивы, задаем параметры токена и оплачиваем работу сети для выпуска жетонов.

Создание невзаимозаменяемого жетона в целом мало отличается от платежных или управляющих токенов. Отличие заключается в том, что эмиссия таких tokens всегда ограничена единичным экземпляром, а его деление невозможно. Кроме того к такому активу необходимо добавить содержимое ― контент, который и будет обеспечивать стоимость. Впрочем, запускать NFT лучше на специализированных площадках вроде OpenSea. Там это реализовано удобно и интуитивно понятно. Подробнее про это и пошаговую инструкцию по созданию можно посмотреть здесь.

Листинг

Листинг криптовалют ― это добавление токена в биржевые списки. Это нужно, чтобы валюта получила возможность свободного хождения. Другими словами, чтобы любой пользователь мог купить, продать или обменять жетон на другую крипту. И тут есть два основных пути ― централизованные биржи и DEX.

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

  1. Подача заявки о запуске на площадке. У всех разные регистрационные формы, но обычно требуется указать полную информацию о проекте.
  2. Проверка проекта персоналом биржи. Анализу подвергается как сам токен, так и его авторы.
  3. Если второй пункт пройден, платформа выставляет требования для сотрудничества.
  4. Если автор принимает требования, подписывается договор, производятся анонсы о старте торгов.
  5. Подключение токена к бирже.
  6. Старт торгов.

Процесс листинга может длиться от нескольких недель до месяцев. При этом за размещение жетона площадка потребует платы. Чем крупнее биржа, тем больше придется заплатить. Зато выход на централизованную биржу ― это фактическое признание токена криптовалютным комьюнити.

Гораздо проще обстоит дело с DEX. Здесь предполагается три варианта листинга:

  • через голосование сообщества;
  • через разработчиков;
  • самостоятельное размещение.

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

How to Create Token Bound Accounts (ERC-6551)

How to Create Token Bound Accounts (ERC-6551)

ERC-6551 and ERC-4337 compatible Token Bound Accounts are easy to create using thirdweb — but how do you build them into your project, app, or game?

In this example app, built using both the thirdweb React SDK and Wallet SDK, we will

  • Create a user flow where the user connects a personal wallet (or TBA key).
  • View their owned NFTs from an NFT Drop contract with the ability to claim NFTs using this personal wallet.
  • Create functionality to select an NFT, connect to the associated smart wallet for that NFT, and perform an action using that TBA smart wallet.

A common use case for TBAs is in gaming — creating a wallet associated with the ERC-721 that users claim at the start of the game and holding all of the in-game assets within this TBA. In such examples, wanting a gasless and wallet-less user experience is common. This is now possible using TBAs combined with either email (for a Web2 type flow) or local wallet (for complete wallet abstraction)!

The full source code for this guide can be found here!

GitHub thirdweb-example

To learn how to build custom smart wallet contracts, like TBAs, visit this guide!

*The terms account, and wallet can be used interchangeably.

The App Structure

To create this demo app, we will wrap individual sections of the app in different providers so that we can access both the personal wallet and all TBAs as separate signers. When users connect their personal wallets, they can view and select each owned NFT in the drop contract. Upon selecting, they will be taken to a page showing the TBA for that token. This page will be wrapped in another provider so that the TBA signer can be used to perform actions such as claiming tokens and viewing the account’s token balance.

Pre Requisites

For this guide, you will need the following:

    installed to run the thirdweb CLI commands.
  • An NFT Drop contract deployed.
  • A Token Drop contract deployed.
  • A thirdweb API key that you can obtain from the Dashboard. * deployed on the network you are working on**.

For this example, we will use the official ERC-6551 registry factory contract to issue clones of our implementation contract. This ensures that marketplaces like OpenSea have one source with which to obtain the predetermined smart wallet addresses.

* If you would like to add custom logic to this contract, clone this GitHub repo, customize the code, and use the following command to deploy your contract:

We now require you to authenticate using your API secret key in order to use this command. Check out how to login here.

**At the time of writing this guide, the ERC-6551 Registry contract is deployed to the following networks:
— Goerli
— Sepolia
— Mumbai
— Mainnet
— Polygon
All are deployed at 0x02101dfB77FDE026414827Fdc604ddAF224F0921

Set Up the App and Connect the Personal Wallet

To set up the app, run the following command from your terminal:

When prompted, select EVM blockchain, Next.js as the framework, and TypeScript as the language. Give your project a name, and once the dependencies have been installed, open this newly created directory in your code editor.

First, create a folder called const and a file called constants.ts inside this to hold all of your constant variables. The activeChain variable can be any EVM chain and has to match the chain that your implementation and factory exist on.

Add the following variables to this file:

Open _app.tsx and modify the ThirdwebProvider with a supportedWallets object containing an array of wallets that users can connect to as their personal wallet. This wallet will contain all the NFTs we will create TBAs for.

Note that we also passed our thirdweb API Key so that we could use the thirdweb Smart Wallet infrastructure services such as the bundler and provider.

This array can be any wallet from the thirdweb Wallet SDK. These wallets will now be included as part of the ConnectWallet button — let’s add this to our app.

Inside index.tsx , add the following code:

Users will now initially be prompted to connect a personal wallet when they enter the app.

We have left a space for giving users the ability to claim NFTs and view their owned NFTs if they have connected their wallet — let’s do that now.

Claiming and Viewing Owned NFTs

To claim an NFT, we will use the Web3Button UI component. We also need to view the connected wallet’s owned NFTs. To do this, we will use the useOwnedNfts hook. This hook takes a contract as an argument, so we will need to get a contract from our NFT Drop contract address using the useContract hook. Putting all of this together, our index.ts file should now look like this:

We have used a component called NFTGrid to display the owned NFTs — let’s create this now.

Create a folder called components , and inside this, create another folder called NFT . In this folder, create two files: NFT.tsx and NFTGrid.tsx . Here, we are separating the individual NFT components from the grid itself. First, let’s create the NFT component for a single NFT inside NFT.tsx :

This component renders a ThirdwebNftMedia UI component to display the NFT.

Now let’s create the grid:

Here, we are mapping over each NFT to render an NFT component for each that has a clickable link. We now need to create a destination for this link.

Selecting an NFT to Connect to the Token-Bound Account

When someone clicks an individual NFT, they need to be taken to a page allowing them to connect the associated smart wallet and view and interact with it. Create a folder called token inside pages and inside this folder, create a folder called [contractAddress] . This is a dynamic route, so it will take the contractAddress and use it as part of the URL. Inside this folder, create a file called [tokenId].tsx , another dynamic route that will append the tokenId for the NFT that the user clicked on and append it to the URL.

Inside this file, add the following two functions:

  • getStaticProps : fetch the metadata for the NFT Drop contract and get the NFT data
  • getStaticPaths : statically pre-render pages since we are using dynamic routes

Now let’s create a useEffect so that on page render, a new smart wallet is created for that token. We will create a function createSmartWallet that will check if the smart wallet for this token already exists, the NFT itself exists, and the wallet is connected. In this function, we will call another function, newSmartWallet , which we will create in a moment, to create a smart wallet:

We need a useState to update the signer using setSigner , which we will use when performing actions with our TBA by passing it to the SmartWalletConnected component, and another useState to keep track of the smart wallet address which we set using setSmartWalletAddress . Putting this together, your [tokenId].tsx file should look like this:

There are two missing pieces:

  • creating a new TBA with the newSmartWallet function
  • SmartWalletConnected — the component to display the wallet information, including claiming tokens and displaying the wallet’s balance

Creating a TBA with the ERC-6551 Registry

Let’s create the newSmartWallet function. To create a TBA smart wallet by creating a clone of our implementation with the ERC-6551 registry factory contract, we are going to create a file inside components called SmartWallet and inside this, create a file called SmartWallet.ts . This file will contain the logic for creating our smart wallet. To set up a smart wallet using the ERC-6551 registry add the following:

The NFT token information is passed to the getAddress and createAccount functions used for determining the deterministic wallet address and creating a wallet for that NFT, respectively. The function newSmartWallet contains the configuration for creating a new smart wallet for this NFT using the data.

Claiming Tokens with the TBA and Viewing Balance

To render the information for the smart wallet and connect this smart wallet to our app, create a file called smartWalletConnected.tsx inside the SmartWallet folder. This file will contain the logic and components for when a smart wallet is created and connected.

To connect the TBA to our app, create a component called SmartWalletConnected which will take a signer as a prop — the signer that we updated inside [token].tsx . This signer will be passed to a new ThirdwebSDKProvider which will wrap the ClaimTokens component so that the new TBA signer can perform operations in this part of the app.

Finally, let’s create the ClaimTokens component to view the TBA wallet’s balance and claim tokens. To do this, we will use the useAddress hook to get the smart wallet address and the useBalance hook to get the balance of the TBA. We will use another Web3Button to claim tokens when the button is clicked using the action prop. The file should contain the following:

And that’s it! Add a few CSS styles, onSuccess and onLoading components, details of which can be found in the full source code, and you have a fully functioning app that uses TBAs!

Additionally, you could abstract away the wallet aspect completely by using a local or email wallet as the smart wallet’s personal wallet to claim tokens and sign messages. You could also make this personal wallet gasless by passing the gasless option to the ThirdwebProvider in _app.tsx .

To view the full source code, including styling and small UX improvements, visit the GitHub repo.

Токены Solan'ы

Понимание токенов Solana может быть довольно сложным, если вы имеете опыт работы с Ethereum. В Ethereum обычные токены используют стандарт ERC20, а NFT токены используют стандарт ERC721. Каждый токен ERC20, ровно как и каждая NFT коллекция, имеет свой собственный смарт-контракт

Модель аккаунтов Соланы

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

    Учетная запись либо содержит данные (например, сколько у вас токенов), либо представляет собой исполняемую программу (например, смарт-контракт). Первые называются «data accounts», а вторые — «program accounts». Важно отметить, что в отличие от Ethereum, учетные записи программы не хранят состояние. Все состояние хранится в учетных записях данных Каждый аккаунт содержит следующие поля:
    Каждая учетная запись имеет уникальный адрес (похожий на Ethereum). Большинство адресов являются открытым ключом keypair Каждая учетная запись принадлежит program. По умолчанию вновь созданная учетная запись принадлежит встроенной программе под названием «System Program». Только владелец учетной записи может изменить ее

Для получения более подробной информации вы можете обратиться к вики , о которой я упоминал выше, или прочитать краткий учебник по учетным записям

Что такое Solana’s Token Program?

Solana Token Program позволяет следующее (для взаимозаменяемых и невзаимозаменяемых токенов):

    Минт токенов Трансфер токена Сжигание токенов

Вот hana рассказывал о том, как это работает:

По сути, вместо развертывания нового смарт-контракта ERC20 для каждого нового токена, все, что вам нужно сделать, это отправить инструкцию программе токена. В зависимости от того, какую инструкцию вы отправляете, программа токенов будет минтить/передавать/сжигать токены

Если вы еще не совсем поняли, не волнуйтесь! Рассмотрение примера должно прояснить ситуацию!

Примечание: иногда вы увидите токены Solana, называемые «SPL tokens». SPL означает Solana Program Library (библиотеку программ Solana), которая представляет собой набор программ Solana, которые команда Соланы развернула в сети. Токены SPL аналогичны токенам ERC20, поскольку каждый токен SPL имеет стандартный набор функций

Как работает Solana Token Program?

Самый простой способ понять это — рассмотреть несколько примеров. В наших примерах будут рассмотрены взаимозаменяемые токены, и мы будем использовать инструмент командной строки spl-token для взаимодействия с программой токена (вы можете установить его, запустив в командной строке cargo install spl-token-cli)

Повторюсь, все, что делает spl-token — это отправляет инструкции в token program. Вы можете имитировать следующее поведение, используя клиент JavaScript или взаимодействуя с программой токена через CPI в Rust

Подготовка

Во-первых, убедитесь, что вы установили Solana CLI и spl-token

Затем запустите solana-keygen new -o

/my_solana_wallet1.json и создайте новую переменную окружения с именем $SOLADDR1, в которой будет храниться полученный открытый ключ. Повторите эти действия, но со второй переменной окружения с именем $SOLADDR2 (и назовите файл пары ключей my_solana_wallet2.json). Мы будем использовать эти адреса и файлы пар ключей позже, чтобы протестировать минт и трансфер токенов

Вот как это выглядит у меня:

Примечание: многие команды в этом руководстве можно сократить, запустив solana config set — keypair

/my_solana_wallet1.json, который устанавливает пару ключей клиента по умолчанию. Например, это позволяет не указывать флаг —owner для многих из следующих команд. Я использую более длинные версии команд, чтобы обьяснение было более понятным

Создание токена

Теперь, когда мы все настроили, мы можем использовать spl-token. Во-первых, давайте создадим новый тип токена

При создании токена нового типа создается новая учетная запись с данными, которую в дальнейшем мы будем называть «mint account». Каждый тип токена связан ровно с одним mint account. Адрес mint account — 6ifRGEkJ6XmEjuqfTFNqAjjomUiDJTjRv4GHqBH6usWr, но вместо этого мы будем использовать $TOKEN1, чтобы упростить чтение. Мы можем запросить информацию об учетной записи следующим образом (в конце много непонятных символов, но не переживайте, они нам пока не нужны):

Мы можем проверить владельца (TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA) с помощью Solana Explorer . Владельцем является token program (учетная запись программы), которая отвечает за создание новых токенов, минт токенов и передачу токенов

Теперь давайте посмотрим на данные mint account, которые идут после «Length: 82 (0x52) bytes», как показано выше. Человеку трудно читать шестнадцатеричные данные, поэтому вместо этого мы можем использовать Solana Explorer :

Solana Explorer декодирует данные и отображает их в удобочитаемом формате. Вот что означает каждое из полей:

    Address — это адрес mint account Current Supply — количество сминченных токенов. Поскольку мы только что создали токен, он равен 0 Mint Authority — открытый ключ из keypair, которому разрешено минтить токены (мы указали это с помощью флага —mint-authority. Если кто-то еще попытается минтить токены, то он этого не сможет) Decimals — определяет наименьший номинал токена. Для NFT он должен быть равен нулю. Девять по умолчанию

Прежде чем мы двинемся дальше, вот простая диаграмма, показывающая учетные записи, которые находятся в контакте, и то, как они связаны

    «Internal Solana relations» относятся к полю владельца, которое устанавливается для каждой учетной записи, например владелец, который отображается при запуске учетной записи solana $TOKEN1 «User-space relations» — это когда отношение между двумя учетными записями закодировано в данных учетной записи, например поле «mint authority», которое мы видели выше

Создание Token Account

Прежде чем мы сможем создать токены, мы должны сначала создать учетную запись токена

Отныне мы будем использовать $TOKENACCT1 вместо 9EYnoqiBQmJPR55db44cF4wkN1PD5D6vjxEz61r2Ujak, и мы будем называть эту учетную запись «token account». Вам может быть интересно, что такое токен-аккаунт? По сути, он просто хранит, сколько токенов есть у конкретного пользователя для определенного типа токена. Например, если у вас есть 10 токенов 1 и 5 токенов 2, то у вас будет две учетные записи токенов

Вот как выглядит токен-аккаунт:

Учетная запись токена связана с тремя другими учетными записями. Его внутренним владельцем является token program, поскольку token program должна иметь возможность изменять учетную запись (например, добавлять к ней больше токенов). Затем в пользовательском пространстве его владельцем является $SOLADDR1, а его «mint» или связанный с ним mint account — $TOKEN1

Вот как теперь связаны все аккаунты:

Token Minting

Наконец-то мы можем сминтить токены! Эта часть проще — мы просто указываем mint account (которая определяет «type» токена для минта), количество токенов и учетную запись, которой их нужно передать

Помимо использования spl-token balance, вы также можете использовать spl-token accounts, чтобы просмотреть, сколько каждого токена принадлежит определенной учетной записи

Что произойдет, если вы попытаетесь создать токены с другим значением параметра —mint-authority?

Ответ? Это не работает! Это связано с тем, что в поле «mint authority» token account'а указана другая учетная запись, и только этой учетной записи разрешено минтить новые токены

Token Transferring

Давайте попробуем перенести некоторые токены в $SOLADDR2 (которые должны были быть созданы в разделе « Подготовка »)

Неудача! Сообщение об ошибке говорит, что нам не разрешено передавать токены, если у получателя нет token account

Есть два способа исправить это:

    Создайтеtoken account для получателя, а затем перенесите токены. Используйте флаг —fund-recipient. Это заставляет отправителя платить за создание token account получателя

Мы пойдем с подходом № 1

Красиво, сработало! Давайте посмотрим на все учетные записи в этом действии

Wrapped SOL

Точно так же, как ETH можно обернуть токеном ERC20, чтобы сформировать wETH, так и SOL можно обернуть токеном SPL

Конечно, вы можете обратно развернуть полученный токен SPL, чтобы вернуть свои SOL

Такая упаковка SOL позволяет легко обменивать SOL на другие токены SPL

Подождите, а как там NFT?

Теперь, когда мы рассмотрели, как работают взаимозаменяемые токены, понять, что такое невзаимозаменяемые токены, должно быть легко. Я просто позволю вам прочитать доки , так как в любом случае я бы не стал много добавлять. Основными важными моментами являются:

    Используйте —decimals 0 при создании токена, так как он должен быть только один После минта одного токена отключите минты в будущем. Это гарантирует, что будет только один токен

На практике никто не создает NFT таким образом. Вместо этого большинство людей используют Candy Machine , инструмент для загрузки изображений и метаданных и создания NFT на их основе

Вот и все! К этому моменту вы должны понимать, как работают токены SPL и чем они отличаются от токенов ERC20

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *