Как правильно принимать платежи пользователей в сети Tron?
Здравствуйте!
Столкнулся с задачей по приёму криптоплатежей в приложении. Проект полностью легальный, цель — реализовать корректный и масштабируемый приём USDT через сеть Tron.
Идея в том, чтобы под каждого пользователя генерировался отдельный кошелёк. Основной вопрос: каким образом отслеживать факт его пополнения?
В интернете часто советуют парсить адреса через API, но у API есть лимиты. Возникает вопрос: как это работает у проектов с 10k+ пользователей? Постоянный парсинг выглядит неэффективно и сложно масштабируется.
Есть вариант использовать собственную ноду и слушать транзакции напрямую из блокчейна, но там сотни операций в секунду, и их нужно фильтровать по своим адресам. Не уверен, что это оптимальное решение.
Пока реализовал промежуточный вариант: у меня есть 5–10 собственных кошельков, пользователю выдаётся один из них, а идентификация происходит по уникальной сумме транзакции. Однако у этого метода есть серьёзные недостатки, и в долгосрочной перспективе он непрактичен.
Хотел бы узнать у специалистов, как подобные задачи решаются «правильно» и с возможностью масштабирования. Готов рассмотреть платную консультацию или аудит, чтобы разобраться в архитектуре и реализовать рабочее решение.
Я не очень понимаю как устроен Трон. Но если он работает как все блокчейны то тогда
вам вообще не надо отслеживать никакие кошельки.
Фиксацию транзакции делает вся сеть. И ее консенсус - (обычно это подписание одного
блока) это и есть самая лучшная гарантия. Для битка это обычно лаг в 10 минут.
Для более новых сетей должно быть очень быстро.
А следить за самим кошельком нет смысла. Главное что бухгалтерская книга (блокчейн) зафисировала
перевод денег а уж когда он там прочитает свой статус - не имеет значения. Деньги
уже переведены и никуда не потерялись.
Tronscan имеет свой API и через него можно решить вопрос контроля транзакции на определенные кошельки.
Только непонятно
Основной вопрос: каким образом отслеживать факт его пополнения?
А вам это зачем? Т.е. зачем - понятно, зачем сам факт пополнения отслеживать по всем клиентам? Сама по себе трансакция это дело клиента, если за этим не должно последовать немедленно порождение какого либо события, ну т.е. клиент не открыл свою страницу в приложении с балансом, то и факт отслеживания трансакции можно поставить в какую то дальнюю очередь. Тут все очень конечно индивидуально, но не понимая всего проекта трудно что-то советовать умное на этот счёт.
использовать собственную ноду и слушать транзакции напрямую из блокчейна, но там сотни операций в секунду, и их нужно фильтровать по своим адресам
в мире криптовалют это самый правильный способ, но и самый сложный, почти наверняка красивых и удобных библиотек не найти (например когда я ковырялся с tron, давно правда, мне было сложно анализировать сырую транзакцию контрактов обмена на dex-ах)
А вот использовать централизованный api есть главная опасность, централизованный сервис подаст вам неверную информацию и вы потеряете деньги, и найти и доказать что-либо будет не просто... и главное добиться от централизованного сервиса ответственности.
Последовательно вызывать метод RPC eth_getLogs: https://www.quicknode.com/docs/tron/eth_getLogs
Задаете нужный адрес контракта (он известен), топики (сигнатуры нужных методов контракта) и анализируете результат. Вся необходимая инфа будет в логах, только нужно уметь их обрабатывать. На Go есть библиотеки и это пишется максимум за полчаса, про Python не знаю.