Type/to search
8
Follow
1364
Followers
Расширение FMZ Quantitative Web3: добавлена ​​поддержка Tron, расширены возможности транзакций в цепочке
Discussions
Created 2025-02-28 17:20:12  Updated 2025-03-11 18:04:16
 0
 1081

img

Предисловие

Развитие технологии блокчейна выводит количественную торговлю в эпоху Web3. Будучи ведущим инструментом количественной торговли, количественная торговая платформа FMZ уже давно изучает направление Web3 и предоставляет функции, связанные с Ethereum, позволяя пользователям взаимодействовать со смарт-контрактами, управлять средствами и реализовывать автоматизированные торговые стратегии непосредственно в цепочке.

Сегодня платформа FMZ еще больше расширила свои возможности торговли Web3 и поддерживает сеть Tron (TRX), позволяя пользователям развертывать количественные торговые стратегии в двух основных публичных цепях Ethereum и Tron. Это обновление не только повышает гибкость кросс-чейн транзакций, но и предоставляет трейдерам больше возможностей для управления активами в сети.

В этой статье мы подробно рассмотрим:

  • Обсудите экологию Tron, приложения, разработку и другие технические аспекты в направлении Web3 платформы FMZ.
  • Практикуйте конфигурацию на основе сети Tron на платформе FMZ.
  • Ресурсы и материалы, используемые на практике
  • Практикуйтесь в вызове методов на узлах Tron.
  • SunSwap — DeFi-практика, основанная на экосистеме 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 основной сети TRON

    grpc.trongrid.io:50051

  • Другие узлы:

    Вы можете использовать узлы JSON-RPC, узлы REST и т. д. от других поставщиков узлов (для запроса можно использовать HttpQuery). Единственным вызовом инкапсуляции объекта обмена в FMZ является метод grpc.

  • Кошелек TRON

    Вам нужно подготовить кошелек TRON. Вы можете использовать OKX, imToken и т. д., или можете сгенерировать его самостоятельно.

  • tronscan

    https://tronscan.org/

  • Протокол Трон

    https://github.com/tronprotocol

  • SunSwap

    https://sun.io/?lang=zh-CN#/v3/swap

    https://github.com/sunswapteam

Настройка объектов обмена WEB3 на FMZ

До того, как платформа FMZ начала поддерживать Tron, она играла ведущую роль в поддержке разработки Ethereum Web3. Вы можете просмотреть предыдущие статьи, чтобы узнать, как подключиться к децентрализованной бирже UniSwap. Поскольку Tron совместим с Ethereum и интегрирует некоторые функции ETH и EOS, он обладает уникальными преимуществами в исполнении смарт-контрактов и взаимодействии внутри сети. Настройка объектов обмена Tron (кошельков, информации об узлах) на платформе FMZ практически аналогична настройке объектов обмена Ethereum (кошельков, информации об узлах).

Добавить объект обмена

На странице «Добавить биржу»:

https://www.fmz.com/m/platforms/add

img

Настройте кошелек, выберите TRON в качестве ChainType и используйте адрес узла RPC по умолчанию.

Распространенные практики метода узла JSON-RPC

Для тестирования мы можем использовать отладочные инструменты платформы.

Инструменты отладки: https://www.fmz.com/m/debug

eth_getBalance

Как следует из названия, этот метод точно такой же, как метод Ethereum, и его функции точно такие же. Этот метод используется для считывания баланса TRX в указанном кошельке Tron.

curl
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.

javascript
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, перед использованием его необходимо преобразовать в параметр в шестнадцатеричной кодировке.

javascript
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Метод.

Полный тест:

javascript
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:

img

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

img

практика метода узла gRPC

Основной практический контент на платформе FMZ — это вызов метода узла grpc. Из-за ограниченного пространства здесь перечислены только наиболее часто используемые вызовы методов.

Вызов прототипа:exchange.IO("api", "tron", "method name", ...). «имя метода» — имя вызываемого метода.

GetAccount

Запрос информации о счете кошелька.

