[TOC]

Die Entwicklung der Blockchain-Technologie treibt den quantitativen Handel in die Web3-Ära. Als führendes quantitatives Handelstool erkundet die quantitative Handelsplattform FMZ seit langem die Richtung von Web3 und bietet Ethereum-bezogene Funktionen, die es Benutzern ermöglichen, mit Smart Contracts zu interagieren, Gelder zu verwalten und automatisierte Handelsstrategien direkt in der Kette auszuführen.
Heute hat die FMZ-Plattform ihre Web3-Handelsfunktionen weiter ausgebaut und unterstützt das Tron-Netzwerk (TRX), sodass Benutzer quantitative Handelsstrategien auf den beiden großen öffentlichen Ketten Ethereum und Tron einsetzen können. Dieses Upgrade verbessert nicht nur die Flexibilität von Cross-Chain-Transaktionen, sondern bietet Händlern auch mehr Möglichkeiten zur On-Chain-Vermögensverwaltung.
In diesem Artikel werden wir im Detail auf Folgendes eingehen:
TRX-TRON Einführungsdetails (Zitat von Feixiaohao)
TRON wurde im September 2017 von Justin Sun gegründet und hat seit dem Start seines Mainnets im Mai 2018 viele herausragende Erfolge erzielt. Im Juli 2018 schloss das TRON-Ökosystem seine Integration mit BitTorrent ab, einem Pionier bei der Bereitstellung dezentraler Web 3.0-Dienste mit mehr als 100 Millionen aktiven Benutzern pro Monat. In den letzten Jahren hat das TRON-Netzwerk hervorragende Leistungen erbracht. TRONSCAN-Daten zeigen, dass im Oktober 2022 die Gesamtzahl der Benutzer der öffentlichen TRON-Kette 115 Millionen überschritten hat, die Zahl der Transaktionen 4 Milliarden überschritten hat und der gesamte gesperrte Wert (TVL) 13,2 Milliarden US-Dollar überschritten hat. Das TRON-Netzwerk wurde im Dezember 2021 vollständig dezentralisiert und ist jetzt eine von der Community verwaltete dezentrale autonome Organisation (DAO). Im Mai 2022 kündigte TRON die Einführung des dezentralen, superbesicherten Stablecoins USDD an, der von der Kryptowährungs-Zentralbank der Branche, der TRON Joint Reserve, unterstützt wird und damit TRONs offiziellen Eintritt in die Ära der dezentralen Stablecoins markiert. Im Oktober 2022 gab Dominica bekannt, dass TRON seine offiziell ausgewiesene nationale Blockchain-Infrastruktur sei. Damit ist TRON eine große öffentliche Kette, die eine Kooperationsvereinbarung mit einem souveränen Staat zur Entwicklung einer Blockchain-Infrastruktur getroffen hat. TRON wurde autorisiert, Dominicas Fan-Token, Dominica Coin (DMC), auszugeben, um die globale Sichtbarkeit des Naturerbes und der Touristenattraktionen Dominicas zu erhöhen. Gleichzeitig wurde den sieben wichtigsten Token unter TRON der Status einer gesetzlichen digitalen Währung und eines gesetzlichen Zahlungsmittels in Dominica verliehen.
Hoher Durchsatz: Ein hoher Durchsatz wird durch die Verbesserung von TPS in TRON erreicht und seine Praktikabilität für den täglichen Gebrauch hat Bitcoin und Ethereum übertroffen.
Skalierbarkeit: Aufgrund der guten Skalierbarkeit und effizienter Smart Contracts können Anwendungen in TRON über mehr Bereitstellungsmethoden verfügen und TRON kann eine große Anzahl von Benutzern unterstützen.
Hohe Zuverlässigkeit: TRON verfügt über eine zuverlässigere Netzwerkstruktur, Benutzerressourcen und einen inneren Wert. Ein höherer Grad an dezentralem Konsens führt zu einem verbesserten Mechanismus zur Belohnungsverteilung.
grpc.trongrid.io:50051
Sie können JSON-RPC-Knoten, REST-Knoten usw. von anderen Knotenanbietern verwenden (Sie können zum Anfordern HttpQuery verwenden). Die einzigen Aufrufe der Exchange-Objektkapselung auf FMZ sind Grpc-Methoden.
Sie müssen ein TRON-Wallet vorbereiten. Sie können OKX, imToken usw. verwenden oder selbst eines generieren.
Bevor die FMZ-Plattform Tron unterstützte, übernahm sie die Führung bei der Unterstützung der Web3-Entwicklung von Ethereum. Sie können frühere Artikel lesen, um zu erfahren, wie Sie eine Verbindung mit der dezentralen Börse UniSwap herstellen. Da Tron mit Ethereum kompatibel ist und einige Funktionen von ETH und EOS integriert, bietet es einzigartige Vorteile bei der Ausführung intelligenter Verträge und der On-Chain-Interaktion. Das Konfigurieren von Tron-Austauschobjekten (Wallets, Knoteninformationen) auf der FMZ-Plattform ist fast identisch mit dem Konfigurieren von Ethereum-Austauschobjekten (Wallets, Knoteninformationen).
Auf der Seite „Exchange hinzufügen“:

