Добавить в корзинуПозвонить
Найти в Дзене
TRON DAO Russian

TRON Multicall3 — как батчить мету токенов без боли

В этой статье мы разберём, как работает смарт-контракт TRON Multicall3, и покажем, как с помощью простого Node.js-скрипта batchMeta.js можно пакетно получать метаданные TRC-20 токенов. Такой подход позволяет значительно сократить количество RPC-запросов, что делает ваше приложение быстрее и эффективнее. Контракт Multicall3 позволяет объединять несколько read-only вызовов блокчейна в один общий запрос. Вместо того чтобы опрашивать каждый токен отдельно (что медленно и затратно), можно отправить все запросы одной транзакцией. Ключевая функция контракта выглядит так: function tryAggregate(bool requireSuccess, Call[] memory calls) public returns (Result[] memory returnData) Эта функция принимает массив вызовов, выполняет их и возвращает массив результатов. Каждый элемент содержит флаг успешности вызова и возвращённые данные. Скрипт batchMeta.js — это место, где мы подключаемся к сети TRON и пакетно получаем метаданные TRC-20 токенов с помощью контракта Multicall3. Ключевые части скрипта вк
Оглавление

TRON Multicall3 — как батчить мету токенов без боли

В этой статье мы разберём, как работает смарт-контракт TRON Multicall3, и покажем, как с помощью простого Node.js-скрипта batchMeta.js можно пакетно получать метаданные TRC-20 токенов. Такой подход позволяет значительно сократить количество RPC-запросов, что делает ваше приложение быстрее и эффективнее.

1. Смарт-контракт Multicall3

Контракт Multicall3 позволяет объединять несколько read-only вызовов блокчейна в один общий запрос. Вместо того чтобы опрашивать каждый токен отдельно (что медленно и затратно), можно отправить все запросы одной транзакцией.

Ключевая функция контракта выглядит так:

function tryAggregate(bool requireSuccess, Call[] memory calls) public returns (Result[] memory returnData)

Эта функция принимает массив вызовов, выполняет их и возвращает массив результатов. Каждый элемент содержит флаг успешности вызова и возвращённые данные.

2. Скрипт batchMeta.js

Скрипт batchMeta.js — это место, где мы подключаемся к сети TRON и пакетно получаем метаданные TRC-20 токенов с помощью контракта Multicall3.

Ключевые части скрипта включают в себя:

a) Настройка окружения

Мы загружаем переменные окружения, включая RPC-endpoint TRON, API-ключ и адрес развернутого контракта Multicall3:

const FULL_HOST = process.env.FULL_HOST || ‘ https://api.trongrid.io ‘; const TRON_GRID_KEY = process.env.TRON_GRID_KEY || ‘’; const MULTICALL3_T_ADDR = process.env.MULTICALL3_T_ADDR; // deployed Multicall3 contract address

b) Селекторы функций

Определяем селекторы функций для вызова TRC-20 методов с помощью ABI-кодировщика Web3:

const SELECTORS = { name: web3.eth.abi.encodeFunctionSignature({ name:’name’, type:’function’, inputs:[] }), symbol: web3.eth.abi.encodeFunctionSignature({ name:’symbol’, type:’function’, inputs:[] }), decimals: web3.eth.abi.encodeFunctionSignature({ name:’decimals’, type:’function’, inputs:[] }), totalSupply: web3.eth.abi.encodeFunctionSignature({ name:’totalSupply’, type:’function’,

inputs:[] }) };

c) Вызов Multicall3

Скрипт вызывает tryAggregate (или aggregate3), чтобы объединить все запросы по метаданным токенов в один батч. Например:

const mc = await tronWeb.contract(ABI_TRY_AGG, MULTICALL3_T_ADDR); const raw = await mc.tryAggregate(false, calls).call({ from: CALLER_T_ADDR });

d) Декодирование ответов

После получения результатов скрипт декодирует возвращённые hex-значения обратно в человеко-читаемый формат: имя токена, символ, количество знаков после запятой и totalSupply.

3. Пример вывода

После запуска скрипта вы получите аккуратно отформатированную таблицу с результатами для всех токенов в списке.

-2

Заключение

Используя смарт-контракт TRON Multicall3 и простой Node.js-скрипт, разработчики могут пакетно получать метаданные TRC-20 токенов максимально эффективно. Такой метод сокращает количество RPC-вызовов и улучшает производительность dApp-ов, работающих с большим числом токенов.

Полезные ресурсы:

GitHub Repo

Multicall3 contract