[TOC]

Развитие технологии блокчейна выводит количественную торговлю в эпоху Web3. Будучи ведущим инструментом количественной торговли, количественная торговая платформа FMZ уже давно изучает направление Web3 и предоставляет функции, связанные с Ethereum, позволяя пользователям взаимодействовать со смарт-контрактами, управлять средствами и реализовывать автоматизированные торговые стратегии непосредственно в цепочке.
Сегодня платформа FMZ еще больше расширила свои возможности торговли Web3 и поддерживает сеть Tron (TRX), позволяя пользователям развертывать количественные торговые стратегии в двух основных публичных цепях Ethereum и Tron. Это обновление не только повышает гибкость кросс-чейн транзакций, но и предоставляет трейдерам больше возможностей для управления активами в сети.
В этой статье мы подробно рассмотрим:
Подробности введения TRX-TRON (цитата из Feixiaohao)
TRON был основан Джастином Саном в сентябре 2017 года и добился многих выдающихся достижений с момента запуска своей основной сети в мае 2018 года. В июле 2018 года экосистема TRON завершила интеграцию с BitTorrent — пионером в предоставлении децентрализованных сервисов Web 3.0 с более чем 100 миллионами активных пользователей в месяц. В последние годы сеть TRON показала блестящие результаты. Данные TRONSCAN показывают, что по состоянию на октябрь 2022 года общее число пользователей публичной сети TRON превысило 115 миллионов, количество транзакций превысило 4 миллиарда, а общая заблокированная стоимость (TVL) превысила 13,2 миллиарда долларов США. Сеть TRON стала полностью децентрализованной в декабре 2021 года и теперь представляет собой децентрализованную автономную организацию (DAO), управляемую сообществом. В мае 2022 года TRON объявил о запуске децентрализованного суперобеспеченного стейблкоина USDD, который поддерживается центральным банком криптовалютной отрасли, TRON Joint Reserve, что ознаменовало официальное вступление TRON в эру децентрализованных стейблкоинов. В октябре 2022 года Доминика объявила TRON своей официальной национальной блокчейн-инфраструктурой, что сделало TRON крупной публичной сетью, которая заключила соглашение о сотрудничестве с суверенным государством с целью развития блокчейн-инфраструктуры. TRON получил разрешение на выпуск фан-токена Доминики — Dominica Coin (DMC) — для повышения глобальной известности природного наследия и туристических достопримечательностей Доминики. В то же время семь основных токенов TRON получили статус законной цифровой валюты и законного платежного средства в Доминике.
Высокая пропускная способность: Высокая пропускная способность достигается за счет улучшения TPS в TRON, а его практичность для ежедневного использования превзошла Bitcoin и Ethereum.
Масштабируемость: благодаря хорошей масштабируемости и эффективным смарт-контрактам приложения в TRON могут иметь больше методов развертывания, а TRON может поддерживать большое количество пользователей.
Высокая надежность: TRON имеет более надежную сетевую структуру, пользовательские активы, внутреннюю ценность и более высокую степень децентрализованного консенсуса, что обеспечивает улучшенный механизм распределения вознаграждений.
grpc.trongrid.io:50051
Вы можете использовать узлы JSON-RPC, узлы REST и т. д. от других поставщиков узлов (для запроса можно использовать HttpQuery). Единственным вызовом инкапсуляции объекта обмена в FMZ является метод grpc.
Вам нужно подготовить кошелек TRON. Вы можете использовать OKX, imToken и т. д., или можете сгенерировать его самостоятельно.
До того, как платформа FMZ начала поддерживать Tron, она играла ведущую роль в поддержке разработки Ethereum Web3. Вы можете просмотреть предыдущие статьи, чтобы узнать, как подключиться к децентрализованной бирже UniSwap. Поскольку Tron совместим с Ethereum и интегрирует некоторые функции ETH и EOS, он обладает уникальными преимуществами в исполнении смарт-контрактов и взаимодействии внутри сети. Настройка объектов обмена Tron (кошельков, информации об узлах) на платформе FMZ практически аналогична настройке объектов обмена Ethereum (кошельков, информации об узлах).
На странице «Добавить биржу»:

