Type/to search
8
Follow
1364
Followers
Extension quantitative FMZ Web3 : prise en charge de Tron ajoutée, capacités de transaction en chaîne étendues
Discussions
Created 2025-02-28 17:20:12  Updated 2025-03-11 18:04:16
 0
 1081

img

Préface

Le développement de la technologie blockchain propulse le trading quantitatif dans l’ère du Web3. En tant qu'outil de trading quantitatif de premier plan, la plateforme de trading quantitatif FMZ explore depuis longtemps la direction du Web3 et fournit des fonctions liées à Ethereum, permettant aux utilisateurs d'interagir avec des contrats intelligents, de gérer des fonds et d'exécuter des stratégies de trading automatisées directement sur la chaîne.

Aujourd'hui, la plateforme FMZ a encore étendu ses capacités de trading Web3 et prend en charge le réseau Tron (TRX), permettant aux utilisateurs de déployer des stratégies de trading quantitatives sur les deux principales chaînes publiques d'Ethereum et de Tron. Cette mise à niveau améliore non seulement la flexibilité des transactions inter-chaînes, mais offre également aux traders davantage de possibilités de gestion des actifs en chaîne.

Dans cet article, nous aborderons en détail :

  • Discutez de l'écologie, des applications, du développement et d'autres contenus techniques de Tron dans la direction Web3 de la plate-forme FMZ.
  • Pratiquez la configuration basée sur le réseau Tron sur la plateforme FMZ.
  • Ressources et matériels utilisés dans la pratique
  • Entraînez-vous à appeler des méthodes sur des nœuds Tron.
  • SunSwap, une pratique DeFi basée sur l'écosystème Tron.

Présentation de Tron

Présentation détaillée de TRX-TRON (Citation de Feixiaohao)

TRON a été fondé par Justin Sun en septembre 2017 et a réalisé de nombreuses réalisations exceptionnelles depuis son lancement sur le réseau principal en mai 2018. En juillet 2018, l'écosystème TRON a achevé son intégration avec BitTorrent, un pionnier dans la fourniture de services Web 3.0 décentralisés avec plus de 100 millions d'utilisateurs actifs mensuels. Ces dernières années, le réseau TRON a enregistré des performances brillantes. Les données TRONSCAN montrent qu'en octobre 2022, le nombre total d'utilisateurs de la chaîne publique TRON a dépassé 115 millions, le nombre de transactions a dépassé 4 milliards et la valeur totale verrouillée (TVL) a dépassé 13,2 milliards de dollars américains. Le réseau TRON est devenu entièrement décentralisé en décembre 2021 et est désormais une organisation autonome décentralisée (DAO) gouvernée par la communauté. En mai 2022, TRON a annoncé le lancement du stablecoin décentralisé super-collatéralisé USDD, qui est soutenu par la banque centrale de crypto-monnaie du secteur, la TRON Joint Reserve, marquant l'entrée officielle de TRON dans l'ère des stablecoins décentralisés. En octobre 2022, la Dominique a annoncé que TRON était son infrastructure blockchain nationale officiellement désignée, faisant de TRON une grande chaîne publique qui a conclu un accord de coopération avec un État souverain pour développer l'infrastructure blockchain. TRON a été autorisé à émettre le jeton de fan de la Dominique, Dominica Coin (DMC), pour améliorer la visibilité mondiale du patrimoine naturel et des attractions touristiques de la Dominique. Dans le même temps, les sept principaux jetons de TRON ont obtenu le statut de monnaie numérique légale et de monnaie légale en Dominique.

  • Débit élevé : un débit élevé est obtenu en améliorant le TPS dans TRON, et sa praticité pour une utilisation quotidienne a dépassé Bitcoin et Ethereum.

  • Évolutivité : grâce à une bonne évolutivité et à des contrats intelligents efficaces, les applications peuvent avoir davantage de méthodes de déploiement dans TRON, et TRON peut prendre en charge un grand nombre d'utilisateurs.

  • Haute fiabilité : TRON dispose d'une structure de réseau plus fiable, d'actifs utilisateur, d'une valeur intrinsèque et d'un degré plus élevé de consensus décentralisé, ce qui apporte un mécanisme de distribution de récompenses amélioré.

