Автоматизация транзакций в сети Tron

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 323
Благодарностей
894
Баллы
113
Всем привет. Данный текст является продолжением моей прошлой работы, посвящённой автоматизации работы с блокчейном, а именно "Работаем с блокчейном напрямую”. Если в ней речь шла про EVM сети, то сегодня будем рассматривать и делать транзакции в сети Tron.

Tron — это децентрализованная блокчейн-платформа, созданная для создания и управления смарт-контрактами, децентрализованных приложений (dApps) и цифровых активов, изначально ориентировалась на индустрию развлечений, но со временем значительно расширила свои возможности и стала важной частью экосистемы децентрализованных финансов (DeFi).

Основные особенности Tron:
  • Высокая скорость транзакций (до 2000 транзакций в секунду).
  • Низкие комиссии за транзакции.
  • Поддержка смарт-контрактов.
Архитектура и особенности блокчейна Tron.
Tron использует модель Proof of Stake (PoS), называемую DPoS (Delegated Proof of Stake), которая обеспечивает высокую скорость обработки транзакций и низкие комиссии. Это одно из главных преимуществ сети Tron по сравнению с такими блокчейнами, как Ethereum, где транзакции могут быть дороже и медленнее из-за ограничений пропускной способности.

Смарт-контракты и dApps.
Смарт-контракты в Tron работают на языке программирования Solidity, как и в сети Ethereum, что упрощает миграцию разработчиков между платформами. dApps, созданные на базе Tron, охватывают широкий спектр применения: от игр до финансовых сервисов.

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

В качестве примера по работе с транзакциями будем рассматривать сайт SunPump - платформа для запуска и торговли мемкоинами на блокчейне Tron, которая позволяет пользователям создавать и торговать токенами.

Перед тем, как продолжить, советую перечитать прошлую статью по работе с блокчейном, в которой содержатся технические аспекты касательно кодирования и декодирования данных. Там содержатся основы технической информации, необходимой для понимания всего процесса! Чтобы не дублировать информацию, дальнейшие шаги будут описаны без подробного описания технических нюансов. Поскольку мы будем работать с совместимым с EVM блокчейном 1го уровня, который использует виртуальную машину TRON для создания и развертывания смарт контрактов, то вся изложенная ранее информация будет подходить и к Трону.

Для начала откроем страницу с любым токеном и изучим информацию о нём:
https://sunpump.meme/token/TWNhT6DcXfqgGRguj5DBxgcxvMx7EwGkZj

Посмотрев хэши транзакций определяем смарт контракт, отвечающий за покупку/продажу.
https://tronscan.org/#/contract/TTfvyrAz86hbZk5iDpKD78pqLGgi8C7AAw/code

Нас интересуют функции purchaseToken и saleToken (покупка и продажа токенов соответственно):

sale.png purchase.png

Первая функция purchaseToken принимает 2 обязательных параметра token_address и AmountMin, т.е. адрес токена и минимальное количество токенов, а так же на эту функцию необходимо отправить TRX. Если в качестве второго параметра указать 0, то получим количество токенов по текущему курсу (т.к. этот контракт является клоном Uniswap, то курс расчитывается по специальной формуле внутри контракта в зависимости от ликвидности).
Вторая функция saleToken принимает 3 параметра token_address, tokenAmount и AmountMin – адрес токена, количество продаваемых токенов и сумма TRX для получения. Если в последнем параметре указать 0, то получим TRX из расчёта текущего курса токена при его продаже.
Но есть ещё один нюанс – при продаже токенов необходимо дать разрешение контракту биржи тратить токены с нашего счёта. Для этого используется функция Approve, которую необходимо вызвать перед продажей токенов.

Для реализации и автоматизации всех описанных действий естественно будем использовать ZennoPoster шаблон, выполняющий все необходимые действия.

settings.png


В настройках указываем:
  • адрес контракта токена, который необходимо купить (берём на странице токена в адресной строке);
  • количество TRX, на которое необходимо купить токен;
  • тип операции (покупка/продажа);
  • приватный ключ от кошелька.