Настройте кошелек, выберите TRON в качестве ChainType и используйте адрес узла RPC по умолчанию.
Для тестирования мы можем использовать отладочные инструменты платформы.
Инструменты отладки: https://www.fmz.com/m/debug
Как следует из названия, этот метод точно такой же, как метод Ethereum, и его функции точно такие же. Этот метод используется для считывания баланса TRX в указанном кошельке Tron.
curl https://docs-demo.tron-mainnet.quiknode.pro/jsonrpc \
-X POST \
-H "Content-Type: application/json" \
--data '{"method":"eth_getBalance","params":["0x41f0cc5a2a84cd0f68ed1667070934542d673acbd8", "latest"],"id":1,"jsonrpc":"2.0"}'
Запрошенные данные о балансе представляют собой очень большое шестнадцатеричное значение, для которого требуется функция преобразования, которую мы использовали в предыдущей стратегии, связанной с Ethereum.
function toAmount(s, decimals) {
return Number((BigDecimal(BigInt(s)) / BigDecimal(Math.pow(10, decimals))).toString())
}
function toInnerAmount(n, decimals) {
return (BigDecimal(n) * BigDecimal(Math.pow(10, decimals))).toFixed(0)
}
Поскольку адрес кошелька, скопированный из кошелька Tron, представляет собой адрес в кодировке base58, перед использованием его необходимо преобразовать в параметр в шестнадцатеричной кодировке.
function base58ToHex(base58Str) {
const ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
var num = BigInt(0)
for (var char of base58Str) {
var digit = BigInt(ALPHABET.indexOf(char));
if (digit === BigInt(-1)) throw new Error("Invalid Base58 character: " + char)
num = num * BigInt(58) + digit
}
var hex = num.toString(16)
if (hex.length % 2 !== 0) {
hex = "0" + hex
}
return "0x" + hex
}
После того, как мы преобразуем адрес, мы можем вызвать этоeth_getBalanceМетод.
Полный тест:
function toAmount(s, decimals) {
return Number((BigDecimal(BigInt(s)) / BigDecimal(Math.pow(10, decimals))).toString())
}
function toInnerAmount(n, decimals) {
return (BigDecimal(n) * BigDecimal(Math.pow(10, decimals))).toFixed(0)
}
function base58ToHex(base58Str) {
const ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
var num = BigInt(0)
for (var char of base58Str) {
var digit = BigInt(ALPHABET.indexOf(char));
if (digit === BigInt(-1)) throw new Error("Invalid Base58 character: " + char)
num = num * BigInt(58) + digit
}
var hex = num.toString(16)
if (hex.length % 2 !== 0) {
hex = "0" + hex
}
return "0x" + hex
}
function main() {
var tronAddress = "Tron 钱包地址"
var hexAddress = base58ToHex(tronAddress).substring(2, 44)
var jsonrpcBase = "https://go.getblock.io/xxx/jsonrpc" // 具体的JSON-RPC节点
var body = {
"method": "eth_getBalance",
"params": [hexAddress, "latest"],
"id":1,
"jsonrpc":"2.0"
}
var options = {
method: "POST",
body: JSON.stringify(body),
headers: {"accept": "application/json", "content-type": "application/json"},
timeout: 1000
}
var ret = JSON.parse(HttpQuery(jsonrpcBase, options))
var balance = ret.result
return toAmount(balance, 6)
}
Точность токена TRX составляет 6., поэтому заполните параметр 6 при обработке bigNumber.
Тест в отладочном инструменте платформы FMZ:

Сравнивая баланс TRX в кошельке, запрошенном на Tronscan, можно сказать, что данные совпадают.