Konfigurieren Sie die Brieftasche, wählen Sie TRON als ChainType und verwenden Sie die Standard-RPC-Knotenadresse.
Zum Testen können wir die Debugging-Tools der Plattform verwenden.
Debugging-Tools: https://www.fmz.com/m/debug
Wie der Name schon sagt, ist diese Methode genau dieselbe wie die Methode von Ethereum und ihre Funktionen sind genau dieselben. Diese Methode wird verwendet, um den TRX-Saldo im angegebenen Tron-Wallet zu lesen.
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"}'
Bei den angeforderten Kontostanddaten handelt es sich um einen sehr großen Hexadezimalwert, der die Konvertierungsfunktion erfordert, die wir zuvor in der Ethereum-bezogenen Strategie verwendet haben.
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)
}
Da es sich bei der aus der Tron-Wallet kopierten Wallet-Adresse um eine Base58-codierte Adresse handelt, muss sie vor der Verwendung in einen Hex-codierten Parameter umgewandelt werden.
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
}
Nachdem wir die Adresse konvertiert haben, können wir dies aufrufeneth_getBalanceVerfahren.
Der vollständige Testcode:
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)
}
Die Token-Präzision von TRX beträgt 6, füllen Sie also Parameter 6 aus, wenn Sie bigNumber verarbeiten.
Test im Debugging-Tool der FMZ-Plattform:

Beim Vergleich des TRX-Guthabens im über Tronscan abgefragten Wallet sind die Daten konsistent.

