Справочник по SPL Token CLI

Интерфейс командной строки spl-token создаёт минты, token accounts, полномочия, переводы и расширения Token-2022 и управляет ими.

Этот справочник соответствует spl-token-cli v5.6.1 — версии, входящей в состав Agave v4.2.1. Выполните spl-token --version и используйте <command> --help, чтобы узнать точный набор опций в установленной у вас версии.

Создание минтов, переводы, смена полномочий, сжигание, заморозка и закрытие аккаунтов отправляют транзакции. Перед запуском команды проверьте кластер, Token Program, подписанта и адреса. Изменения в Mainnet затрагивают реальные активы.

Установка и справка

В комплект поставки Agave CLI входит spl-token. Если он не установлен, используйте опубликованный Rust-крейт:

cargo install spl-token-cli --version 5.6.1
spl-token --version

Просмотрите справку на уровне корня или конкретной команды:

spl-token --help
spl-token create-token --help
spl-token transfer --help

Глобальные опции

Указывайте глобальные опции перед командой.

ОпцияНазначение
-u, --url <URL_OR_MONIKER>Выбрать RPC URL или mainnet-beta, testnet, devnet, либо localhost.
-C, --config <PATH>Использовать другой файл конфигурации Solana CLI.
--fee-payer <KEYPAIR>Выбрать аккаунт, оплачивающий комиссии за транзакции.
-p, --program-id <ADDRESS>Использовать явно указанный ID Token Program.
--program-2022Использовать Token-2022 (TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb).
--output <FORMAT>Возвращать json или json-compact, где это поддерживается.
--with-compute-unit-limit <UNITS>Задать лимит вычислительных единиц транзакции.
--with-compute-unit-price <MICRO_LAMPORTS>Задать приоритетную цену за вычислительную единицу.
-v, --verboseПоказывать дополнительный вывод.
-V, --versionВывести версию установленного CLI.

По умолчанию используется исходная Token Program. Указывайте --program-2022 для минта или аккаунта Token-2022, в том числе при чтении. Команда завершится ошибкой, если выбранная программа не является владельцем переданного адреса.

Создание и использование токена

Команды выводят адреса созданных объектов. Сохраните адрес минта, возвращённый командой create-token, для последующих команд.

# Create a six-decimal mint under the original Token Program.
spl-token --url devnet create-token --decimals 6
# Create the default signer's associated token account for the mint.
spl-token --url devnet create-account <MINT_ADDRESS>
# Mint 100 tokens to that associated token account.
spl-token --url devnet mint <MINT_ADDRESS> 100
# Read supply, balance, and complete mint or account details.
spl-token --url devnet supply <MINT_ADDRESS>
spl-token --url devnet balance <MINT_ADDRESS>
spl-token --url devnet display <MINT_OR_TOKEN_ACCOUNT_ADDRESS>
# Transfer tokens to a wallet and create its associated account if needed.
spl-token --url devnet transfer \
<MINT_ADDRESS> \
10 \
<RECIPIENT_WALLET_ADDRESS> \
--fund-recipient

Суммы указываются в UI-единицах токена с учётом количества десятичных знаков минта. Такие команды, как transfer, burn и unwrap-sol, принимают ALL там, где это указано в их справке.

Создание минта Token-2022

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

spl-token --program-2022 create-token \
--decimals 6 \
--enable-metadata
spl-token --program-2022 initialize-metadata \
<MINT_ADDRESS> \
"Example Token" \
EXAMPLE \
https://example.com/token.json

Распространённые опции расширений create-token:

  • --enable-close
  • --enable-confidential-transfers auto|manual
  • --enable-freeze
  • --enable-group и --enable-member
  • --enable-metadata
  • --enable-non-transferable
  • --enable-pause
  • --enable-permanent-delegate
  • --enable-permissioned-burn
  • --enable-transfer-hook или --transfer-hook <PROGRAM_ID>
  • --interest-rate <BASIS_POINTS>
  • --transfer-fee-basis-points <BASIS_POINTS> вместе с --transfer-fee-maximum-fee <AMOUNT>
  • --ui-amount-multiplier <MULTIPLIER>

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

Управление полномочиями и делегатами