Основной практический контент на платформе FMZ — это вызов метода узла grpc. Из-за ограниченного пространства здесь перечислены только наиболее часто используемые вызовы методов.
Вызов прототипа:exchange.IO("api", "tron", "method name", ...). «имя метода» — имя вызываемого метода.
Запрос информации о счете кошелька.
function main() {
var account = exchange.IO("api", "tron", "GetAccount", "tron 钱包地址") // tron 钱包地址 :填写实际的钱包地址。
return account
}
Информация об обратном звонке (выдержка):
{
"address": {},
"balance": 72767348, // 即钱包的TRX余额:72.767348
"asset_optimized": true,
"create_time": 1693463943000,
...
Проверьте переводы.
function main() {
return exchange.IO("api", "tron", "GetTransactionInfoByID", "305f0c2487095effcf9e2db61f021f976707611424cba57e1d6464736f7f49e7")
}
Возвращенные данные:
{"id":{},"fee":1100000,"blockNumber":70192360,"blockTimeStamp":1741229766000,"contractResult":[{}],"receipt":{"net_fee":100000}}
Возвращает всю информацию об узле.
function main() {
return exchange.IO("api", "tron", "ListNodes")
}
Запросить информацию о точности токенов TRC20
function main() {
return exchange.IO("api", "tron", "TRC20GetDecimals", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t") // USDT
}
Запросить баланс определенного токена TRC20 по определенному адресу кошелька.
function main() {
return exchange.IO("api", "tron", "TRC20ContractBalance", "TRX 钱包地址", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t")
}
Возвращает последнюю информацию о блоке в текущем блокчейне.
function main() {
return exchange.IO("api", "tron", "GetNowBlock")
}
Возвращенные данные:
{
"transactions": [
{
"transaction": {
"raw_data": {
"ref_block_bytes": {},
"ref_block_hash": {},
"expiration": 1741489083000,
"contract": [
{
"type": 1,
"parameter": {
"type_url": "type.googleapis.com/protocol.TransferContract",
"value": {}
...
Запросить информацию о пропускной способности аккаунта TRON.
function main() {
return exchange.IO("api", "tron", "GetAccountNet", "TWTbnQuiWvEg...")
}
Возвращенные данные:
{
"freeNetLimit": 600,
"TotalNetLimit": 43200000000,
"TotalNetWeight": 26982826755
}
Создайте учетную запись Tron.
function main() {
return exchange.IO("api", "tron", "CreateAccount", "TWTbnQ...", "TKCG9...")
}
Попытка создать существующую учетную запись приведет к ошибке:
Futures_OP 4: Contract validate error : Account has existed
Получите информацию о блоке на основе его высоты.
function main() {
return exchange.IO("api", "tron", "GetBlockByNum", 70227286)
}
Возвращенные данные:
{
"transactions": [
{
"transaction": {
"raw_data": {
"ref_block_bytes": {},
"ref_block_hash": {},
"expiration": 1741334628000,
"contract": [
...
TRC20GetName, запросить имя токена TRC20 на основе адреса контракта. TRC20GetSymbol, запросить символ токена TRC20 в соответствии с адресом контракта
function main() {
Log("TRC20GetName:", exchange.IO("api", "tron", "TRC20GetName", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"))
Log("TRC20GetSymbol:", exchange.IO("api", "tron", "TRC20GetSymbol", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"))
}
Возвращенные данные:
2025-03-09 11:18:43.083 信息 TRC20GetSymbol: USDT
2025-03-09 11:18:43.006 信息 TRC20GetName: Tether USD
function main() {
// 例如某个转账数据中的Data,转换为可读数值
Log("ParseTRC20NumericProperty:", exchange.IO("api", "tron", "ParseTRC20NumericProperty", "0x00000000000000000000000000000000000000000000000000000001a13b8600")) // 7000000000
// 例如某个转账数据中的Data,转换为可读字符串
Log("ParseTRC20StringProperty:", exchange.IO("api", "tron", "ParseTRC20StringProperty", "0x0000000000000000000000000000000000000000000000000000000055534454")) // USDT
}
Для вызова контракта TRC20 мы используем метод balanceOf контракта TRC20, сначала кодируем его, а затем вызываем с помощью TRC20Call.
function main() {
var data = exchange.IO("pack", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", "balanceOf", "TWTbnQuiWvEg...")
var tx = exchange.IO("api", "tron", "TRC20Call", "TWTbnQuiWvEg...", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", data, true, 0)
return tx.constant_result
}
Постоянные методы не требуют трансляции. Результат вызова записывается в tx.constant_result.
Построить транс-данные.
function main() {
var trans = exchange.IO("api", "tron", "Transfer", "TWTb...", "TKCG9FN...", 1000000)
return trans
}
TWTb...: Адрес кошелька TRX A.TKCG9FN...: Адрес кошелька TRX B.Возвращенные данные:
{
"transaction": {
"raw_data": {
"ref_block_bytes": {},
"ref_block_hash": {},
"expiration": 1741493085000,
"contract": [
{
"type": 1,
"parameter": {
"type_url": "type.googleapis.com/protocol.TransferContract",
"value": {}
}
}
],
"timestamp": 1741493025759
}
},
"txid": {},
"result": {
"result": true
}
}
Получите ABI контракта на основе адреса контракта.
function main() {
var usdtABI = exchange.IO("api", "tron", "GetContractABI", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t")
return usdtABI
}
Возвращенные данные:
{
"entrys": [
{
"constant": true,
"name": "name",
"outputs": [
{
"type": "string"
}
],
"type": 2,
"stateMutability": 2
},
{
"constant": true,
"name": "deprecated",
"outputs": [
{
"type": "bool"
}
],
"type": 2,
"stateMutability": 2
},
...
КTKCG9FN1j...Переведите 1TRX на адрес кошелька Tron.
function main() {
var ownerAddress = exchange.IO("address")
var ret = exchange.IO("api", "tron", "Transfer", ownerAddress, "TKCG9FN1j...", 1000000)
return ret
}
Вызовите метод смарт-контракта.
function main() {
var tx = exchange.IO("api", "tron", "TriggerConstantContract", "TWTbnQu...", "TSUUVjysXV8YqHytSNjfkNXnnB49QDvZpx", "token0()", "")
var ret2 = Encode("raw", "raw", "hex", tx.constant_result[0])
Log(ret2) // 000000000000000000000000891cdb91d149f23b1a45d9c5ca78a88d0cb44c18
}
Возвращенные данные представляют собой адрес токена token0 торгового пула sunSwap.
Вызов метода смарт-контракта в цепочке TronbalanceOf,TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6tдляUSDTАдрес смарт-контракта токена.
function toAmount(s, decimals) {
return Number((BigDecimal(BigInt(s)) / BigDecimal(Math.pow(10, decimals))).toString())
}
function main() {
var balance = exchange.IO("api", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", "balanceOf", "Tron 钱包地址")
return toAmount(balance, 6)
}
Вы можете проверить баланс USDT в вашем кошельке: 0.000019

Платформа ФМЗWeb3 tronОбмен объектамиexchange.IOФункция реализует следующие функции.
function main() {
var ret = exchange.IO("api", "tron", "send", "目标TRX钱包地址", 1) // 需要注意,参数1 表示 0.000001 TRX ,需要转换数值为链上数值。
return ret // 转账hash: 305f0c2487095effcf9e2db61f021f9767076114...
}
exchange.IO("base", "rpc address") // rpc address 替换为具体的节点地址
// 或者
exchange.IO("rpc", "rpc address")
exchange.IO("abi", "contract ABI") // contract ABI 替换为具体的合约ABI内容
exchange.IO("address") // 返回tron钱包地址
упаковка/кодирование: кодирование/упаковка данных, вызов метода.
function main() {
// 打包TRC20合约的balanceOf方法调用
var data1 = exchange.IO("pack", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", "balanceOf", "TWTbnQu...") // TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t 为USDT合约地址
Log(data1)
var data2 = exchange.IO("encode", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", "balanceOf", "TWTbnQu...")
Log(data2)
Log("data1 == data2:", data1 == data2) // true
// 编码数据为uint256
var data3 = exchange.IO("pack", "uint256", 19) // 数据为: 19
Log(data3)
var data4 = exchange.IO("encode", "uint256", 19)
Log(data4)
Log("data3 == data4:", data3 == data4)
}
encodePacked: Закодировано и упаковано
function main() {
var data1 = exchange.IO("encodePacked", "address", "TWTbnQu...")
Log(data1)
// e0c12e16a9f713e5f104c...
var data2 = exchange.IO("encode", "address", "TWTbnQu...")
Log(data2)
// 000000000000000000000000 e0c12e16a9f713e5f104c...
}
распаковка/декодирование: распаковка/декодирование данных, вызов метода.
function main() {
var data = exchange.IO("pack", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", "balanceOf", "TWTbnQu...")
Log(data)
var tx = exchange.IO("api", "tron", "TRC20Call", "TWTbnQu...", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", data, true, 0)
var ret = Encode("raw", "raw", "hex", tx.constant_result[0])
Log(ret)
// 解码
var usdtBalance = exchange.IO("decode", "uint256", ret)
Log("usdtBalance:", usdtBalance)
// 解码
return exchange.IO("unpack", "uint256", ret)
}
exchange.IO("key", "xxx") // xxx 为私钥
exchange.IO("hash", algo, inputFormat, outputFormat, data)Подпишите с помощью текущего настроенного закрытого ключа и верните подписанные данные.
var signature = exchange.IO("hash", "sign", "string", "hex", "txHash") // txHash: 具体hash值
Начальная практика на бирже DEX в цепочке Tron: sunSwap. Мы вызываем контракт фабрики sunSwap, запрашиваем индексы всех торговых пар, а затем запрашиваем адрес торговой пары с индексом 1.
function main() {
var poolIndexs = exchange.IO("api", "TThJt8zaJzJMhCEScH7zWKnp5buVZqys9x", "allPoolsLength")
Log("poolIndexs:", poolIndexs) // 交易对索引总数
var hexAddress = exchange.IO("api", "TThJt8zaJzJMhCEScH7zWKnp5buVZqys9x", "allPools", exchange.IO("encode", "uint256", 1))
Log("hexAddress:", hexAddress) // 索引为1的交易对地址
}
Из-за ограниченного пространства мы поделимся подробным содержанием sunSwap с читателями в следующей статье. Спасибо за вашу поддержку.
Количественная торговая платформа FMZ продолжает внедрять инновации в эпоху Web3, предоставляя количественным трейдерам более широкое торговое пространство в сети. Поддерживая сеть Tron, FMZ не только расширяет возможности кросс-чейн транзакций, но и позволяет пользователям эффективно выполнять смарт-контрактные взаимодействия, управлять фондами и автоматизированные торговые стратегии в экосистеме Tron.
В этой статье мы представили поддержку платформы FMZ для сети Tron и реализовали вызовы методов контрактов SunSwap DEX в цепочке Tron. С развитием технологии блокчейн возможности количественных транзакций Web3 будут продолжать расширяться. FMZ продолжит оптимизировать и совершенствовать свои возможности Web3, чтобы предоставить количественным трейдерам более гибкую, безопасную и эффективную торговую среду, помогая пользователям получать большие преимущества на рынке блокчейна.
Спасибо за прочтение и спасибо за вашу поддержку.