Solana API: платежи SOL и SPL-токенами через REST
Создавайте адреса Solana и перемещайте SOL и SPL-токены обычными REST-вызовами. Никакого web3.js и никакого SDK для установки.
Solana API не должен навязывать вашему бэкенду JavaScript SDK. Chaingateway оборачивает Solana в обычный REST: вы создаёте адреса и отправляете SPL-токены двумя POST-запросами, а GET возвращает текущую высоту блока. Аутентификация — Bearer-токен в заголовке Authorization. Ответы — JSON. Ваш бэкенд на PHP, Go или Java общается с Solana так же, как с любым другим HTTP-сервисом.
Пробный период длится 7 дней и не требует KYC. Создайте API-ключ и выполните первый запрос до появления следующего блока.
Одна возможность на эндпоинт
RPC-провайдеры структурируют документацию по Solana по возможностям: доступ к ноде здесь, стриминг там, вебхуки в третьем месте. Поверхность Solana у Chaingateway меньше намеренно, потому что это платёжный API, а не сервис ноды общего назначения. Отображённая тем же способом, она выглядит так:
| Возможность | Эндпоинт | Статус |
|---|---|---|
| Создание адресов | POST /api/v2/solana/addresses | Работает |
| Отправка SOL | POST /api/v2/solana/transactions | Работает |
| Отправка SPL-токенов | POST /api/v2/solana/transactions/SPL | Работает |
| Проверка баланса | GET /api/v2/solana/balances/{address} | Работает |
| Чтение состояния сети | GET /api/v2/solana/blocks/number | Работает |
| Вебхуки депозитов | — | Пока нет в Solana; паттерн опроса ниже |
Каждый эндпоинт принимает тот же Bearer-токен, а заголовок X-Network: testnet переключает любой запрос на тестовое окружение. Схемы запроса и ответа — в справочнике API.
Простые транзакции
Отправляйте SOL и SPL-токены простым JSON-payload. Solana производит блоки значительно быстрее секунды, поэтому выплата обычно подтверждается, пока ваш пользователь ещё смотрит на индикатор загрузки.
Безопасная обработка адресов
Адреса Solana — это 32-байтовые открытые ключи в кодировке base58, и API валидирует их перед построением любой транзакции. Архитектура некастодиальная: ключи от ваших средств принадлежат вам.
Декодированные запросы
Данные транзакций возвращаются как структурированный JSON, а не base64-кодированные блобы. Переводы токенов читаемы без обращения к сырым данным инструкций.
Вебхуки (IPN)
Честно сразу: вебхуки пока недоступны для Solana. Отслеживайте депозиты опросом вместо этого; GET /api/v2/solana/blocks/number сообщает, когда приходят новые блоки, чтобы вы могли задавать темп проверок, а GET /api/v2/solana/balances/{address} отвечает, поступило ли что-то. В Ethereum, BSC, Polygon, Arbitrum, TRON и Bitcoin вебхуки депозитов работают уже сегодня.
Solana через REST, без web3.js
Официальный путь в Solana — это JSON-RPC, задокументированный на solana.com/docs/rpc. Он раскрывает протокол ноды: методы вроде getLatestBlockhash и sendTransaction, плюс клиентскую библиотеку, делающую их пригодными к использованию. Чтобы отправить SPL-токен таким способом, ваш код получает свежий blockhash до его истечения, разрешает associated token account получателя (и создаёт его, если он ещё не существует), затем строит, подписывает и сериализует транзакцию. В JavaScript web3.js и пакет spl-token делают это за вас. На любом другом языке вы во многом предоставлены сами себе.
Chaingateway заменяет это одним HTTP-вызовом. API разрешает токен-аккаунты и строит транзакцию на стороне сервера, а ваш бэкенд никогда не импортирует Solana SDK. Если вам нужен сырой доступ к сети для аналитики или собственных программ, RPC-провайдер — правильный инструмент. Для платежей REST короче, а у более короткого кода меньше мест, где что-то может сломаться.
Минты, токен-аккаунты и ATA: почему переводы Solana отличаются
Если вы пришли из Ethereum, BSC или Polygon, часть Solana, которая с наибольшей вероятностью вас укусит, — это не скорость и не комиссии. Это модель аккаунтов.
Модель EVM
Баланс токена — это запись внутри собственного хранилища контракта токена. Ваш адрес «держит» USDT, потому что внутренняя таблица контракта так говорит. Отправка токенов на совершенно новый кошелёк просто добавляет строку в эту таблицу; получателю не нужно существовать в сети каким-либо особым образом.
Модель Solana
Solana разбивает ту же идею на отдельные аккаунты. Токен определяется своим mint-аккаунтом, который хранит эмиссию и десятичные знаки. Балансы живут в токен-аккаунтах, по одному на комбинацию кошелька и минта, и стандартный вариант — associated token account (ATA): его адрес детерминированно выводится из адреса кошелька и адреса минта. Ваш кошелёк не содержит USDC. Он владеет отдельным аккаунтом, который содержит USDC.
Два следствия для платежей
- ATA должен существовать, прежде чем токены смогут в него попасть. Если ваш получатель никогда не держал этот токен, аккаунт нужно создать в сети, а создание требует депозита, делающего его rent-exempt: 0,00203928 SOL по состоянию на середину 2026 года, согласно официальной документации Solana. На практике транзакция отправителя создаёт и финансирует недостающий аккаунт.
- Переводы перемещают стоимость между токен-аккаунтами, а не между адресами кошельков. Код, наивно нацеленный на адрес кошелька, завершится неудачей, поэтому инструкция перевода SPL принимает оба токен-аккаунта плюс минт и его десятичные знаки для проверки.
Именно эту бухгалтерию Chaingateway выполняет на стороне сервера. Вы передаёте адреса кошельков и минт токена; API выводит токен-аккаунты и строит корректный перевод. Ваш бэкенд никогда не узнаёт, что такое program-derived address, — в этом и суть.
REST против web3.js: один и тот же перевод, дважды
Вот как выглядит отправка 10 USDC с web3.js и пакетом spl-token:
import { Connection, PublicKey } from "@solana/web3.js";
import {
getOrCreateAssociatedTokenAccount,
transferChecked,
} from "@solana/spl-token";
const connection = new Connection("https://your-rpc-endpoint");
const usdc = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const senderAta = await getOrCreateAssociatedTokenAccount(
connection, payer, usdc, payer.publicKey
);
const recipientAta = await getOrCreateAssociatedTokenAccount(
connection, payer, usdc, new PublicKey(recipient)
);
await transferChecked(
connection, payer,
senderAta.address, usdc, recipientAta.address,
payer, 10_000_000, 6 // 10 USDC при 6 десятичных знаках
);Один вызов вместо бухгалтерии ATA выше — создайте аккаунт и попробуйте в devnet.
Быстрый старт: три запроса до первого перевода SPL
Создайте адрес:
curl -X POST https://app.chaingateway.io/api/v2/solana/addresses \
-H "Authorization: Bearer $CHAINGATEWAY_API_KEY"curl https://app.chaingateway.io/api/v2/solana/blocks/number \
-H "Authorization: Bearer $CHAINGATEWAY_API_KEY"curl -X POST https://app.chaingateway.io/api/v2/solana/transactions/SPL \
-H "Authorization: Bearer $CHAINGATEWAY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contractaddress": "TokenMintAddress",
"from": "YourSenderAddress",
"to": "RecipientAddress",
"amount": 10,
"privatekey": "YourSenderPrivateKey"
}'Solana в цифрах
Цифры ниже сверены с официальной документацией Solana по состоянию на начало июля 2026 года.
Слот — окно, в котором один валидатор может произвести блок, — настроен примерно на 400 миллисекунд и на практике колеблется примерно между 400 и 600 миллисекундами. Именно этот ритм означает, что опрос депозитов каждую секунду или две никогда сильно не отстаёт от сети.
Базовая комиссия транзакции — 5000 lamports за подпись, что составляет 0,000005 SOL. Половина сжигается, половина идёт производителю блока. Поверх этого есть необязательная приоритетная комиссия, оцениваемая в микро-lamports за единицу вычислений; по умолчанию она равна нулю и покупает приоритет планирования, когда сеть загружена. Для платёжной нагрузки практическое прочтение простое: комиссии настолько малы, что растворяются внутри вашей маржи даже на транзакции в один доллар.
Подтверждение и финальность — разные вещи в Solana, и это различие важно для того, как вы зачисляете депозиты. Транзакция обычно подтверждается, то есть сверхбольшинство валидаторов проголосовало за её блок, в течение секунды-двух. Полная финальность занимает около 12,8 секунды по состоянию на середину 2026 года. Обновление консенсуса Alpenglow, запланированное к развёртыванию в конце 2026 года, нацелено сжать финальность примерно до 100–150 миллисекунд; относитесь к этому как к анонсированному плану, а не как к работающему свойству, пока оно не поставлено. Разумная политика сегодня: зачисляйте небольшие платежи при подтверждении, удерживайте крупные дополнительный десяток секунд до финальности.
Отслеживание депозитов без вебхуков
У Solana пока нет эндпоинта вебхука депозитов в API Chaingateway. Вместо этого обнаружение опрашивает два вызова: GET /api/v2/solana/blocks/number для отслеживания новых блоков и GET /api/v2/solana/balances/{address} для проверки входящих средств. При субсекундных слотах интервал опроса в две секунды всё равно показывает платёж как полученный в течение нескольких секунд.
Дисциплинированный цикл опроса дёшев в исполнении. Сохраняйте высоту блока, обработанную в последний раз, и каждый раз, когда она меняется, проверяйте ваши депозитные адреса — или GET /api/v2/solana/balances/{address}/tokens/{mint} для конкретного SPL-токена — и сопоставляйте найденное с открытыми заказами.
Стоимость задержки меньше, чем звучит. Solana производит блоки значительно быстрее секунды, поэтому даже двухсекундный интервал опроса означает, что клиент видит «оплачено» в течение нескольких секунд после отправки. Весь цикл — несколько десятков строк на любом языке, работающих как cron-задача или фоновый воркер. Когда позже вы расширите тот же поток на сеть с вебхуками, бухгалтерия остаётся идентичной; меняется только триггер, с pull на push.
Приём USDC в Solana: разобранный пример
USDC — это платёжный рельс, сделавший Solana расчётной сетью, поэтому он даёт хороший конкретный разбор. Адрес минта в mainnet — EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v, выпущенный Circle; всё остальное, претендующее быть USDC, им не является.
Принимающая сторона: когда клиент оформляет заказ, создайте свежий адрес через POST /api/v2/solana/addresses и сохраните его для заказа. Покажите адрес и сумму, и позвольте клиенту заплатить с любого кошелька или биржи. Ваш цикл опроса из предыдущего раздела подхватывает входящий перевод, сопоставляет принимающий адрес с заказом и переключает его на оплаченный. При 400-миллисекундных слотах разрыв между «клиент нажал отправить» и «ваша база данных говорит оплачено» составляет несколько секунд, большая часть которых — ваш собственный интервал опроса.
Записывайте подпись транзакции каждого зачисленного депозита с уникальным ограничением. Циклы опроса перезапускаются, довосстанавливаются и перезапускаются заново, и идемпотентность на уровне базы данных гарантирует, что ничто из этого не сможет зачислить заказ дважды.
Платящая сторона зеркальна. Выплата — это один вызов POST /api/v2/solana/transactions/SPL с минтом USDC в качестве contractaddress и читаемым "amount": 10; API применяет шесть десятичных знаков USDC за вас. Держите скромный баланс SOL на отправляющем адресе: 0,000005 SOL за подпись на комиссии плюс 0,00203928 SOL всякий раз, когда нужно создать токен-аккаунт получателя. Обе суммы достаточно малы, чтобы один пополненный резерв покрывал месяцы выплат.
Что вы получаете по сравнению с карточными рельсами — это расчёт за секунды без механизма chargeback, а что вы теряете — возможность отменить ошибку. Валидация адреса, которую API выполняет перед построением транзакции, здесь ваш друг, но ваш собственный экран подтверждения важен не меньше.
Любой токен в Solana, включая ваш собственный
SPL — это стандарт токенов Solana, и API одинаково обращается с каждым SPL-минтом. USDC и USDT работают из коробки, с автоматическим применением десятичных знаков. Если вы заминтили собственный токен, передайте адрес его минта тому же эндпоинту, и он будет вести себя как основные токены. Поскольку Chaingateway использует одну структуру эндпоинтов для всех сетей, приведённый выше код Solana переносится на Ethereum, BSC или Polygon заменой сегмента сети и суффикса токена в URL: /solana/transactions/SPL становится /ethereum/transactions/erc20.
Почему разработчики выбирают Solana
Solana исполняет транзакции параллельно, а не строго последовательно, и именно отсюда берётся её пропускная способность. Комиссии достаточно малы, чтобы выплаты крошечных сумм оставались экономически оправданными, а подтверждение достаточно быстрое, чтобы страница кассы могла просто его дождаться. Объём USDC в Solana превратил сеть в серьёзную расчётную сеть, и интерес разработчиков вокруг неё держался через несколько рыночных циклов.
Testnet, devnet и заголовок X-Network
У Solana два публичных тестовых кластера, и их названия сбивают людей с толку. Devnet — повседневная песочница для разработчиков приложений: бесплатный SOL доступен из краников airdrop, и ничто на нём не имеет ценности. Testnet существует в основном для того, чтобы валидаторы и основные контрибьюторы могли испытывать новые релизы под нагрузкой. Если вы использовали Sepolia в Ethereum, devnet — ближайший по духу эквивалент.
С Chaingateway вы вообще не управляете URL кластеров. Добавьте заголовок X-Network: testnet к любому запросу, и он выполнится против тестового окружения; уберите его, и идентичный запрос станет вызовом mainnet. Нет второго API-ключа и отдельного аккаунта.
Используйте тестовый прогон для сценариев, которые больно ощутить в mainnet: выплата на адрес, никогда не державший этот токен (путь создания токен-аккаунта), перезапуск вашего цикла опроса посреди работы и дублирующая отправка одной и той же выплаты. Каждый из них занимает минуты для репетиции, и каждый становится реальным инцидентом, если вы впервые столкнётесь с ним в продакшене.
Когда запросы завершаются неудачей
API сообщает о проблемах обычными HTTP-кодами статуса, так что ничто в вашей обработке ошибок не должно быть специфичным для Solana.
401 означает, что Bearer-токен отсутствует или неверен. Ошибки в диапазоне 4xx — это сбои валидации, например адрес, не декодирующийся как base58, или отсутствующее поле; тело JSON называет, что исправить, и повтор без изменения payload бессмыслен. 429 означает, что вы достигли лимита запросов вашего тарифа; замедлитесь и синхронизируйте опрос депозитов с ритмом высоты блока, а не жёстким циклом. Тарифы с более высокими лимитами — на странице тарифов.
Ошибки сервера в диапазоне 5xx безопасно повторять для чтения. Для отправки токенов будьте осторожнее: после таймаута вы не знаете, была ли транзакция транслирована, а у Solana здесь пока нет следа вебхука. Проверьте свои записи и недавние переводы адреса перед повторной отправкой и держите одну строку базы данных на каждую задуманную выплату, чтобы повторный запуск вашего воркера не мог отправить дважды.
Логируйте полное тело ответа рядом с вашим запросом. Коды статуса и схемы ошибок для каждого эндпоинта — в справочнике API.
Построено для любого сценария использования
Самый распространённый паттерн — приём платежей: назначьте каждому клиенту депозитный адрес, опрашивайте входящие переводы SPL и отмечайте заказ оплаченным, с расчётом за секунды и комиссиями слишком малыми, чтобы иметь значение в вашем расчёте маржи. Второй паттерн — операции с кошельками: платформы, управляющие депозитами и выводами для многих пользователей через ту же горстку эндпоинтов.
Те же строительные блоки обрабатывают автоматизацию выплат для airdrop и запусков токенов, регулярные переводы для биллинга по подписке и трансграничные платежи, где альтернатива — цепочка корреспондентских банков, занимающая дни и снимающая процентные пункты.
Интеграция за три шага
Получите API-ключ. Зарегистрируйтесь, и ключ появится в вашей панели немедленно. Пробный период 7 дней не требует KYC.
Выполните первый запрос. Быстрый старт охватывает аутентификацию и ваш первый вызов.
Настройте отслеживание депозитов и запустите продакшен. В Solana это означает опрос по ритму высоты блока; в других сетях вы можете переключиться на вебхуки. Когда это заработает, уберите заголовок X-Network: testnet, и тот же код заработает в mainnet.
Что работает в какой сети
Solana — единственная сеть без вебхуков депозитов пока, отсюда прочерк в этом столбце ниже на странице. Вот как полная картина эндпоинтов сравнивается по всем семи сетям.
| Сеть | Адреса | Переводы токенов | Вебхуки депозитов |
|---|---|---|---|
| Bitcoin | POST /api/v2/bitcoin/wallets/{wallet}/addresses | — (нет стандарта токенов) | GET /api/v2/bitcoin/webhooks/notifications |
| Ethereum | POST /api/v2/ethereum/addresses/import | ERC-20: POST /api/v2/ethereum/transactions/erc20 | GET /api/v2/ethereum/webhooks/notifications |
| TRON | POST /api/v2/tron/addresses/import | TRC-20 и TRC-10: POST /api/v2/tron/transactions/trc20 и .../trc10 | GET /api/v2/tron/webhooks/notifications |
| Solana | POST /api/v2/solana/addresses | SPL: POST /api/v2/solana/transactions/SPL | — |
| BNB Smart Chain | POST /api/v2/bsc/addresses/import | BEP-20: POST /api/v2/bsc/transactions/bep20 | GET /api/v2/bsc/webhooks/notifications |
| Polygon | POST /api/v2/polygon/addresses/import | ERC-20: POST /api/v2/polygon/transactions/erc20 | GET /api/v2/polygon/webhooks/notifications |
| Arbitrum | POST /api/v2/arbitrum/addresses/import | ERC-20: POST /api/v2/arbitrum/transactions/erc20 | GET /api/v2/arbitrum/webhooks/notifications |
Две сноски для правильного прочтения таблицы. Во-первых: TRON — самая глубокая интеграция на платформе. Помимо перечисленных выше маршрутов, в справочнике описаны стейкинг (POST /api/v2/tron/freeze и /delegate), параметры сети и пара для самостоятельного подписания — /transactions/trc20/build для построения транзакции и /transactions/broadcast для отправки транзакции, подписанной локально. Если ваша служба комплаенса настаивает, что приватные ключи никогда не покидают ваши серверы, этот паттерн build-and-broadcast — ваш путь.
Во-вторых: прочерк означает, что текущий справочник не документирует маршрут v2 для этой ячейки, а не то, что сеть второсортна. У Bitcoin нет стандарта токенов, поэтому ячейка токенов пуста — нативный BTC работает через собственную модель кошелька: создайте зашифрованный паролем кошелёк через POST /api/v2/bitcoin/wallets, деривируйте депозитные адреса под ним и отправляйте через POST /api/v2/bitcoin/transactions. Справочник Solana охватывает создание адресов, переводы SOL и SPL, а также запросы баланса и блоков, но пока без вебхуков. Для всего, что не перечислено здесь, актуальное состояние — в справочнике API.
Часто задаваемые вопросы
Готовы интегрировать Solana?
Создайте аккаунт, скопируйте API-ключ и отправьте перевод SPL в тестовой сети в течение следующих десяти минут. Полный справочник эндпоинтов — на /docs/, а портал разработчика собирает туториалы по самым частым платёжным сценариям.