Ressources et matériels utilisés dans la pratique

Configurer les objets d'échange WEB3 sur FMZ

Avant que la plateforme FMZ ne prenne en charge Tron, elle avait pris l'initiative de soutenir le développement Web3 d'Ethereum. Vous pouvez consulter les articles précédents pour savoir comment vous connecter à l'échange décentralisé UniSwap. Étant donné que Tron est compatible avec Ethereum et intègre certaines fonctionnalités d'ETH et d'EOS, il présente des avantages uniques dans l'exécution de contrats intelligents et l'interaction en chaîne. La configuration des objets d'échange Tron (portefeuilles, informations sur les nœuds) sur la plate-forme FMZ est presque la même que la configuration des objets d'échange Ethereum (portefeuilles, informations sur les nœuds).

Ajouter un objet d'échange

Sur la page Ajouter un Exchange :

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

img

Configurez le portefeuille, sélectionnez TRON comme ChainType et utilisez l'adresse de nœud RPC par défaut.

Pratiques courantes des méthodes de nœud JSON-RPC

Nous pouvons utiliser les outils de débogage de la plateforme pour tester.

Outils de débogage : https://www.fmz.com/m/debug

eth_getBalance

Comme son nom l'indique, cette méthode est exactement la même que la méthode d'Ethereum et ses fonctions sont exactement les mêmes. Cette méthode est utilisée pour lire le solde TRX dans le portefeuille Tron spécifié.

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"}'

Les données de solde demandées sont une valeur hexadécimale très grande, ce qui nécessite la fonction de conversion que nous avons utilisée dans la stratégie précédente liée à 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) }

Étant donné que l'adresse du portefeuille copiée à partir du portefeuille Tron est une adresse codée en base58, elle doit être convertie en un paramètre codé en hexadécimal avant de pouvoir être utilisée.

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 }

Après avoir converti l'adresse, nous pouvons appeler cecieth_getBalanceMéthode.

Le code de test est le suivant:

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) }

La précision du jeton TRX est de 6, remplissez donc le paramètre 6 lors du traitement de bigNumber.

Test dans l'outil de débogage de la plateforme FMZ :

img

En comparant le solde TRX dans le portefeuille interrogé sur tronscan, les données sont cohérentes.

img

Pratique de la méthode des nœuds gRPC

Le contenu pratique principal de la plateforme FMZ est l'appel de méthode du nœud grpc. En raison de l'espace limité, seuls les appels de méthode couramment utilisés sont répertoriés ici.

Appel du prototype :exchange.IO("api", "tron", "method name", ...). « nom de la méthode » est le nom de la méthode à appeler.

GetAccount

Interroger les informations du compte du portefeuille.

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

Renseignements sur l'appel de retour (extrait) :

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

GetTransactionInfoByID

Vérifiez les transferts.

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

Données renvoyées :

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

ListNodes

Renvoie toutes les informations du nœud.

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

TRC20GetDecimals

Interroger les informations de précision des jetons TRC20

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

TRC20ContractBalance

Interrogez le solde d'un certain jeton TRC20 dans une certaine adresse de portefeuille.

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

GetNowBlock

Renvoie les dernières informations de bloc sur la blockchain actuelle.

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

Données renvoyées :

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

Interrogez les informations de bande passante du compte TRON.

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

Données renvoyées :

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

CreateAccount

Créez un compte Tron.

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

La tentative de création d'un compte existant renverra une erreur :

log
Futures_OP 4: Contract validate error : Account has existed

GetBlockByNum

Obtenez des informations sur les blocs en fonction de la hauteur des blocs.

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

Données renvoyées :

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

TRC20GetName / TRC20GetSymbol

TRC20GetName, interroge le nom du jeton TRC20 en fonction de l'adresse du contrat.
TRC20GetSymbol, interroge le symbole du jeton TRC20 en fonction de l'adresse du contrat

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

Données renvoyées :

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

Pour appeler le contrat TRC20, nous utilisons la méthode balanceOf du contrat TRC20, l'encodons d'abord, puis l'appelons à l'aide de 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" : adresse du contrat TRC20 USDT.
  • "TWTbnQuiWvEg..." : Paramètre, l'adresse du portefeuille TRX du solde demandé par la méthode balanceOf.
  • "balanceOf" : Le nom de la méthode qui doit être codé.

