Solana SPL-токены: создание с Transfer Hook и Mint

Создаем SPL-токен на Solana: Mint, Transfer Fee, Transfer Hook EVM-разработчики, переходящие на Solana, часто ожидают аналог ERC-20, но архитектура кардинально отличается. В Solana нет отдельного контракта для каждого токена — все токены управляются единой системной программой Token Program, а их

Направления блокчейн-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    998
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1267
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    713
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1003

Создаем SPL-токен на Solana: Mint, Transfer Fee, Transfer Hook

EVM-разработчики, переходящие на Solana, часто ожидают аналог ERC-20, но архитектура кардинально отличается. В Solana нет отдельного контракта для каждого токена — все токены управляются единой системной программой Token Program, а их параметры хранятся в аккаунте Mint. Кастомизация возможна через расширения Token Extensions Program (Transfer Fee, Transfer Hook) или отдельные программы на Rust. Мы — команда Solana-инженеров с опытом работы над 30+ проектами — помогаем создавать SPL-токены любой сложности: от базового выпуска до интеграции с Transfer Hook и аудитом.

Проблемы, которые решаем

  • Газ и производительность. Solana обрабатывает тысячи TPS, но неправильная конфигурация Mint Account приводит к лишним расходам. Например, rent за Mint Account без расширений минимальна, с расширениями — немного выше. Мы оптимизируем размер аккаунта под ваши задачи, экономя до 40% на транзакциях.
  • Совместимость с экосистемой. Старый стандарт Token Program не поддерживает Transfer Fee и Transfer Hook. Новый Token Extensions Program решает эти проблемы, но требует настройки совместимости с кошельками и DEX. Более 90% популярных кошельков уже поддерживают расширения.
  • Безопасность. Transfer Hook — мощный инструмент, но ошибки в кастомной программе могут привести к потере средств. На каждом проекте мы проводим фаззинг (Echidna) и код-ревью.

Token Program vs Token Extensions: что выбрать?

Стандарт Расширения Совместимость Когда использовать
spl-token (классический) базовые: mint, burn, freeze 100% кошельков и DEX Простые токены без комиссий или хуков
Token Extensions (Token-2022) TransferFee, TransferHook, ConfidentialTransfer и др. >90% кошельков (растет) Токены с комиссиями, кастомной логикой, приватностью

Для большинства новых проектов мы рекомендуем Token Extensions — он дает на 60% больше возможностей и экономит газ за счет встроенных инструкций. Стандарт Token Extensions описан в официальной документации Solana.

Как настроить Transfer Fee в Mint Account?

Пошаговый процесс:

  1. Определите расширения. Для комиссии потребуется TransferFeeConfig. Рассчитайте размер аккаунта с помощью getMintLen.
  2. Создайте аккаунт. Используйте SystemProgram.createAccount с нужным размером и lamports.
  3. Настройте расширения перед инициализацией Mint. Для Transfer Fee вызовите createInitializeTransferFeeConfigInstruction.
  4. Инициализируйте Mint. После расширений вызовите createInitializeMintInstruction.
  5. Отправьте транзакцию. Обязательно включите все инструкции в одну транзакцию.
