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