Перейти к основному содержанию
Три типичные задачи на четырёх клиентах. Замените <YOUR_KEY> ключом одного из ваших эндпоинтов, а TXYZ… — реальным адресом. WU в комментариях — ровно столько Node API списывает за эти вызовы.

Подключение

Первый запрос читает данные аккаунта — 1 WU.
grpcurl нужны .proto-файлы TRON, а адреса он принимает как байты в base64 — см. gRPC.

Перевод USDT

Постройте транзакцию через ноду, подпишите у себя и отправьте через ноду. Приватный ключ не покидает ваш сервер. Один перевод стоит 2 WU; в tronpy — 3 WU и ещё 2 WU один раз на загрузку контракта. В этих примерах from (sender) и to — адреса отправителя и получателя, amount указан в минимальных единицах токена (у USDT 6 знаков после запятой: 1 USDT = 1000000), а PRIVATE_KEY — приватный ключ отправителя. fee_limit — максимум TRX в sun, который может сжечь перевод: 30000000 — это 30 TRX.
В curl parameter — это аргументы transfer(address,uint256) в ABI-кодировке, в hex: 20-байтовый адрес получателя (его hex-форма без ведущего 41), дополненный слева нулями до 64 hex-символов, затем сумма, тоже дополненная до 64. Нода отвечает неподписанной transaction и её txID. Подпишите txID приватным ключом отправителя, добавьте подпись в транзакцию как "signature": ["<hex>"] и отправьте этот объект транзакции как signed.json. В grpcurl call.json — это сообщение TriggerSmartContract: owner_address, contract_address и data (4-байтовый селектор функции, за которым идут аргументы в ABI-кодировке), всё — байтами в base64. Поля лимита комиссии в этом сообщении нет: задайте raw_data.fee_limit в полученной транзакции, затем подпишите SHA-256 нового raw_data — вернувшийся txid после такого изменения уже не совпадает. См. gRPC.
Повторно отправлять ту же подписанную транзакцию безопасно: сеть исполняет ID транзакции только один раз, а повторная отправка возвращает DUP_TRANSACTION_ERROR. Транзакцию с истёкшим сроком нужно построить и подписать заново.

Слежение за переводами USDT

Прочитайте заголовок последнего блока, затем квитанции этого блока и оставьте те, что относятся к USDT. Заголовок стоит 1 WU, квитанции свежего блока — 2 WU, итого 3 WU на блок. Если так следить за каждым блоком сети, выходит около 2.6 млн WU в месяц.
Каждая квитанция вызова USDT содержит события токена Transfer в log. В событии topics[0] равен ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef, topics[1] и topics[2] — это отправитель и получатель (последние 40 hex-символов — адрес без префикса 41), а data — сумма. receipt.result равен SUCCESS для прошедшего перевода. Фильтр выше оставляет прямые вызовы контракта USDT; чтобы ловить и USDT, переведённые другими контрактами, проверяйте вместо этого address каждой записи лога — для USDT это a614f803b6fd780986a42c78ec9c7f77e6ded13c.
Новый блок появляется примерно каждые 3 секунды. Запоминайте последний обработанный блок и запрашивайте квитанции для каждого номера после него, чтобы медленный опрос никогда не пропускал блок. Квитанции блока глубже 20 от головы уже не свежие и тарифицируются по размеру — см. Единицы квоты.