ExchangeTrade gRPC Method
参数
来自
字符串
必填
正在加载...
exchangeID
整数
必填
正在加载...
tokenID
字符串
必填
正在加载...
amountToken
整数
必填
正在加载...
amountExpected
整数
必填
正在加载...
退货
交易
对象
正在加载...
原始数据
对象
正在加载...
ref_block_bytes
字符串
正在加载...
ref_block_num
整数
正在加载...
ref_block_hash
字符串
正在加载...
到期
整数
正在加载...
auths
数组
正在加载...
数据
字符串
正在加载...
合同
数组
正在加载...
类型
字符串
正在加载...
参数
对象
正在加载...
值
字符串
正在加载...
type_url
字符串
正在加载...
提供商
字符串
正在加载...
合同名称
字符串
正在加载...
Permission_id
整数
正在加载...
脚本
字符串
正在加载...
时间戳
整数
正在加载...
fee_limit
整数
正在加载...
签名
数组
正在加载...
ret
数组
正在加载...
费用
整数
正在加载...
ret
字符串
正在加载...
contractRet
字符串
正在加载...
资产问题ID
字符串
正在加载...
取款金额
整数
正在加载...
解冻金额
整数
正在加载...
exchange_received_amount
整数
正在加载...
exchange_inject_another_amount
整数
正在加载...
exchange_withdraw_another_amount
整数
正在加载...
exchange_id
整数
正在加载...
受保护的交易费
整数
正在加载...
订单编号
字符串
正在加载...
订单详情
数组
正在加载...
makerOrderId
字符串
正在加载...
takerOrderId
字符串
正在加载...
fillSellQuantity
整数
正在加载...
fillBuyQuantity
整数
正在加载...
取款_到期金额
整数
正在加载...
cancelUnfreezeV2Amount
对象
正在加载...
txid
字符串
正在加载...
常量结果
数组
正在加载...
结果
对象
正在加载...
结果
布尔型
正在加载...
代码
字符串
正在加载...
消息
字符串
正在加载...
energy_used
整数
正在加载...
日志
数组
正在加载...
地址
字符串
正在加载...
主题
数组
正在加载...
数据
字符串
正在加载...
内部交易
数组
正在加载...
哈希
字符串
正在加载...
caller_address
字符串
正在加载...
transferTo_address
字符串
正在加载...
callValueInfo
数组
正在加载...
callValue
整数
正在加载...
tokenId
字符串
正在加载...
注
字符串
正在加载...
被拒绝
布尔型
正在加载...
额外
字符串
正在加载...
能量消耗
整数
正在加载...
请求
1包 main23导入 (4"上下文"5"crypto/tls"6"encoding/json"7"fmt"8"github.com/fbsobreira/gotron-sdk/pkg/client"9"google.golang.org/grpc"10"google.golang.org/grpc/credentials"11)1213// Quicknode endpoints consist of two crucial components: the endpoint name and the corresponding token14// For eg: QN Endpoint: https://docs-demo.tron-mainnet.quiknode.pro/abcde12345678915// endpoint will be: docs-demo.tron-mainnet.quiknode.pro:50051 {50051 is the port number for Tron gRPC}16// token will be : abcde1234567891718var token = "YOUR_TOKEN"19var 端点 = "YOUR_ENDPOINT:50051"2021类型 auth 结构体 {22token string23}2425func (a *auth) GetRequestMetadata(ctx 上下文.上下文, uri ...字符串) (map[字符串]字符串, error) {26return map[string]string{27"x-token": a.token,28}, nil29}3031func (a *auth) RequireTransportSecurity() bool {32return false33}3435func main() {3637opts := []grpc.DialOption{38grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})),39grpc.WithPerRPCCredentials(&auth{token}),40}41conn := client.NewGrpcClient(endpoint)42if err := conn.Start(opts...); err != nil {43panic(err)44}45defer conn.Conn.Close()4647from := "TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g" // Address performing the trade48exchangeID := int64(123) // ID of the exchange pair4950fmt.Printf("Verifying exchange ID %d...\n", exchangeID)51exchange, err := conn.ExchangeByID(exchangeID)52if err != nil {53fmt.Printf("Error: The specified exchange does not exist: %v\n", err)54返回55}5657firstTokenID := string(exchange.FirstTokenId)58secondTokenID := string(exchange.SecondTokenId)59fmt.Printf("Exchange %d contains tokens: %s and %s\n",60exchangeID, firstTokenID, secondTokenID)6162tokenID := firstTokenID63amountToken := int64(1000000)64amountExpected := int64(1800000)6566if tokenID != firstTokenID && tokenID != secondTokenID {67fmt.Printf("Error: Token %s is not in exchange %d\n", tokenID, exchangeID)68返回69}7071fmt.Printf("Checking token balance for %s...\n", tokenID)72var tokenBalance int6473// The method to get balance depends on whether we're trading TRX or a TRC10 token74if tokenID == "" {75// For TRX76account, err := conn.GetAccount(from)77if err != nil {78fmt.Printf("Error getting account: %v\n", err)79返回80}81tokenBalance = account.Balance82} else {83// For TRC10 tokens84account, err := conn.GetAccount(from)85if err != nil {86fmt.Printf("Error getting account: %v\n", err)87返回88}8990found := false91for tokenName, balance := range account.AssetV2 {92if string(tokenName) == tokenID {93tokenBalance = balance94found = true95break96}97}98if !found {99tokenBalance = 0100}101}102103fmt.Printf("Token balance: %d\n", tokenBalance)104105if tokenBalance < amountToken {106fmt.Printf("Error: Insufficient token balance. Have: %d, Need: %d\n", tokenBalance, amountToken)107fmt.Println("Please make sure you have enough tokens before trading.")108返回109}110111// Create the trade transaction112fmt.Println("Creating exchange trade transaction...")113114tx, err := conn.ExchangeTrade(115from, // The trader's address116exchangeID, // Exchange ID117tokenID, // Token ID to trade118amountToken, // Amount to trade119amountExpected, // Minimum expected return120)121122if err != nil {123fmt.Printf("Error creating trade transaction: %v\n", err)124返回125}126127fmt.Println("Trade transaction created successfully. Transaction details:")128jsonData, _ := json.MarshalIndent(tx, "", " ")129fmt.Println(string(jsonData))130131// NOTE: In a production environment, the transaction should be signed here132fmt.Println("\nBroadcasting transaction to the TRON network...")133result, err := conn.Broadcast(tx.Transaction)134if err != nil {135fmt.Printf("Error broadcasting transaction: %v\n", err)136返回137}138139if !result.GetResult() {140fmt.Printf("Broadcast failed: %s\n", result.GetMessage())141返回142}143144fmt.Println("Trade executed successfully! Result:")145resultJSON, _ := json.MarshalIndent(result, "", " ")146fmt.Println(string(resultJSON))147}
1包 main23导入 (4"上下文"5"crypto/tls"6"encoding/json"7"fmt"8"github.com/fbsobreira/gotron-sdk/pkg/client"9"google.golang.org/grpc"10"google.golang.org/grpc/credentials"11)1213// Quicknode endpoints consist of two crucial components: the endpoint name and the corresponding token14// For eg: QN Endpoint: https://docs-demo.tron-mainnet.quiknode.pro/abcde12345678915// endpoint will be: docs-demo.tron-mainnet.quiknode.pro:50051 {50051 is the port number for Tron gRPC}16// token will be : abcde1234567891718var token = "YOUR_TOKEN"19var 端点 = "YOUR_ENDPOINT:50051"2021类型 auth 结构体 {22token string23}2425func (a *auth) GetRequestMetadata(ctx 上下文.上下文, uri ...字符串) (map[字符串]字符串, error) {26return map[string]string{27"x-token": a.token,28}, nil29}3031func (a *auth) RequireTransportSecurity() bool {32return false33}3435func main() {3637opts := []grpc.DialOption{38grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})),39grpc.WithPerRPCCredentials(&auth{token}),40}41conn := client.NewGrpcClient(endpoint)42if err := conn.Start(opts...); err != nil {43panic(err)44}45defer conn.Conn.Close()4647from := "TZ4UXDV5ZhNW7fb2AMSbgfAEZ7hWsnYS2g" // Address performing the trade48exchangeID := int64(123) // ID of the exchange pair4950fmt.Printf("Verifying exchange ID %d...\n", exchangeID)51exchange, err := conn.ExchangeByID(exchangeID)52if err != nil {53fmt.Printf("Error: The specified exchange does not exist: %v\n", err)54返回55}5657firstTokenID := string(exchange.FirstTokenId)58secondTokenID := string(exchange.SecondTokenId)59fmt.Printf("Exchange %d contains tokens: %s and %s\n",60exchangeID, firstTokenID, secondTokenID)6162tokenID := firstTokenID63amountToken := int64(1000000)64amountExpected := int64(1800000)6566if tokenID != firstTokenID && tokenID != secondTokenID {67fmt.Printf("Error: Token %s is not in exchange %d\n", tokenID, exchangeID)68返回69}7071fmt.Printf("Checking token balance for %s...\n", tokenID)72var tokenBalance int6473// The method to get balance depends on whether we're trading TRX or a TRC10 token74if tokenID == "" {75// For TRX76account, err := conn.GetAccount(from)77if err != nil {78fmt.Printf("Error getting account: %v\n", err)79返回80}81tokenBalance = account.Balance82} else {83// For TRC10 tokens84account, err := conn.GetAccount(from)85if err != nil {86fmt.Printf("Error getting account: %v\n", err)87返回88}8990found := false91for tokenName, balance := range account.AssetV2 {92if string(tokenName) == tokenID {93tokenBalance = balance94found = true95break96}97}98if !found {99tokenBalance = 0100}101}102103fmt.Printf("Token balance: %d\n", tokenBalance)104105if tokenBalance < amountToken {106fmt.Printf("Error: Insufficient token balance. Have: %d, Need: %d\n", tokenBalance, amountToken)107fmt.Println("Please make sure you have enough tokens before trading.")108返回109}110111// Create the trade transaction112fmt.Println("Creating exchange trade transaction...")113114tx, err := conn.ExchangeTrade(115from, // The trader's address116exchangeID, // Exchange ID117tokenID, // Token ID to trade118amountToken, // Amount to trade119amountExpected, // Minimum expected return120)121122if err != nil {123fmt.Printf("Error creating trade transaction: %v\n", err)124返回125}126127fmt.Println("Trade transaction created successfully. Transaction details:")128jsonData, _ := json.MarshalIndent(tx, "", " ")129fmt.Println(string(jsonData))130131// NOTE: In a production environment, the transaction should be signed here132fmt.Println("\nBroadcasting transaction to the TRON network...")133result, err := conn.Broadcast(tx.Transaction)134if err != nil {135fmt.Printf("Error broadcasting transaction: %v\n", err)136返回137}138139if !result.GetResult() {140fmt.Printf("Broadcast failed: %s\n", result.GetMessage())141返回142}143144fmt.Println("Trade executed successfully! Result:")145resultJSON, _ := json.MarshalIndent(result, "", " ")146fmt.Println(string(resultJSON))147}