# Change the mint authority.
spl-token authorize <MINT_ADDRESS> mint <NEW_AUTHORITY_ADDRESS>
# Permanently remove the mint authority.
spl-token authorize <MINT_ADDRESS> mint --disable
# Let a delegate spend up to 25 tokens from one token account.
spl-token approve \
<TOKEN_ACCOUNT_ADDRESS> \
25 \
<DELEGATE_ADDRESS>
# Remove the current delegate.
spl-token revoke <TOKEN_ACCOUNT_ADDRESS>

authorize поддерживает типы полномочий mint, freeze, owner, close, а также специфичные для расширений. Удаление полномочий с помощью --disable необратимо, если нет другого механизма программы, способного их восстановить.

Заморозка, сжигание и закрытие

spl-token freeze <TOKEN_ACCOUNT_ADDRESS>
spl-token thaw <TOKEN_ACCOUNT_ADDRESS>
spl-token burn <TOKEN_ACCOUNT_ADDRESS> 5
# A token account must normally have a zero token balance before closing.
spl-token close --address <TOKEN_ACCOUNT_ADDRESS>

burn уменьшает как баланс аккаунта, так и общее предложение. close возвращает оставшиеся lamports аккаунта настроенному получателю; сожжённые токены он не восстанавливает.

Wrap и unwrap SOL

# Create or fund the owner's wrapped SOL token account.
spl-token wrap 1
# Unwrap part of the wrapped SOL balance.
spl-token unwrap-sol 0.25
# Close the wrapped SOL account and return its full lamport balance.
spl-token unwrap

Используйте sync-native после прямого перевода lamports на wrapped SOL token account, чтобы сумма токенов соответствовала базовым lamports.

Подпись multisig

Создайте multisig M-из-N для Token Program, включающий до 11 участников:

spl-token create-multisig \
2 \
<MEMBER_1_ADDRESS> \
<MEMBER_2_ADDRESS> \
<MEMBER_3_ADDRESS>

Для транзакции, управляемой этим multisig, передайте адрес multisig в качестве соответствующих полномочий и укажите keypair участников через повторяющиеся значения --multisig-signer. Сверьтесь со справкой целевой команды, так как её флаг основных полномочий зависит от операции.

Конфиденциальные балансы

Команды конфиденциального баланса требуют минта Token-2022, настроенного для конфиденциальных переводов, и настроенного аккаунта получателя.

spl-token --program-2022 configure-confidential-transfer-account \
--address <TOKEN_ACCOUNT_ADDRESS>
spl-token --program-2022 deposit-confidential-tokens \
<MINT_ADDRESS> \
10 \
--address <TOKEN_ACCOUNT_ADDRESS>
spl-token --program-2022 apply-pending-balance \
--address <TOKEN_ACCOUNT_ADDRESS>
spl-token --program-2022 withdraw-confidential-tokens \
<MINT_ADDRESS> \
5 \
--address <TOKEN_ACCOUNT_ADDRESS>
spl-token --program-2022 transfer \
<MINT_ADDRESS> \
1 \
<RECIPIENT_ADDRESS> \
--confidential

Для configure-confidential-transfer-account и apply-pending-balance передайте либо --address <TOKEN_ACCOUNT_ADDRESS>, либо позиционный <MINT_ADDRESS>, но не оба сразу. Позиционная форма использует associated token account владельца. Команды депозита и вывода всегда принимают минт и поддерживают --address для переопределения этого аккаунта по умолчанию.

Используйте enable-confidential-credits, disable-confidential-credits, enable-non-confidential-credits и disable-non-confidential-credits, чтобы управлять тем, какие зачисления принимает аккаунт. Эти настройки влияют на приватность аккаунта и совместимость платежей; прежде чем менять их, проверьте аккаунт.

Полный индекс команд

Следующий индекс включает все команды верхнего уровня в spl-token-cli v5.6.1.

