Я сделал криптокошелёк с тремя кнопками. Самой сложной частью оказалась не крипта
Изначально я хотел сделать криптоплатёж почти таким же простым, как обычную оплату в приложении: открыл, нажал, оплатил. Но довольно быстро стало понятно, что главный враг — не плохой дизайн. Главный враг — сама структура крипты: сети, токены, газ, длинные адреса, подтверждения и необратимые ошибки.
Предисловие
Сразу честный статус: Stendly — это MVP/PWA для USDC-платежей, а не банк, не биржа и не "революция платежей". Внутри две части: кошелёк для покупателя и простой платёжный слой для продавца.
Сейчас идея проверяется в узкой нише: цифровые товары, USDC в Solana, оплата без выбора сети и без покупки SOL для газа. В кошельке есть баланс, отправка, получение, история операций и простой профиль.
Для продавца цель тоже узкая: принять USDC, увидеть платеж, получить вебхук и автоматически выдать товар. На стадии проверки рынка комиссия для продавцов — 0%. Я не хочу зарабатывать на первых мерчантах, пока не понимаю, есть ли здесь реальный рынок.
Что пока не работает: Stendly не принимает рубли, карты и СБП, не поддерживает BTC, ETH, TON, USDT TRC и десятки других токенов, не делает обмены внутри себя и не делает мосты между сетями.
Откуда вообще появилась эта боль
Один из моих личных примеров — оплата Porkbun. Задача была бытовая: купить домен. Но вместо обычного "ввел карту → оплатил" пришлось разбираться, какой кошелек безопаснее, какой токен купить, в какой сети выводить, почему Bitcoin вроде самый известный, но для маленькой оплаты не всегда удобен, и чем USDT TRC отличается от USDT ERC.
Самый неприятный момент был не в покупке, а в ощущении риска. Копируешь длинный адрес, сверяешь первые и последние символы, переводишь деньги обменнику и думаешь: сейчас либо все придет, либо я ошибся сетью, адресом или токеном.
Даже после пополнения кошелька проблемы не заканчиваются. В Trust Wallet я столкнулся с типичной историей: хотел обменять токен, нажал кнопку, увидел, что операция ушла, но ожидаемых новых денег не получил. Потом разобрался, что это мог быть не сам обмен, а разрешение программе в блокчейне использовать токен.
В этот момент стало понятно: проблема не только в интерфейсе. Крипта сама по себе состоит из действий, которые обычный платежный продукт обычно прячет.
Что я решил убрать
Я начал не с блокчейна, а с удаления лишних решений.
В первом экране оставил баланс, три кнопки и историю операций. Scan, Send, Receive. Снизу — Wallet и Me.
Я думал вынести Send и Scan вниз, как отдельные вкладки, но отказался. Нижняя панель должна отвечать за разделы, а не за действия. Действия лежат рядом с балансом, потому что пользователь сначала смотрит на деньги, потом решает, что делать.
С цветами была похожая история. Первая версия была тёмной, с фиолетовыми акцентами — выглядело привычно для криптопродукта, но именно это и мешало. Если я делаю кошелёк для маленьких повседневных платежей, он не должен выглядеть как инструмент для продвинутых.
Поэтому я убрал фиолетовый “крипто”-вайб, добавил светлую тему и оставил более нейтральный интерфейс. Идея простая: человек должен видеть не “Web3-приложение”, а баланс, сумму и понятное действие.
Но самое главное решение было не дизайнерским, а продуктовым: один токен и одна сеть. USDC в Solana.
Да, это резко сужает аудиторию. Зато убирает самый опасный экран: "выберите сеть".
Почему не Phantom, Solana Pay, Helio, Coinbase или Circle
Конкуренты есть. Делать вид, что их нет, глупо.
Phantom — сильный кошелек. Деньги у пользователя, много сетей и токенов, зрелый продукт. Но это кошелек для человека, который уже понимает крипту. Там нормально жить, если ты знаешь, что такое SOL, USDC, сеть, своп и комиссия.
Solana Pay — хороший стандарт для платежных ссылок, QR и запросов транзакций. Но это не готовый продукт для маленького продавца. Все равно нужно собрать кабинет, статусы, вебхуки, обработку ошибок, историю платежей и нормальный пользовательский путь.
Helio/MoonPay Commerce — уже готовый платежный продукт. У них есть ссылки, виджеты, подписки, плагины и много сетей. Это сильный конкурент, а не "плохое решение". Но у стандартного тарифа есть комиссия, и продукт шире, чем мне нужно для первой гипотезы.
Coinbase и Circle — инфраструктура другого уровня. Там кошельки, API, платежи, проверка пользователей, корпоративные сценарии. Это не то, с чем я пытаюсь спорить на старте.
Stendly сейчас — более узкая PWA/SDK-обвязка под маленькие цифровые продукты. VPN, домены, подписки, боты, доступы, SaaS-мелочь. Ставка не в том, чтобы победить всех платежных провайдеров. Ставка в том, что для части продавцов достаточно простого приема USDC с нулевой комиссией на старте, а для части покупателей — кошелька, где не нужно каждый раз думать про сеть и газ.
Stendly платит SOL в сеть, а пользователь компенсирует это USDC-комиссией.
Даже если выбрать USDC в Solana, остается странная деталь: чтобы отправить USDC, пользователю обычно нужен SOL для комиссии сети.
Для обычного человека это звучит абсурдно. У него есть доллары в виде USDC, он хочет отправить доллары, но для этого должен купить еще один токен.
В Stendly я убрал SOL из пользовательского сценария. Пользователь платит в USDC. Газ оплачивает сервис из своего SOL-резерва.
На экране это показывается простой строкой: плата сети — $0.02.
Фактическая комиссия Solana за обычную операцию меньше. Разница нужна как запас на приоритетную комиссию, колебания цены SOL и работу релейера. Это не спрятано в курсе, не вычитается у продавца и не появляется после оплаты. До подтверждения видно: сумма товара, плата сети, итог.
400 мс — не значит "платеж окончательно завершен"
У Solana часто встречается красивая цифра около 400 мс. Но для платежного продукта важно не перепутать скорость обработки и финальную уверенность.
Проще объяснить так: сначала сеть быстро видит транзакцию. Потом становится понятно, что она принята. Еще позже можно считать, что она окончательно закреплена в истории.
400 мс — это ближе к первому этапу, а не к полной уверенности. Для маленького цифрового товара можно принимать платеж быстрее. Для дорогой операции лучше ждать дольше.
Поэтому в Stendly нельзя просто показать зеленую галочку после первого сигнала и сразу выдать товар. Нужны статусы: обрабатывается, принят, завершен. Вебхук продавцу должен уходить в той точке, которая подходит под риск конкретного товара.
Еще одна обязательная вещь — защита от повторной обработки. Если одно и то же событие пришло дважды, подписка или ключ не должны выдаваться два раза.
Реальная транзакция важнее красивого экрана
Красивый баланс сам по себе ничего не доказывает. В криптопродукте важно показать, что деньги реально двигаются в сети.
Вот пример тестовой операции: перевод $0.10 USDC, комиссия сети меньше цента, статус виден в обозревателе блокчейна.
Внутри нет сложной магии. Сервер готовит транзакцию, пользователь подтверждает перевод своим ключом, Stendly оплачивает газ, Solana обрабатывает операцию, продавец получает вебхук.
Главная задача — не изобрести новый блокчейн. Главная задача — сделать так, чтобы покупатель не видел всю техническую кухню при оплате товара за $5.
Самая слабая часть — пополнение
Это место я не хочу прятать.
Stendly пока не решает главный входной барьер: что делать человеку, у которого вообще нет крипты.
Если встроить покупку с карты, сразу появляются проверки личности, ограничения стран, банковские риски, спорные операции и провайдеры, которые могут отказать пользователю. Если встроить обмены, появляются курс, комиссии, разрешения токенов и новые ошибки. Если добавить мосты между сетями, появляется отдельный риск: мосты в крипте уже много раз были одной из самых проблемных частей инфраструктуры.
Поэтому на старте пополнение максимально прямое: у пользователя есть адрес USDC в Solana, он переводит туда средства сам. Если USDC уже есть — просто отправляет. Если есть USDT или другая крипта — меняет во внешнем сервисе. Если крипты нет вообще — Stendly пока не делает этот путь простым.
Это ограничение неприятное, но честное. Иначе проект быстро превратится из простого кошелька в биржу, обменник и платежного посредника одновременно.
Почему я не добавляю все токены
Самый частый совет очевиден: добавить USDT TRC, ETH, BTC, TON и Base.
Проблема в том, что каждый новый токен — это не просто новая строка в списке. Это новые адреса, комиссии, ошибки, статусы, поддержка и объяснения пользователю. Для универсального кошелька это нормально. Для маленькой оплаты цифрового товара — лишний шум.
Я не утверждаю, что один токен и одна сеть — правильный ответ навсегда. Это правильное ограничение для MVP. Оно позволяет проверить главный вопрос: есть ли спрос на простой способ тратить USDC на цифровые товары.
Если спроса нет, добавление еще десяти сетей не спасет продукт. Если спрос есть, расширяться можно аккуратно и по данным, а не по желанию "поддерживать всё".
Что я проверяю на самом деле
Гипотеза узкая.
Есть люди, у которых уже есть крипта. Они хотят тратить ее на цифровые товары без ручного копирования адресов и выбора сети при каждой оплате.
Есть маленькие продавцы, которым не нужен полноценный платежный комбайн. Им нужен прием USDC, кабинет, API, вебхуки и отсутствие комиссии на старте.
Если эти две стороны совпадут, Stendly имеет смысл. Если нет — значит идея слишком узкая или плохо выбрана ниша.
Сейчас для меня важнее не добавить больше функций, а получить реальные операции: кто оплатил, что купил, сколько времени заняло, где человек застрял, почему продавец подключился или отказался.
Итог
Я начинал с желания сделать криптоплатеж проще. В процессе понял, что полностью простой крипты не существует.
Можно убрать выбор сети. Можно показывать баланс в долларах. Можно оплатить газ за пользователя. Можно сделать три кнопки вместо двадцати. Можно дать продавцу вебхук и не брать с него комиссию на старте.
Но нельзя отменить базовые свойства: ключ нужно хранить, перевод нельзя просто отозвать, сеть нужно выбрать заранее, а пополнение кошелька используя обычные денег почти всегда приводит к проверкам и посредникам.
Поэтому Stendly — не "крипта для всех" и не замена банкам. Это узкая попытка сделать один сценарий нормальным: потратить USDC в Solana на маленький цифровой товар без лишней нервотрепки.