← Блог
10 мин чтения
|
Опубликовано
|
Обновлено

API-песочница для крипто: как безопасно тестировать платежи

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

Главы
C
Chaingateway Team
Эксперты по блокчейну

Проверил(а) Maurice Sobiera

Изометрические платформы тестовых и боевых платежей

API-песочница для криптовалют — это изолированная копия платёжного или кошелькового API, в которой можно создавать кошельки, отправлять транзакции и получать уведомления без движения реальных денег. Переход в боевой режим выполняется заменой учётных данных и настроек сети. Провайдеры используют этот термин по-разному: одни имитируют балансы, другие направляют вас в публичную тестовую сеть блокчейна.

Это руководство объясняет разницу, проводит план тестирования от первого ключа до первого вебхука и перечисляет, что проверить перед запуском.

Коротко

  • Песочница — это изолированная копия API, которой управляет провайдер. Тестовая сеть — это отдельный публичный блокчейн с монетами без стоимости. Многие команды используют и то и другое.
  • Проверяйте полный цикл: создайте кошелёк, пополните его, отправьте транзакцию, подтвердите её, получите вебхук и обработайте сбой.
  • Большинство ошибок платежей прячется в вебхуках. Проверяйте подписи, повторы, дубликаты и события не по порядку.
  • Никогда не используйте боевые ключи или секреты кошельков в тестовом коде и не допускайте, чтобы тестовые адреса попали в боевую конфигурацию.
  • Перед запуском сравните поддерживаемые сети, активы, поведение комиссий и время подтверждения в тесте и в боевом режиме.

Что такое API-песочница для криптовалют?

Этот термин используют свободно, поэтому начнём с рабочего определения. В дизайне API мок возвращает заранее заданные ответы. Полноценная песочница устроена иначе: Redocly описывает её как stateful, изолированную среду, которая сохраняет записи, выполняет бизнес-логику и позволяет тестировать необратимые действия без риска для продакшен-данных. Для криптовалют это различие важно. Если вы создаёте кошелёк, а потом запрашиваете его баланс, мок вернёт то, что ему велели вернуть. Песочница помнит кошелёк, который вы создали.

Криптопесочница обычно делает три вещи:

  1. Выдаёт отдельные тестовые API-ключи, которые не могут трогать реальные средства.
  2. Позволяет создавать аккаунты или кошельки и давать им тестовые балансы.
  3. Имитирует или передаёт в тестовую сеть транзакции и уведомления, которые вы увидели бы в продакшене.

Песочница, тестовая сеть и devnet

Тестовая сеть блокчейна — это не то же самое, что API-песочница. Тестовая сеть — это отдельная публичная сеть, которая повторяет мейннет, чтобы разработчики могли экспериментировать без ставок настоящей криптовалюты. Документация Ethereum описывает тестовые сети как аналог стейджинг-сервера. Она называет Sepolia рекомендуемой тестовой сетью по умолчанию для разработки приложений и указывает, что большинство получает тестовый ETH бесплатно из фаусетов.

Монеты тестовых сетей не должны иметь реальной стоимости. Если кто-то просит вас заплатить за них, считайте это тревожным сигналом.

API-песочницаТестовая сеть или devnet
Кем управляетсяПровайдером APIСообществом или фондом блокчейна
Что имитируетЭндпоинты, аккаунты, балансы и уведомления провайдераСам блокчейн
СредстваФиктивные балансы, которые часто можно пополнить по запросуМонеты из фаусета без стоимости
Скорость и надёжностьОбычно предсказуемыеМогут быть медленными, перегруженными или сбрасываться
Лучше всего подходит дляИнтеграционного тестирования вашего приложения с APIПроверки поведения в сети, контрактов и логики комиссий

Практический вывод: песочница проверяет вашу интеграцию с API, а тестовая сеть проверяет, как ваш код ведёт себя в настоящем, пусть и ничего не стоящем, блокчейне. Каждая сеть документирует свои тестовые сети: у Tron есть Shasta и Nile, а руководство разработчика Bitcoin объясняет режимы testnet и regtest.

Как протестировать криптоплатёж пошагово?

Провайдеры различаются в деталях, но последовательность ниже работает почти везде.

1. Получите тестовые учётные данные

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

Если провайдер использует подписанные запросы, как API на основе HMAC, реализуйте функцию подписи один раз и напишите для неё модульный тест с известным входом и выходом. Лишний перевод строки в подписываемой строке даёт ошибки, которые выглядят как сбои аутентификации, и на поиск причины уходят часы.

