[TOC]

블록체인 기술의 발전으로 양적 거래가 Web3 시대로 접어들고 있습니다. FMZ 양적 거래 플랫폼은 선도적인 양적 거래 도구로서 오랫동안 Web3의 방향을 모색해 왔으며 Ethereum 관련 기능을 제공하여 사용자가 스마트 계약과 상호 작용하고, 자금을 관리하고, 체인에서 직접 자동화된 거래 전략을 실행할 수 있도록 지원합니다.
오늘날 FMZ 플랫폼은 Web3 거래 기능을 더욱 확장하여 Tron(TRX) 네트워크를 지원하여 사용자가 두 가지 주요 퍼블릭 체인인 Ethereum과 Tron에서 양적 거래 전략을 구축할 수 있게 되었습니다. 이 업그레이드는 크로스체인 거래의 유연성을 향상시킬 뿐만 아니라, 거래자에게 온체인 자산 관리에 대한 더 많은 가능성을 제공합니다.
이 글에서는 다음 내용을 자세히 다루겠습니다.
TRX-TRON 소개 세부 사항 (Feixiaohao에서 인용)
TRON은 2017년 9월 저스틴 선(Justin Sun)에 의해 설립되었으며, 2018년 5월 메인넷 출시 이후 많은 뛰어난 성과를 달성했습니다. 2018년 7월, TRON 생태계는 월간 활성 사용자가 1억 명이 넘는 분산형 웹 3.0 서비스 제공 분야 선구자인 BitTorrent와의 통합을 완료했습니다. 최근 몇 년 동안 TRON 네트워크는 뛰어난 성과를 거두었습니다. TRONSCAN 데이터에 따르면 2022년 10월 현재 TRON 퍼블릭 체인의 총 사용자 수는 1억 1,500만 명을 돌파했고, 거래 건수는 40억 건을 돌파했으며, 총 잠금 가치(TVL)는 132억 달러를 돌파했습니다. TRON 네트워크는 2021년 12월에 완전히 분산화되었으며, 현재는 커뮤니티가 관리하는 분산형 자율 조직(DAO)입니다. 2022년 5월, TRON은 업계의 암호화폐 중앙은행인 TRON Joint Reserve의 지원을 받는 분산형 슈퍼담보 스테이블코인 USDD 출시를 발표하면서 TRON이 공식적으로 분산형 스테이블코인 시대에 진입했음을 알렸습니다. 2022년 10월, 도미니카는 TRON을 공식적으로 지정된 국가 블록체인 인프라로 발표하면서 TRON은 블록체인 인프라를 개발하기 위해 주권 국가와 협력 협정을 맺은 대형 퍼블릭 체인이 되었습니다. TRON은 도미니카의 자연 유산과 관광 명소의 글로벌 가시성을 높이기 위해 도미니카의 팬 토큰인 도미니카 코인(DMC)을 발행할 권한을 받았습니다. 동시에, TRON 산하의 7개 주요 토큰은 도미니카에서 합법적인 디지털 화폐 및 법정 통화의 지위를 부여받았습니다.
높은 처리량: 높은 처리량은 TRON의 TPS를 개선하여 달성되었으며, 일상적인 사용에 대한 실용성은 비트코인과 이더리움을 능가했습니다.
확장성: 우수한 확장성과 효율적인 스마트 계약을 기반으로 TRON에서는 애플리케이션이 더 다양한 배포 방법을 가질 수 있으며, TRON은 많은 사용자를 지원할 수 있습니다.
높은 신뢰성: TRON은 보다 안정적인 네트워크 구조, 사용자 자산, 본질적 가치를 갖추고 있으며, 더 높은 수준의 분산형 합의를 통해 보상 분배 메커니즘이 개선되었습니다.
grpc.trongrid.io:50051
다른 노드 제공자의 JSON-RPC 노드, REST 노드 등을 사용할 수 있습니다(HttpQuery를 사용하여 요청 가능). FMZ에서 교환 객체 캡슐화에 대한 유일한 호출은 grpc 메서드입니다.
TRON 지갑을 준비해야 합니다. OKX, imToken 등을 사용하거나 직접 생성할 수 있습니다.
FMZ 플랫폼이 트론을 지원하기 전에는 이더리움의 Web3 개발을 지원하는 데 앞장섰었습니다. UniSwap 분산형 거래소에 연결하는 방법은 이전 문서를 참조하세요. 트론은 이더리움과 호환되고 ETH 및 EOS의 일부 기능을 통합하므로 스마트 계약 실행 및 체인상 상호 작용에서 독보적인 이점을 가지고 있습니다. FMZ 플랫폼에서 Tron 거래소 객체(지갑, 노드 정보)를 구성하는 것은 Ethereum 거래소 객체(지갑, 노드 정보)를 구성하는 것과 거의 같습니다.
거래소 추가 페이지에서:

지갑을 구성하고 ChainType으로 TRON을 선택하고 기본 RPC 노드 주소를 사용합니다.
플랫폼의 디버깅 도구를 사용하여 테스트할 수 있습니다.
디버깅 도구: https://www.fmz.com/m/debug
이름에서 알 수 있듯이 이 방식은 이더리움의 방식과 정확히 동일하며, 기능도 정확히 동일합니다. 이 방법은 지정된 Tron 지갑의 TRX 잔액을 읽는 데 사용됩니다.
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"}'
요청된 잔액 데이터는 매우 큰 16진수 값으로, 이전 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로 인코딩된 주소이므로 사용하기 전에 16진수로 인코딩된 매개변수로 변환해야 합니다.
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입니다., 따라서 bigNumber를 처리할 때 매개변수 6을 채워주세요.
FMZ 플랫폼의 디버깅 도구에서 테스트:

Tronscan에서 조회한 지갑의 TRX 잔액을 비교해 보면 데이터가 일관성이 있습니다.

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
}
트론 계정을 생성하세요.
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 계약을 호출하려면 TRC20 계약의 balanceOf 메서드를 사용하고, 먼저 이를 인코딩한 다음 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를 트론 지갑 주소로 전송하세요.
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
}
반환된 데이터는 sunSwap 거래 풀의 token0 토큰 주소입니다.
트론 체인에서 스마트 계약 메서드 호출balanceOf,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

FMZ 플랫폼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钱包地址
pack / encode: 데이터 인코딩/패키징, 메서드 호출.
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...
}
unpack / decode: 데이터 압축 해제/디코딩, 메서드 호출.
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值
Tron 체인의 DEX 거래소에서의 초기 연습: 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 시대에도 혁신을 이어가며 양적 거래자들에게 더 광범위한 온체인 거래 공간을 제공합니다. FMZ는 Tron 네트워크를 지원함으로써 크로스체인 거래 기능을 향상시킬 뿐만 아니라, 사용자가 Tron 생태계에서 스마트 계약 상호작용, 자금 관리, 자동화된 거래 전략을 효율적으로 실행할 수 있도록 지원합니다.
이 글에서는 FMZ 플랫폼이 Tron 네트워크를 지원하는 방식을 소개하고 Tron 체인에서 SunSwap DEX의 계약 메서드 호출을 구현했습니다. 블록체인 기술의 발전으로 Web3 양적 거래의 가능성은 계속 확대될 것입니다. FMZ는 양적 거래자들에게 보다 유연하고 안전하며 효율적인 거래 환경을 제공하기 위해 Web3 기능을 지속적으로 최적화하고 개선해 나갈 것이며, 이를 통해 사용자들이 온체인 시장에서 더 큰 이점을 얻을 수 있도록 도울 것입니다.
읽어주셔서 감사하고, 여러분의 지지에 감사드립니다.