输入/搜索内容
欢迎使用发明者量化交易平台
编程语言
JavaScript
TypeScript
Python
C++
My语言(麦语言)
PINE语言
Blockly可视化
Workflow工作流
密钥安全性
实盘
策略库
托管者
部署托管者
一键租用托管者
手动部署托管者
托管者操作注意事项
全局指定IP地址
命令行版本托管者程序的参数
实盘数据迁移
托管者监控
交易所
策略编辑器
回测系统
策略入口函数
策略框架与API函数
模板类库
策略参数
交互控件
期权交易
C++策略编写说明
JavaScript策略编写说明
Web3
内置库
扩展API接口
MCP 服务
交易终端
数据探索
Alpha因子分析工具
通用协议
调试工具
远程编辑
完整策略的导入与导出
多语言支持
实盘、策略分组
实盘展示
策略分享与出租
实盘消息推送
实盘报错、异常退出的常见原因
交易所特殊说明

在发明者量化交易平台,通过exchange.IO()函数可以实现对波场(TRON)链上gRPC方法和智能合约的调用,从而编写相关策略代码。

配置方式与以太坊交易所对象配置类似,ChainType需要选择为TRONRPC Address默认为:grpc.trongrid.io:50051,即波场官方节点地址。

默认已注册TRC20的合约ABI,底层封装了自动根据合约地址获取合约ABI的机制。通常情况下无需手动注册ABI,仅在某些合约ABI无法自动获取时才需要手动注册。

注册ABI的方式与以太坊一致,例如:

javascript
// USDT合约地址:TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t let abi = `[{"constant":true,"inputs":[{"name":"who","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]` // 注册 balanceOf 方法 exchange.IO("abi", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", abi)

使用exchange.IO()函数调用TRON的RPC方法。对于需要签名的方法,底层已自动封装签名操作。以下列举常用方法,其他方法请参考TRON官方项目文档。

  • GetAccount
    javascript
    exchange.IO("api", "tron", "GetAccount", "TKCG...") // "TKCG..."为TRON钱包地址,该函数返回"TKCG..."地址的账户信息。
  • GetAccountResource
    javascript
    exchange.IO("api", "tron", "GetAccountResource", "TKCG...") // 获取指定钱包地址的资源,包括能量和带宽。
  • GetContractABI
    javascript
    exchange.IO("api", "tron", "GetContractABI", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t") // 获取 USDT TRC20合约ABI
  • GetAssetIssueByName
    javascript
    exchange.IO("api", "tron", "GetAssetIssueByName", "TRX") // 根据代币名称获取代币资产信息
  • GetNowBlock
    javascript
    exchange.IO("api", "tron", "GetNowBlock") // 获取当前区块信息
  • GetBlockByNum
    javascript
    exchange.IO("api", "tron", "GetBlockByNum", 70624300)
  • GetTransactionByID
    javascript
    exchange.IO("api", "tron", "GetTransactionByID", "05a8fae2cd1cbf36b61d12e219588d25b4826436f055f93388a96e620ec3f3f2") // 根据交易哈希值获取Transaction
  • TRC20ContractBalance
    javascript
    exchange.IO("api", "tron", "TRC20ContractBalance", "TKCG...", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t") // 获取钱包 USDT 余额,注意返回的数据未经精度处理,例如返回数据为:```6890251```,即```6.890251 USDT```。
  • TriggerConstantContract
    javascript
    function main() { let ret = exchange.IO("api", "tron", "TriggerConstantContract", "", "TSUUVjysXV8YqHytSNjfkNXnnB49QDvZpx", "token0()", "") // 调用智能合约的token0()方法,TriggerConstantContract用于调用只读方法 let data = exchange.IO("decode", "address", Encode("raw", "raw", "hex", ret["constant_result"][0])) // 解码数据 return data // data: 0x891cdb91d149f23b1a45d9c5ca78a88d0cb44c18 }
  • TRC20Call
    javascript
    function main() { let ret = exchange.IO("api", "tron", "TRC20Call", "", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t", "0x06fdde03", true, 0) // 使用TRC20Call调用只读方法0x06fdde03 let data = Encode("raw", "raw", "hex", ret.constant_result[0]) return exchange.IO("api", "tron", "ParseTRC20StringProperty", data) // Tether USD }
  • Transfer
    javascript
    exchange.IO("api", "tron", "Transfer", "TWTbn...", "TKCG...", 1000000) // 使用Transfer方法转账TRX,从"TWTbn..."转至"TKCG...",1000000即1TRX。

当交易所对象设置为Web3并选择TRON时,编码/解码等操作与以太坊的Web3交易所对象保持一致。

  • encode:
    javascript
    let ret = exchange.IO("encode", "address", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t") Log(ret) // ret: 000000000000000000000000a614f803b6fd780986a42c78ec9c7f77e6ded13c , 对USDT代币的TRON地址进行编码。
  • decode:
    javascript
    let data = "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000a5465746865722055534400000000000000000000000000000000000000000000" let ret = exchange.IO("decode", "string", data) Log(ret) // ret: Tether USD , 类似于ParseTRC20StringProperty的功能
  • encodePacked:
    javascript
    let ret = exchange.IO("encodePacked", "address", "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t") Log(ret) // ret: a614f803b6fd780986a42c78ec9c7f77e6ded13c

切换方式与Web3以太坊交易所对象保持一致。

TRON上智能合约方法的调用与以太坊基本一致,以下是一个具体示例,演示如何:

  • 调用智能合约方法,在一次请求中调用多个合约方法:

    javascript
    function main() { let usdtAddress = "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t" // token usdt contract address let data1 = exchange.IO("encode", usdtAddress, "name") // call function: name let data2 = exchange.IO("encode", usdtAddress, "decimals") // call function: decimals let data3 = exchange.IO("encode", usdtAddress, "balanceOf", "TKCG...") // call function: balanceOf var data = [] data.push([usdtAddress, data1]) data.push([usdtAddress, data2]) data.push([usdtAddress, data3]) exchange.IO("abi", "TGXuuKAb4bnrn137u39EKbYzKNXvdCes98", `[{"inputs":[{"components":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"callData","type":"bytes"}],"internalType":"struct TronMulticall.Call[]","name":"calls","type":"tuple[]"}],"name":"aggregate","outputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"bytes[]","name":"returnData","type":"bytes[]"}],"stateMutability":"view","type":"function"}]`) let ret = exchange.IO("api", "TGXuuKAb4bnrn137u39EKbYzKNXvdCes98", "aggregate", data) Log("name:", exchange.IO("decode", "string", ret["returnData"][0])) Log("decimals:", exchange.IO("decode", "uint8", ret["returnData"][1])) Log("balanceOf:", exchange.IO("decode", "uint256", ret["returnData"][2])) }

    输出内容:

    log
    信息 balanceOf: 6890251 信息 decimals: 6 信息 name: Tether USD

  • 获取交易所对象配置的钱包地址
    与以太坊使用方式一致。

  • 切换区块链RPC节点
    与以太坊使用方式一致。

  • 计算哈希值

    javascript
    let algo = "sign" // algo: 使用的算法、方式 let inputFormat = "string" // inputFormat: 输入的格式 let outputFormat = "hex" // outputFormat: 输出的格式 let data = "txHash" // txHash: 具体哈希值 let signature = exchange.IO("hash", algo, inputFormat, outputFormat, data) // 返回签名数据

    当algo参数设置为"sign"时,表示用于计算签名;设置为其他算法参数时(例如:"sha256"),功能等同于Encode()函数。