2. Создайте кошелёк

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

3. Пополните его тестовыми активами

Здесь песочницы расходятся сильнее всего. Одни позволяют зачислить баланс через вызов API или кнопку в панели. Другие ожидают, что вы запросите монеты в публичном фаусете для нужной тестовой сети и отправите их на новый адрес. Фаусеты могут быть ограничены по частоте запросов или опустеть, поэтому запрашивайте средства заранее в течение дня, а не за десять минут до демонстрации. Держите один хорошо пополненный тестовый кошелёк как «банк» и пополняйте из него кошельки поменьше.

Таблица вариантов пополнения тестовых активов: кредит через API, публичный фаусет, лимиты фаусета, банковский кошелёк

4. Отправьте транзакцию

Начните с простейшего случая: перевод нативной монеты между двумя вашими кошельками. Затем переходите к переводам токенов (токены в стиле ERC-20, BEP-20 или TRC-20), потому что токены добавляют вызовы контрактов, другую механику комиссий и в некоторых сетях отдельную валюту комиссии. Запишите ID транзакции, который вернул API, и сверьте его с обозревателем блоков для этой тестовой сети.

5. Проверьте результат

У транзакции несколько состояний, и приложение должно моделировать их, а не один флаг «оплачено»:

  • Отправлено: принято API, но ещё не в блокчейне.
  • В ожидании: видно в мемпуле или в блоке с недостаточным числом подтверждений.
  • Подтверждено: достаточно подтверждений для вашей готовности к риску.
  • Неудачно или отброшено: отклонено, не хватило газа, заменено или не включено в блок.

Для отчётности о выручке считайте расчётные платежи, а не попытки. То же касается подтверждений в сети: транзакция в ожидании ещё не является выручкой.

Как протестировать вебхуки и пути сбоев?

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

Проверка получения уведомления от начала до конца

Четырёхшаговый поток проверки уведомления: публичный HTTPS-адрес, регистрация URL, тестовая транзакция, подтверждение события

Нужен публичный HTTPS-адрес, который достигает вашей машины разработки. Подойдёт инструмент туннелирования или стейджинг-сервер. Зарегистрируйте URL, отправьте тестовую транзакцию на отслеживаемый адрес и убедитесь, что ваш обработчик получает событие с ожидаемыми полями. Наша статья о использовании вебхуков для автоматической обработки депозитов описывает типичную структуру.

Чек-лист проверки вебхуков

  • Проверьте подпись. Отклоняйте любой запрос, подпись которого не совпадает, и проверьте это, подменив подписанное значение. В Chaingateway подписывается txid, поэтому дополнительно сверяйте сумму и получателя с ожидаемыми. Это объясняет статья о личных секретах.
  • Проверьте идемпотентность. Доставьте одно и то же событие дважды. Система должна зачислить деньги пользователю один раз, поэтому сохраняйте ID события или транзакции и проверяйте его до действия.
  • Проверьте доставку не по порядку. Событие «подтверждено» может прийти раньше «в ожидании». Не позволяйте старому состоянию перезаписать новое.
  • Проверьте медленного или сбоящего получателя. Верните ошибку или подвисните на 30 секунд и посмотрите, что сделает провайдер. Chaingateway не повторяет автоматически: неудачные уведомления выводятся списком, и каждое вы запрашиваете заново.
  • Подтверждайте быстро. Отвечайте кодом успеха сразу и выполняйте тяжёлую работу в очереди. Долгие обработчики вызывают таймауты и повторные доставки.
  • Проверьте повтор после простоя. Выключите получатель, отправьте транзакции, включите его обратно. Знайте, как восстановить пропущенные события, например по списку неудачных уведомлений или истории транзакций.

Сбои, которые стоит вызвать намеренно

Намеренно ломайте что-нибудь в песочнице, для этого она и нужна:

  • Отправьте больше, чем баланс кошелька.
  • Отправьте на некорректный адрес или на адрес для другой сети.
  • Отправьте токен на кошелёк без нативной монеты для комиссии.
  • Задайте слишком низкую комиссию и посмотрите, как транзакция зависает.
  • Отправьте крошечную сумму ниже вашего порога минимального платежа.
  • Заплатите чуть меньше или чуть больше, чем ожидает счёт. Недоплаты и переплаты — обычное дело при криптооплате, поэтому определите политику и протестируйте её.

Чем песочница отличается от боевого режима?

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