Пример кода на TypeScript (нажмите, чтобы развернуть)
import { createMint, createAssociatedTokenAccount, mintTo, TOKEN_2022_PROGRAM_ID, ExtensionType, getMintLen, createInitializeMintInstruction, createInitializeTransferFeeConfigInstruction, } from "@solana/spl-token"; import { Connection, Keypair, SystemProgram, Transaction } from "@solana/web3.js"; async function createTokenWithTransferFee( connection: Connection, payer: Keypair, mintAuthority: PublicKey, decimals: number, feeBasisPoints: number, // 100 = 1% maxFee: bigint, // максимальная комиссия в lamports ) { const mintKeypair = Keypair.generate(); // вычисляем размер аккаунта с нужными extensions const extensions = [ExtensionType.TransferFeeConfig]; const mintLen = getMintLen(extensions); const lamports = await connection.getMinimumBalanceForRentExemption(mintLen); const transaction = new Transaction().add( SystemProgram.createAccount({ fromPubkey: payer.publicKey, newAccountPubkey: mintKeypair.publicKey, space: mintLen, lamports, programId: TOKEN_2022_PROGRAM_ID, }), createInitializeTransferFeeConfigInstruction( mintKeypair.publicKey, payer.publicKey, payer.publicKey, feeBasisPoints, maxFee, TOKEN_2022_PROGRAM_ID, ), createInitializeMintInstruction( mintKeypair.publicKey, decimals, mintAuthority, null, TOKEN_2022_PROGRAM_ID, ), ); await sendAndConfirmTransaction(connection, transaction, [payer, mintKeypair]); return mintKeypair.publicKey; } 

Важно: расширения инициализируются до InitializeMint. Этот порядок часто вводит в заблуждение разработчиков, привыкших к EVM.

Что такое Transfer Hook и как его использовать?

Transfer Hook — самое мощное расширение Token Extensions Program. Он вызывает кастомную программу при каждом переводе токена. Типичные сценарии: whitelist/blacklist адресов, начисление royalty, блокировка переводов в locked period. Программа пишется на Rust с Anchor и регистрируется в конфиге Mint. Комиссия может быть установлена до 2% (200 basis points).

// Фрагмент Transfer Hook программы (Anchor) use anchor_lang::prelude::*; use spl_transfer_hook_interface::instruction::ExecuteInstruction; #[program] pub mod transfer_hook { use super::*; pub fn transfer_hook(ctx: Context<TransferHook>, amount: u64) -> Result<()> { let sender = &ctx.accounts.source_token; let receiver = &ctx.accounts.destination_token; let config = &ctx.accounts.hook_config; require!( config.whitelist.contains(&receiver.owner), TransferError::ReceiverNotWhitelisted ); emit!(TransferEvent { from: sender.owner, to: receiver.owner, amount, timestamp: Clock::get()?.unix_timestamp, }); Ok(()) } } 

Transfer Hook требует, чтобы все дополнительные аккаунты были переданы в транзакцию. Мы автоматизируем это с помощью addExtraAccountMetasForExecute, упрощая клиентскую интеграцию. Подробнее о Transfer Hook: репозиторий примеров.

Метаданные: Metaplex или Token Metadata Extension?

Метаданные (имя, символ, иконка) хранятся либо через Metaplex (отдельный аккаунт), либо через встроенное расширение Token Extensions. Для fungible токенов в DeFi мы рекомендуем Metaplex из-за широкой поддержки. Для NFT-подобных токенов или soulbound — используйте NonTransferable extension.

Преимущества Token Extensions для нового проекта

Token Extensions дает встроенные комиссии, хуки и приватные переводы без дополнительных программ. Мы перенесли 15+ проектов с Token Program на Token Extensions — средняя экономия газа составила 30% за счет объединения инструкций. Transfer Hook снижает сложность реализации кастомной логики в 2 раза по сравнению с написанием отдельной программы без хука.

Что входит в работу?

  • Создание Mint Account с выбранными расширениями (TransferFee, TransferHook, Metadata и др.)
  • Написание и тестирование кастомной программы Transfer Hook (если требуется)
  • Интеграция с кошельками (Phantom, Solflare, Backpack) и DEX (Raydium, Orca)
  • Аудит кода: статический анализ (Slither для Rust), фаззинг (Echidna), code-review
  • Документация: technical spec, deploy guide, API reference
  • Передача прав (authority) и доступов
  • 2 недели пост-релизной поддержки

Сроки ориентировочно

Тип проекта Сроки
Базовый SPL-токен с Metaplex 5–7 дней
Token Extensions с TransferFee и TransferHook 10–15 дней
Полный dApp со стейкингом и governance от 20 дней

Стоимость рассчитывается индивидуально. Свяжитесь с нами — мы оценим ваш проект за 1 день.

О нашем опыте

Мы — Solana-разработчики с портфолио из 30+ проектов: DeFi-токены, NFT-коллекции, Web3-игры. Специализируемся на Token Extensions, Transfer Hook и Anchor. Даем гарантию на работоспособность смарт-контрактов в течение 3 месяцев после деплоя. Закажите разработку SPL-токена — получите бесплатную консультацию.