javascript
function main() { var account = exchange.IO("api", "tron", "GetAccount", "tron 钱包地址") // tron 钱包地址 :填写实际的钱包地址。 return account }

Информация об обратном звонке (выдержка):

json
{ "address": {}, "balance": 72767348, // 即钱包的TRX余额:72.767348 "asset_optimized": true, "create_time": 1693463943000, ...

GetTransactionInfoByID

Проверьте переводы.

javascript
function main() { return exchange.IO("api", "tron", "GetTransactionInfoByID", "305f0c2487095effcf9e2db61f021f976707611424cba57e1d6464736f7f49e7") }

Возвращенные данные:

json
{"id":{},"fee":1100000,"blockNumber":70192360,"blockTimeStamp":1741229766000,"contractResult":[{}],"receipt":{"net_fee":100000}}

ListNodes

Возвращает всю информацию об узле.

javascript
function main() { return exchange.IO("api", "tron", "ListNodes") }

TRC20GetDecimals

Запросить информацию о точности токенов TRC20

javascript
function main() { return exchange.IO("api", "tron", "TRC20GetDecimals", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t") // USDT }

TRC20ContractBalance

Запросить баланс определенного токена TRC20 по определенному адресу кошелька.

javascript
function main() { return exchange.IO("api", "tron", "TRC20ContractBalance", "TRX 钱包地址", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t") }

GetNowBlock

Возвращает последнюю информацию о блоке в текущем блокчейне.

javascript
function main() { return exchange.IO("api", "tron", "GetNowBlock") }

Возвращенные данные:

json
{ "transactions": [ { "transaction": { "raw_data": { "ref_block_bytes": {}, "ref_block_hash": {}, "expiration": 1741489083000, "contract": [ { "type": 1, "parameter": { "type_url": "type.googleapis.com/protocol.TransferContract", "value": {} ...

GetAccountNet

Запросить информацию о пропускной способности аккаунта TRON.

javascript
function main() { return exchange.IO("api", "tron", "GetAccountNet", "TWTbnQuiWvEg...") }

Возвращенные данные:

json
{ "freeNetLimit": 600, "TotalNetLimit": 43200000000, "TotalNetWeight": 26982826755 }

CreateAccount

Создайте учетную запись Tron.

javascript
function main() { return exchange.IO("api", "tron", "CreateAccount", "TWTbnQ...", "TKCG9...") }

Попытка создать существующую учетную запись приведет к ошибке:

log
Futures_OP 4: Contract validate error : Account has existed

GetBlockByNum

Получите информацию о блоке на основе его высоты.

javascript
function main() { return exchange.IO("api", "tron", "GetBlockByNum", 70227286) }

Возвращенные данные:

json
{ "transactions": [ { "transaction": { "raw_data": { "ref_block_bytes": {}, "ref_block_hash": {}, "expiration": 1741334628000, "contract": [ ...

TRC20GetName / TRC20GetSymbol

TRC20GetName, запросить имя токена TRC20 на основе адреса контракта.
TRC20GetSymbol, запросить символ токена TRC20 в соответствии с адресом контракта

javascript
function main() { Log("TRC20GetName:", exchange.IO("api", "tron", "TRC20GetName", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t")) Log("TRC20GetSymbol:", exchange.IO("api", "tron", "TRC20GetSymbol", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t")) }

Возвращенные данные:

text
2025-03-09 11:18:43.083 信息 TRC20GetSymbol: USDT 2025-03-09 11:18:43.006 信息 TRC20GetName: Tether USD

ParseTRC20...

javascript
function main() { // 例如某个转账数据中的Data,转换为可读数值 Log("ParseTRC20NumericProperty:", exchange.IO("api", "tron", "ParseTRC20NumericProperty", "0x00000000000000000000000000000000000000000000000000000001a13b8600")) // 7000000000 // 例如某个转账数据中的Data,转换为可读字符串 Log("ParseTRC20StringProperty:", exchange.IO("api", "tron", "ParseTRC20StringProperty", "0x0000000000000000000000000000000000000000000000000000000055534454")) // USDT }

TRC20Call

Для вызова контракта TRC20 мы используем метод balanceOf контракта TRC20, сначала кодируем его, а затем вызываем с помощью TRC20Call.

javascript
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 }
  • "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t": адрес контракта TRC20 USDT.
  • «TWTbnQuiWvEg...»: параметр, адрес кошелька TRX баланса, запрошенного методом balanceOf.
  • "balanceOf": имя метода, которое необходимо закодировать.

Постоянные методы не требуют трансляции. Результат вызова записывается в tx.constant_result.

Transfer

Построить транс-данные.

javascript
function main() { var trans = exchange.IO("api", "tron", "Transfer", "TWTb...", "TKCG9FN...", 1000000) return trans }
  • TWTb...: Адрес кошелька TRX A.
  • TKCG9FN...: Адрес кошелька TRX B.
  • 1000000: Перевод 1TRX.

Возвращенные данные:

json
{ "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 } }

GetContractABI

Получите ABI контракта на основе адреса контракта.

javascript
function main() { var usdtABI = exchange.IO("api", "tron", "GetContractABI", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t") return usdtABI }

Возвращенные данные:

json
{ "entrys": [ { "constant": true, "name": "name", "outputs": [ { "type": "string" } ], "type": 2, "stateMutability": 2 }, { "constant": true, "name": "deprecated", "outputs": [ { "type": "bool" } ], "type": 2, "stateMutability": 2 }, ...

Transfer

КTKCG9FN1j...Переведите 1TRX на адрес кошелька Tron.

javascript
function main() { var ownerAddress = exchange.IO("address") var ret = exchange.IO("api", "tron", "Transfer", ownerAddress, "TKCG9FN1j...", 1000000) return ret }

TriggerConstantContract

Вызовите метод смарт-контракта.

javascript
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.

Вызов метода смарт-контракта

  • Проверить баланс USDT

    Вызов метода смарт-контракта в цепочке TronbalanceOfTR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6tдляUSDTАдрес смарт-контракта токена.

    javascript
    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

    img

Другие возможности exchange.IO

Платформа ФМЗWeb3 tronОбмен объектамиexchange.IOФункция реализует следующие функции.

  • TRX-передача

    javascript
    function main() { var ret = exchange.IO("api", "tron", "send", "目标TRX钱包地址", 1) // 需要注意,参数1 表示 0.000001 TRX ,需要转换数值为链上数值。 return ret // 转账hash: 305f0c2487095effcf9e2db61f021f9767076114... }
  • Адрес узла коммутатора

    javascript
    exchange.IO("base", "rpc address") // rpc address 替换为具体的节点地址 // 或者 exchange.IO("rpc", "rpc address")
  • Регистрация смарт-контракта ABI

    javascript
    exchange.IO("abi", "contract ABI") // contract ABI 替换为具体的合约ABI内容
  • Получить адрес кошелька, привязанного к текущему объекту обмена

    javascript
    exchange.IO("address") // 返回tron钱包地址
  • pack / encode / encodePacked

    упаковка/кодирование: кодирование/упаковка данных, вызов метода.

    javascript
    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: Закодировано и упаковано

    javascript
    function main() { var data1 = exchange.IO("encodePacked", "address", "TWTbnQu...") Log(data1) // e0c12e16a9f713e5f104c... var data2 = exchange.IO("encode", "address", "TWTbnQu...") Log(data2) // 000000000000000000000000 e0c12e16a9f713e5f104c... }
  • unpack / decode

    распаковка/декодирование: распаковка/декодирование данных, вызов метода.

    javascript
    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) }
  • Обновление/импорт закрытого ключа

    javascript
    exchange.IO("key", "xxx") // xxx 为私钥
  • Вычисление хеша
    Вызов прототипа:exchange.IO("hash", algo, inputFormat, outputFormat, data)

    Подпишите с помощью текущего настроенного закрытого ключа и верните подписанные данные.

    javascript
    var signature = exchange.IO("hash", "sign", "string", "hex", "txHash") // txHash: 具体hash值

Первый взгляд на SunSwap

Начальная практика на бирже DEX в цепочке Tron: sunSwap. Мы вызываем контракт фабрики sunSwap, запрашиваем индексы всех торговых пар, а затем запрашиваем адрес торговой пары с индексом 1.

javascript
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 с читателями в следующей статье. Спасибо за вашу поддержку.

THE END

Количественная торговая платформа FMZ продолжает внедрять инновации в эпоху Web3, предоставляя количественным трейдерам более широкое торговое пространство в сети. Поддерживая сеть Tron, FMZ не только расширяет возможности кросс-чейн транзакций, но и позволяет пользователям эффективно выполнять смарт-контрактные взаимодействия, управлять фондами и автоматизированные торговые стратегии в экосистеме Tron.

В этой статье мы представили поддержку платформы FMZ для сети Tron и реализовали вызовы методов контрактов SunSwap DEX в цепочке Tron. С развитием технологии блокчейн возможности количественных транзакций Web3 будут продолжать расширяться. FMZ продолжит оптимизировать и совершенствовать свои возможности Web3, чтобы предоставить количественным трейдерам более гибкую, безопасную и эффективную торговую среду, помогая пользователям получать большие преимущества на рынке блокчейна.

Спасибо за прочтение и спасибо за вашу поддержку.

Comment
All comments (0)
No data
No data
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)