ОбластьЧто проверить
Время подтвержденияБлоки тестовой сети могут быть быстрее, медленнее или неравномерными по сравнению с мейннетом. Замерьте заново в боевых сетях на небольших суммах.
КомиссииВ тестовых сетях комиссии часто тривиальны или фиксированы. Подтвердите, как API оценивает комиссии в мейннете и что происходит при перегрузке сети.
Поддерживаемые активыТокены в тестовом режиме могут быть подмножеством боевых или наоборот. Подтвердите каждый актив, который вы указываете в продукте.
Лимиты запросовЛимиты могут различаться по средам и тарифам. Проведите нагрузочный тест в пределах тех лимитов, которые у вас будут на самом деле.
Структура данныхПроверьте, что имена полей, точность десятичных знаков и единицы сумм (наименьшая единица или целые монеты) совпадают между средами.
Доставка вебхуковБоевой объём приносит повторы, всплески и более крупные полезные нагрузки. Повторите тесты идемпотентности на реальном трафике.
Комплаенс и лимитыНекоторые провайдеры смягчают проверки в тестовом режиме. Выясните, что будет действовать при запуске.

Затем проведите контрольный платёж в боевом режиме: небольшой реальный перевод через весь поток, от создания кошелька до вебхука и записи в учёте. Он стоит несколько центов или долларов и ловит ошибки конфигурации, которые не может поймать ни одна песочница.

Как защищать ключи во время тестирования?

Тестовые среды — это место, где начинаются плохие привычки, а привычки переходят в продакшен.

  • Используйте отдельные ключи для каждой среды. Называйте их понятно и давайте разные префиксы в менеджере секретов, чтобы путаница была видна.
  • Не храните секреты в репозитории. Используйте переменные окружения, хранилище или секретный стор вашего CI. Если ключ всё же попал в коммит, проверьте историю и смените ключ.
  • Никогда не импортируйте реальный кошелёк в тестовую среду. Если фраза восстановления или приватный ключ управляет реальными средствами, им не место в тестовом скрипте, скриншоте или сообщении в чате.
  • Ограничьте доступ к ключам. Подрядчики и агентства, которые работают над вашей интеграцией, должны получать только тестовые ключи.
  • Фиксируйте базовые URL в конфигурации, а не в коде. Добавьте проверку при запуске, которая отказывается работать, если тестовый ключ стоит рядом с боевым URL или наоборот.
  • Меняйте ключи после демонстраций. Ключи, которые были показаны на экране или в записи, нужно считать скомпрометированными.

Какие ограничения проверить заранее?

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

  1. Какие сети она покрывает в тестовом режиме? Если вашему продукту нужны Ethereum, Tron и Bitcoin, подтвердите все три, а не только одну.
  2. Какие стандарты токенов и активы? Нативные монеты просты. Пробелы обычно появляются на стейблкоинах и NFT.
  3. Как получить тестовые средства и есть ли лимиты? Лимиты фаусетов и дневные максимумы определяют, как быстро команда может итерировать.
  4. Сохраняет ли она состояние? Stateful-песочница позволяет строить многошаговые сценарии. Stateless-мок — нет.
  5. Доступны ли вебхуки в тестовом режиме и можно ли запускать их по требованию?
  6. Насколько она стабильна? Тестовые сети сбрасывают или выводят из эксплуатации, что может стереть ваши тестовые кошельки. Держите настройку в скриптах, чтобы пересобрать её за минуты.

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

Как тестировать с Chaingateway?

Chaingateway не предлагает отдельной имитируемой песочницы с фиктивными балансами. Документация API описывает тестирование в публичных тестовых сетях: добавьте заголовок X-Network: testnet к запросу или уберите его для мейннета. Одни и те же эндпоинты, ключи и формы ответов применяются к обоим. У каждой сети своя тестовая сеть, перечисленная на странице поддерживаемых сетей:

СетьТестовая сеть
EthereumSepolia
TronNile
BNB Smart ChainBSC testnet
PolygonAmoy
ArbitrumArbitrum Sepolia
BitcoinTestnet3
SolanaDevnet

Первый тест занимает четыре запроса. Создайте адрес, пополните его из фаусета сети, зарегистрируйте вебхук и отправьте перевод:

Terminal window
# 1. Create an address on Sepolia
curl -X POST https://app.chaingateway.io/api/v2/ethereum/addresses \
-H "Authorization: Bearer $CHAINGATEWAY_TOKEN" \
-H "X-Network: testnet" \
-H "Content-Type: application/json" \
-d '{"password": "use-a-strong-test-password"}'
# 2. Fund the address from a Sepolia faucet, then register a webhook for it
curl -X POST https://app.chaingateway.io/api/v2/ethereum/webhooks \
-H "Authorization: Bearer $CHAINGATEWAY_TOKEN" \
-H "X-Network: testnet" \
-H "Content-Type: application/json" \
-d '{"to": "0xYourNewAddress", "url": "https://your-tunnel.example/hooks", "type": "ETH", "reference": "test-1"}'

