ExchangeTrade gRPC Method
參數
來自
字串
必填
載入中...
exchangeID
整數
必填
載入中...
tokenID
字串
必填
載入中...
amountToken
整數
必填
載入中...
amountExpected
整數
必填
載入中...
退貨
交易
物件
載入中...
raw_data
物件
載入中...
ref_block_bytes
字串
載入中...
ref_block_num
整數
載入中...
ref_block_hash
字串
載入中...
expiration
整數
載入中...
auths
陣列
載入中...
資料
字串
載入中...
合約
陣列
載入中...
類型
字串
載入中...
parameter
物件
載入中...
值
字串
載入中...
type_url
字串
載入中...
provider
字串
載入中...
ContractName
字串
載入中...
Permission_id
整數
載入中...
scripts
字串
載入中...
時間戳記
整數
載入中...
fee_limit
整數
載入中...
簽名
陣列
載入中...
ret
陣列
載入中...
fee
整數
載入中...
ret
字串
載入中...
contractRet
字串
載入中...
assetIssueID
字串
載入中...
withdraw_amount
整數
載入中...
unfreeze_amount
整數
載入中...
exchange_received_amount
整數
載入中...
exchange_inject_another_amount
整數
載入中...
exchange_withdraw_another_amount
整數
載入中...
exchange_id
整數
載入中...
shielded_transaction_fee
整數
載入中...
orderId
字串
載入中...
orderDetails
陣列
載入中...
makerOrderId
字串
載入中...
takerOrderId
字串
載入中...
fillSellQuantity
整數
載入中...
fillBuyQuantity
整數
載入中...
withdraw_expire_amount
整數
載入中...
cancelUnfreezeV2Amount
物件
載入中...
txid
字串
載入中...
constant_result
陣列
載入中...
結果
物件
載入中...
結果
布林值
載入中...
程式碼
字串
載入中...
訊息
字串
載入中...
energy_used
整數
載入中...
日誌
陣列
載入中...
地址
字串
載入中...
主題
陣列
載入中...
資料
字串
載入中...
internal_transactions
陣列
載入中...
hash
字串
載入中...
caller_address
字串
載入中...
transferTo_address
字串
載入中...
callValueInfo
陣列
載入中...
callValue
整數
載入中...
tokenId
字串
載入中...
註
字串
載入中...
rejected
布林值
載入中...
extra
字串
載入中...
energy_penalty
整數
載入中...
請求
1package main23import (4"context"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 endpoint = "YOUR_ENDPOINT:50051"2021type auth struct {22token string23}2425func (a *auth) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, 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)54return55}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)68return69}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)79return80}81tokenBalance = account.Balance82} else {83// For TRC10 tokens84account, err := conn.GetAccount(from)85if err != nil {86fmt.Printf("Error getting account: %v\n", err)87return88}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.")108return109}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)124return125}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)136return137}138139if !result.GetResult() {140fmt.Printf("Broadcast failed: %s\n", result.GetMessage())141return142}143144fmt.Println("Trade executed successfully! Result:")145resultJSON, _ := json.MarshalIndent(result, "", " ")146fmt.Println(string(resultJSON))147}
1package main23import (4"context"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 endpoint = "YOUR_ENDPOINT:50051"2021type auth struct {22token string23}2425func (a *auth) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, 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)54return55}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)68return69}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)79return80}81tokenBalance = account.Balance82} else {83// For TRC10 tokens84account, err := conn.GetAccount(from)85if err != nil {86fmt.Printf("Error getting account: %v\n", err)87return88}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.")108return109}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)124return125}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)136return137}138139if !result.GetResult() {140fmt.Printf("Broadcast failed: %s\n", result.GetMessage())141return142}143144fmt.Println("Trade executed successfully! Result:")145resultJSON, _ := json.MarshalIndent(result, "", " ")146fmt.Println(string(resultJSON))147}