КомандаОписание
accountsВывести список token accounts, принадлежащих кошельку, с возможной фильтрацией по минту.
addressВывести адрес выбранного кошелька или адрес его associated token account.
apply-pending-balanceПеревести ожидающие конфиденциальные токены в доступный конфиденциальный баланс.
approveОдобрить делегата и лимит расходования для token account.
authorizeИзменить или отключить полномочия минта, аккаунта или расширения.
balanceПоказать баланс token account.
benchЗапустить команды бенчмаркинга токенов.
burnУничтожить токены на аккаунте и уменьшить предложение минта.
closeЗакрыть подходящий token account и вернуть его lamports.
close-mintЗакрыть минт Token-2022, настроенный с расширением close-mint.
configure-confidential-transfer-accountНастроить аккаунт для конфиденциальных переводов.
create-accountСоздать associated или вспомогательный token account.
create-multisigСоздать multisig M-из-N для Token Program.
create-tokenСоздать минт, при необходимости с расширениями Token-2022.
deposit-confidential-tokensПеревести неконфиденциальные токены в ожидающий конфиденциальный баланс.
disable-confidential-creditsОтклонять входящие конфиденциальные переводы для аккаунта.
disable-cpi-guardОтключить CPI Guard для аккаунта.
disable-non-confidential-creditsОтклонять входящие неконфиденциальные переводы для конфиденциального аккаунта.
disable-required-transfer-memosПерестать требовать, чтобы входящие переводы содержали memo.
displayПоказать полные сведения о минте, token account или multisig.
enable-confidential-creditsПринимать входящие конфиденциальные переводы для настроенного аккаунта.
enable-cpi-guardОграничить отдельные операции с токенами при вызове через CPI.
enable-non-confidential-creditsПринимать входящие неконфиденциальные переводы для конфиденциального аккаунта.
enable-required-transfer-memosТребовать, чтобы входящие переводы содержали memo.
freezeЗаморозить token account с помощью freeze authority минта.
gcЗакрыть ненужные token accounts и по возможности объединить балансы.
helpВывести справку по корню или по команде.
initialize-groupИнициализировать конфигурацию группы Token-2022 для минта.
initialize-memberДобавить минт Token-2022 в группу в качестве участника.
initialize-metadataИнициализировать встроенные метаданные Token-2022.
mintВыпустить новые единицы токена с помощью mint authority.
pauseПриостановить выпуск, сжигание и перевод для минта Token-2022 с поддержкой паузы.
resumeВозобновить операции для приостановленного минта Token-2022.
revokeУдалить делегата token account.
set-interest-rateОбновить ставку минта с начислением процентов.
set-transfer-feeЗапланировать новые параметры комиссии за перевод.
set-transfer-hookИзменить ID программы transfer hook для минта.
supplyПоказать общее предложение минта.
sync-nativeСинхронизировать сумму аккаунта wrapped SOL с его lamports.
thawРазморозить замороженный token account.
transferПеревести токены на token account или кошелёк.
unwrapЗакрыть аккаунт wrapped SOL и вернуть все lamports.
unwrap-solВывести часть или весь SOL с аккаунта wrapped SOL.
update-confidential-transfer-settingsОбновить настройки одобрения или аудитора конфиденциальных переводов для минта.
update-default-account-stateИзменить состояние по умолчанию для новых token accounts минта.
update-group-addressИзменить адрес group pointer минта.
update-group-max-sizeИзменить максимальное число участников группы токенов.
update-member-addressИзменить адрес group member pointer минта.
update-metadataИзменить или удалить поля встроенных метаданных.
update-metadata-addressИзменить адрес metadata pointer минта.
update-ui-amount-multiplierЗапланировать новый множитель масштабируемой UI-суммы.
withdraw-confidential-tokensВернуть конфиденциальные токены на неконфиденциальный баланс.
withdraw-excess-lamportsВывести lamports сверх баланса, освобождающего от аренды, с аккаунта Token Program.
withdraw-withheld-tokensСобрать комиссии за перевод, удержанные на token accounts или в минте.
wrapОбернуть SOL в token account нативного минта.

Структурированная и офлайн-подпись

Используйте структурированный вывод вместо разбора отображаемого текста:

spl-token accounts --output json
spl-token display <MINT_ADDRESS> --output json-compact

Команды, формирующие транзакции, обычно поддерживают --sign-only, --blockhash, --signer <PUBKEY=SIGNATURE>, --nonce и --nonce-authority. Точный набор офлайн-входных данных зависит от команды, количества десятичных знаков минта и схемы полномочий, поэтому сформируйте неподписанное сообщение по инструкциям --help этой команды и проверьте каждый адрес, прежде чем собирать подписи.

Is this page helpful?