Les méthodes constantes ne nécessitent pas de diffusion. Le résultat de l'appel est enregistré dans tx.constant_result.

Transfer

Construire une donnée trans.

javascript
function main() { var trans = exchange.IO("api", "tron", "Transfer", "TWTb...", "TKCG9FN...", 1000000) return trans }
  • TWTb...: L'adresse du portefeuille TRX A.
  • TKCG9FN...: L'adresse du portefeuille TRX B.
  • 1000000 : Transfert 1TRX.

Données renvoyées :

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

Obtenez l'ABI du contrat en fonction de l'adresse du contrat.

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

Données renvoyées :

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

VersTKCG9FN1j...Transférez 1TRX vers l'adresse du portefeuille tron.

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

TriggerConstantContract

Appelez la méthode du contrat intelligent.

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 }

Les données renvoyées sont l'adresse du jeton token0 du pool de trading sunSwap.

Appel de méthode de contrat intelligent

  • Vérifiez le solde USDT

    Appeler la méthode du contrat intelligent sur la chaîne TronbalanceOfTR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6tpourUSDTL'adresse du contrat intelligent du jeton.

    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) }

    Vous pouvez vérifier le solde de l'USDT dans votre portefeuille : 0,000019

    img

Autres fonctionnalités d'exchange.IO

Plateforme FMZWeb3 tronObjet d'échangeexchange.IOLa fonction implémente les fonctions suivantes.

  • Transfert TRX

    javascript
    function main() { var ret = exchange.IO("api", "tron", "send", "目标TRX钱包地址", 1) // 需要注意,参数1 表示 0.000001 TRX ,需要转换数值为链上数值。 return ret // 转账hash: 305f0c2487095effcf9e2db61f021f9767076114... }
  • Adresse du nœud de commutation

    javascript
    exchange.IO("base", "rpc address") // rpc address 替换为具体的节点地址 // 或者 exchange.IO("rpc", "rpc address")
  • Enregistrer le contrat intelligent ABI

    javascript
    exchange.IO("abi", "contract ABI") // contract ABI 替换为具体的合约ABI内容
  • Obtenir l'adresse du portefeuille lié à l'objet d'échange actuel

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

    pack / encode : Encoder/packer des données, appel de méthode.

    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 : Encodé et empaqueté

    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

    décompresser / décoder : Décompresser/décoder les données, appel de méthode.

    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) }
  • Mettre à jour/importer la clé privée

    javascript
    exchange.IO("key", "xxx") // xxx 为私钥
  • Calcul du hachage
    Appel du prototype :exchange.IO("hash", algo, inputFormat, outputFormat, data)

    Signez avec la clé privée actuellement configurée et renvoyez les données signées.

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

Un premier aperçu de SunSwap

Première pratique sur l'échange DEX sur la chaîne Tron : sunSwap. Nous appelons le contrat d'usine sunSwap, demandons les index de toutes les paires de trading, puis demandons l'adresse de la paire de trading avec l'index 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的交易对地址 }

En raison de l'espace limité, nous partagerons le contenu détaillé de sunSwap avec les lecteurs dans le prochain article. Merci pour votre soutien.

THE END

La plateforme de trading quantitatif FMZ continue d'innover à l'ère du Web3, offrant aux traders quantitatifs un espace de trading on-chain plus large. En prenant en charge le réseau Tron, FMZ améliore non seulement les capacités de transaction inter-chaînes, mais permet également aux utilisateurs d'exécuter efficacement des interactions de contrats intelligents, la gestion de fonds et des stratégies de trading automatisées dans l'écosystème Tron.

Dans cet article, nous avons présenté le support de la plateforme FMZ pour le réseau Tron et implémenté les appels de méthode de contrat de SunSwap DEX sur la chaîne Tron. Avec le développement de la technologie blockchain, les possibilités des transactions quantitatives Web3 continueront de s’étendre. FMZ continuera d'optimiser et d'améliorer ses capacités Web3 pour fournir aux traders quantitatifs un environnement de trading plus flexible, sécurisé et efficace, aidant les utilisateurs à obtenir de plus grands avantages sur le marché en chaîne.

Merci de votre lecture et merci pour votre soutien.

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