Ответ первого вызова содержит новый адрес. Для вебхука type задаёт вид актива. В Ethereum значения: ETH, ERC20 и ERC721, а в других сетях свои названия, например TRC20 в Tron. Справочник API перечисляет их. Вебхуки есть во всех поддерживаемых сетях, кроме Solana, поэтому для Solana тестируйте опросом транзакций.

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

Тарифы начинаются от 49 € в месяц для Plus, Pro стоит 99 €, Premium — 249 €, Enterprise — 499 € в месяц. При годовой оплате это 490 €, 990 €, 2 490 € и 4 990 € соответственно. Каждый тариф начинается с бесплатного пробного периода на 7 дней без карты и KYC. Подробности см. на странице цен, страницах Блокчейн-API и вебхуки Chaingateway.

Скриншот главной страницы Chaingateway: единый блокчейн-API для криптоплатежей и вебхуков в 7 сетях

Идеи о том, что строить, когда тесты пройдены, даст наш обзор сценариев использования блокчейн-API.

Как выглядит практичный план тестирования?

Используйте это как одностраничный чек-лист для релиза.

  1. Настройка: тестовые ключи в менеджере секретов, базовый URL в конфигурации, функция подписи покрыта модульными тестами.
  2. Кошельки: создайте не менее двух на каждую поддерживаемую сеть и запишите форматы адресов.
  3. Пополнение: пополните один главный тестовый кошелёк, скриптом пополняйте остальные.
  4. Основной путь: перевод нативной монеты, затем перевод токена, каждый проверен в обозревателе блоков.
  5. Вебхуки: проверка подписи, повторная доставка, события не по порядку, простой получателя.
  6. Сбои: недостаточный баланс, адрес другой сети, отсутствие валюты комиссии, низкая комиссия, недоплата, переплата.
  7. Модель состояний: ваша база однозначно обрабатывает отправлено, в ожидании, подтверждено и неудачно.
  8. Нагрузка: всплеск транзакций в пределах лимитов запросов вашего тарифа.
  9. Проверка безопасности: в тестовом коде нет боевых секретов, логи очищены от ключей и фраз восстановления.
  10. Контрольный платёж: один небольшой боевой платёж через весь поток перед объявлением о запуске.

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

API-песочница для криптовалют — это то же самое, что тестовая сеть?

Нет. Песочница — это изолированная среда, которой управляет провайдер API, с собственными ключами и тестовыми балансами. Тестовая сеть — это отдельный публичный блокчейн, монеты которого не имеют стоимости. Некоторые песочницы построены на тестовых сетях, а некоторые полностью имитируются, поэтому проверьте, что именно вы получаете.

Можно ли тестировать криптоплатежи без реальных денег?

Да. Используйте песочницу провайдера или публичную тестовую сеть с монетами из фаусета. Оба варианта позволяют создавать кошельки, отправлять переводы и запускать уведомления бесплатно. Завершите проверку очень небольшой боевой транзакцией, потому что боевые комиссии и время могут отличаться от тестовых условий.

Как тестировать вебхуки на локальной машине?

Выведите локальный сервер наружу через инструмент туннелирования или разверните тестовый эндпоинт с HTTPS, а затем зарегистрируйте этот URL для уведомлений. Отправьте тестовую транзакцию на отслеживаемый адрес и убедитесь, что ваш обработчик получает, проверяет и обрабатывает событие. Повторите с дубликатами и задержанными доставками.

Что проверить перед переходом из песочницы в боевой режим?

Подставьте боевые ключи и базовые URL через конфигурацию, затем проверьте поддерживаемые сети и активы, оценку комиссий, число подтверждений и лимиты запросов. Повторите тесты идемпотентности вебхуков и отправьте контрольный платёж, чтобы подтвердить, что весь поток работает с реальными средствами.

Источники

Рекомендуем

Как мы пишем эти статьи

Готовы собрать это сами? Получите свой API-ключ — 7-дневный пробный период, без карты — или посмотрите API блокчейна для полного справочника по эндпоинтам.

C
Chaingateway Team
Эксперты по блокчейну

Команда Chaingateway стремится упростить интеграцию блокчейна для разработчиков по всему миру.