Формируем данные для транзакции (покупки). Каждый параметр является данными размером в 32 байта, после этого их необходимо правильно закодировать учитывая тип этих данных. А также конвертировать адрес Tron кошелька в формат Ethereum (все функции по кодированию, декодированию и конвертации находятся в общем коде). Делаем запрос к смарт контракту через API на эндпоинт TriggerSmartContract. Кроме параметров, передаваемых в функцию, также указываем название самой функции и количество передаваемых эфиров, сконвертированных в величину sun (1 TRX = 1_000_000 sun). В ответе получаем идентификатор транзакции(txId), который необходимо подписать своим приватным ключём и добавить к исходному телу транзакции. После чего отправляем транзакцию в сеть, используя эндпоинт BroadcastTransaction. Проверяем txId транзакции.
Для продажи токенов сначала необходимо узнать количество токенов на нашем кошельке. Для этого используем специальную функцию balanceOf, имеющуюся на каждом контракте токенов. Но эта транзакция не использует запись в блокчейн, соответственно является бесплатной, поэтому для данного запроса используем другой эндпоинт TriggerConstantContract и НЕ используем отправку транзакции в сеть через BroadcastTransaction.
После получения количества токенов необходимо дать разрешение контракту списывать токены с нашего кошелька, как было сказано выше, с помощью функции Approve. Данная функция принимает на вход 2 параметра – адрес того, кому мы разрешаем тратить наши токены (адрес биржи) и количество, которое мы разрешаем тратить - для простоты ставим максимальное значение (вообще ставить максимальное разрешение в функции Approve небезопасно, но это отдельная тема для разговора и для простоты ставим максимум).
После выдачи разрешения совершаем продажу, формируя транзакцию похожим образом. В качестве minAmount ставим 0, чтобы получить TRX по текущему курсу. Параметр callValue являющийся количеством переводимых TRX устанавливаем в 0 (как и в функции approve). После чего подписываем транзакцию, отправляем в сеть и проверяем txId. При подтверждении транзакции токены будут успешно проданы.

Подведение итогов.
Используя ZennoPoster и добавив минимальную логику для ожидания и отслеживания сигналов для покупки/продажи, получаем автоматизированный процесс по покупке/продаже токенов и извлечению потенциальной прибыли из этого процесса.

P.S. Перед api запросами принудительно выставлены паузы, т.к. при частых запросах можно словить временный бан от апи и ждать некоторое время для продолжения корректной работы.
P.P.S. Все необходимые библиотеки, находящиеся в папке dll, необходимо скопировать в папку ExternalAssemblies зеннопостера.
 

Вложения

  • 184,9 КБ Просмотры: 9
Последнее редактирование модератором:

heks

Client
Регистрация
01.10.2013
Сообщения
1 163
Благодарностей
286
Баллы
83
Интересная статейка. походу мой голос будет за тебя. Может вкурсе как боты опережают мою транзакцию, покупку или продажу? Автоматизировать хочу подобное в сети бнб а вот как сделать хз. А то токены когда пампим есть боты которые откусывают нормально именно опережая мою покупку а после покупки просто продают.
 
  • Спасибо
Реакции: Zedx

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 323
Благодарностей
894
Баллы
113
Интересная статейка. походу мой голос будет за тебя. Может вкурсе как боты опережают мою транзакцию, покупку или продажу? Автоматизировать хочу подобное в сети бнб а вот как сделать хз. А то токены когда пампим есть боты которые откусывают нормально именно опережая мою покупку а после покупки просто продают.
Это уже тема MEV ботов, которая довольно обширна. Например сканирование мемпула и выставление большей комиссии за транзакцию, чтобы гарантированно быть первым.
 

heks

Client
Регистрация
01.10.2013
Сообщения
1 163
Благодарностей
286
Баллы
83
Это уже тема MEV ботов, которая довольно обширна. Например сканирование мемпула и выставление большей комиссии за транзакцию, чтобы гарантированно быть первым.
да как раз такой бот и пiздил по копейкам когда монету пампили. Сам такого бота не делал?
 

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 323
Благодарностей
894
Баллы
113
да как раз такой бот и пiздил по копейкам когда монету пампили. Сам такого бота не делал?
Ну конкретно сэндвич это довольно сложная и затратная по деньгам операция, а так можно отслеживать например события на покупки и на пампе покупать и продавать
 

Кто просматривает тему: (Всего: 2, Пользователи: 1, Гости: 1)