Der wichtigste Übungsinhalt auf der FMZ-Plattform ist der Methodenaufruf des grpc-Knotens. Aus Platzgründen werden hier nur die häufig verwendeten Methodenaufrufe aufgeführt.
Aufruf des Prototyps:exchange.IO("api", "tron", "method name", ...). „Methodenname“ ist der Name der aufzurufenden Methode.
Fragen Sie die Wallet-Kontoinformationen ab.
function main() {
var account = exchange.IO("api", "tron", "GetAccount", "tron 钱包地址") // tron 钱包地址 :填写实际的钱包地址。
return account
}
Rückrufinformationen (Auszug):
{
"address": {},
"balance": 72767348, // 即钱包的TRX余额:72.767348
"asset_optimized": true,
"create_time": 1693463943000,
...
Überweisungen prüfen.
function main() {
return exchange.IO("api", "tron", "GetTransactionInfoByID", "305f0c2487095effcf9e2db61f021f976707611424cba57e1d6464736f7f49e7")
}
Zurückgegebene Daten:
{"id":{},"fee":1100000,"blockNumber":70192360,"blockTimeStamp":1741229766000,"contractResult":[{}],"receipt":{"net_fee":100000}}
Gibt alle Knoteninformationen zurück.
function main() {
return exchange.IO("api", "tron", "ListNodes")
}
Abfrage der Genauigkeitsinformationen von TRC20-Tokens
function main() {
return exchange.IO("api", "tron", "TRC20GetDecimals", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t") // USDT
}
Fragen Sie den Kontostand eines bestimmten TRC20-Tokens in einer bestimmten Wallet-Adresse ab.
function main() {
return exchange.IO("api", "tron", "TRC20ContractBalance", "TRX 钱包地址", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t")
}
Gibt die neuesten Blockinformationen zur aktuellen Blockchain zurück.
function main() {
return exchange.IO("api", "tron", "GetNowBlock")
}
Zurückgegebene Daten:
{
"transactions": [
{
"transaction": {
"raw_data": {
"ref_block_bytes": {},
"ref_block_hash": {},
"expiration": 1741489083000,
"contract": [
{
"type": 1,
"parameter": {
"type_url": "type.googleapis.com/protocol.TransferContract",
"value": {}
...
Fragen Sie die Bandbreiteninformationen des TRON-Kontos ab.
function main() {
return exchange.IO("api", "tron", "GetAccountNet", "TWTbnQuiWvEg...")
}
Zurückgegebene Daten:
{
"freeNetLimit": 600,
"TotalNetLimit": 43200000000,
"TotalNetWeight": 26982826755
}
Erstellen Sie ein Tron-Konto.
function main() {
return exchange.IO("api", "tron", "CreateAccount", "TWTbnQ...", "TKCG9...")
}
Beim Versuch, ein bestehendes Konto zu erstellen, wird ein Fehler zurückgegeben:
Futures_OP 4: Contract validate error : Account has existed
Erhalten Sie Blockinformationen basierend auf der Blockhöhe.
function main() {
return exchange.IO("api", "tron", "GetBlockByNum", 70227286)
}
Zurückgegebene Daten:
{
"transactions": [
{
"transaction": {
"raw_data": {
"ref_block_bytes": {},
"ref_block_hash": {},
"expiration": 1741334628000,
"contract": [
...
TRC20GetName, fragt den TRC20-Token-Namen basierend auf der Vertragsadresse ab. TRC20GetSymbol, Abfrage des TRC20-Token-Symbols entsprechend der Vertragsadresse
function main() {
Log("TRC20GetName:", exchange.IO("api", "tron", "TRC20GetName", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"))
Log("TRC20GetSymbol:", exchange.IO("api", "tron", "TRC20GetSymbol", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"))
}
Zurückgegebene Daten:
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
}
Um den TRC20-Vertrag aufzurufen, verwenden wir die Methode balanceOf des TRC20-Vertrags, codieren sie zuerst und rufen sie dann mit TRC20Call auf.
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
}
Konstante Methoden erfordern keine Übertragung. Das Anrufergebnis wird in tx.constant_result aufgezeichnet.
Erstellen Sie Transdaten.
function main() {
var trans = exchange.IO("api", "tron", "Transfer", "TWTb...", "TKCG9FN...", 1000000)
return trans
}
TWTb...: Die Adresse des TRX-Wallets A.TKCG9FN...: Die Adresse des TRX-Wallets B.Zurückgegebene Daten:
{
"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
}
}
Holen Sie sich den Vertrags-ABI basierend auf der Vertragsadresse.
function main() {
var usdtABI = exchange.IO("api", "tron", "GetContractABI", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t")
return usdtABI
}
Zurückgegebene Daten:
{
"entrys": [
{
"constant": true,
"name": "name",
"outputs": [
{
"type": "string"
}
],
"type": 2,
"stateMutability": 2
},
{
"constant": true,
"name": "deprecated",
"outputs": [
{
"type": "bool"
}
],
"type": 2,
"stateMutability": 2
},
...
In RichtungTKCG9FN1j...Überweisen Sie 1TRX an die Tron-Wallet-Adresse.
function main() {
var ownerAddress = exchange.IO("address")
var ret = exchange.IO("api", "tron", "Transfer", ownerAddress, "TKCG9FN1j...", 1000000)
return ret
}
Rufen Sie die Methode des Smart Contracts auf.
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
}
Die zurückgegebenen Daten sind die Token0-Token-Adresse des SunSwap-Handelspools.
Rufen Sie die Smart-Contract-Methode in der Tron-Kette aufbalanceOf,TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6tfürUSDTDie Smart-Contract-Adresse des Tokens.
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)
}
Sie können den USDT-Kontostand in Ihrer Brieftasche überprüfen: 0,000019

FMZ-PlattformWeb3 tronAustauschobjektexchange.IODie Funktion implementiert die folgenden Funktionen.
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钱包地址
pack / encode: Daten kodieren/packen, Methodenaufruf.
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: Kodiert und verpackt
function main() {
var data1 = exchange.IO("encodePacked", "address", "TWTbnQu...")
Log(data1)
// e0c12e16a9f713e5f104c...
var data2 = exchange.IO("encode", "address", "TWTbnQu...")
Log(data2)
// 000000000000000000000000 e0c12e16a9f713e5f104c...
}
auspacken / dekodieren: Daten entpacken/dekodieren, Methodenaufruf.
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)Signieren Sie mit dem aktuell konfigurierten privaten Schlüssel und geben Sie die signierten Daten zurück.
var signature = exchange.IO("hash", "sign", "string", "hex", "txHash") // txHash: 具体hash值
Erste Übungen an der DEX-Börse der Tron-Kette: sunSwap. Wir rufen den sunSwap-Factory-Vertrag auf, fordern die Indizes aller Handelspaare an und fordern dann die Adresse des Handelspaares mit dem Index 1 an.
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的交易对地址
}
Aus Platzgründen werden wir den detaillierten sunSwap-Inhalt im nächsten Artikel mit den Lesern teilen. Vielen Dank für Ihre Unterstützung.
Die quantitative Handelsplattform FMZ sorgt auch im Web3-Zeitalter für Innovationen und bietet quantitativen Händlern einen breiteren On-Chain-Handelsraum. Durch die Unterstützung des Tron-Netzwerks verbessert FMZ nicht nur die kettenübergreifenden Transaktionsmöglichkeiten, sondern ermöglicht Benutzern auch die effiziente Ausführung von Smart-Contract-Interaktionen, Fondsverwaltung und automatisierten Handelsstrategien im Tron-Ökosystem.
In diesem Artikel haben wir die Unterstützung der FMZ-Plattform für das Tron-Netzwerk vorgestellt und die Vertragsmethodenaufrufe von SunSwap DEX in der Tron-Kette implementiert. Mit der Entwicklung der Blockchain-Technologie werden sich die Möglichkeiten quantitativer Web3-Transaktionen weiter erweitern. FMZ wird seine Web3-Funktionen weiterhin optimieren und verbessern, um quantitativen Händlern eine flexiblere, sicherere und effizientere Handelsumgebung zu bieten und den Benutzern zu helfen, größere Vorteile auf dem On-Chain-Markt zu erzielen.
Danke fürs Lesen und danke für Ihre Unterstützung.