ExchangeWithdraw gRPC Method
Parameters
from
string
REQUIRED
Loading...
exchangeID
integer
REQUIRED
Loading...
tokenID
string
REQUIRED
Loading...
amountToken
integer
REQUIRED
Loading...
Returns
transaction
object
Loading...
raw_data
object
Loading...
ref_block_bytes
string
Loading...
ref_block_num
integer
Loading...
ref_block_hash
string
Loading...
expiration
integer
Loading...
auths
array
Loading...
data
string
Loading...
contract
array
Loading...
type
string
Loading...
parameter
object
Loading...
value
string
Loading...
type_url
string
Loading...
provider
string
Loading...
ContractName
string
Loading...
Permission_id
integer
Loading...
scripts
string
Loading...
timestamp
integer
Loading...
fee_limit
integer
Loading...
signature
array
Loading...
ret
array
Loading...
fee
integer
Loading...
ret
string
Loading...
contractRet
string
Loading...
assetIssueID
string
Loading...
withdraw_amount
integer
Loading...
unfreeze_amount
integer
Loading...
exchange_received_amount
integer
Loading...
exchange_inject_another_amount
integer
Loading...
exchange_withdraw_another_amount
integer
Loading...
exchange_id
integer
Loading...
shielded_transaction_fee
integer
Loading...
orderId
string
Loading...
orderDetails
array
Loading...
makerOrderId
string
Loading...
takerOrderId
string
Loading...
fillSellQuantity
integer
Loading...
fillBuyQuantity
integer
Loading...
withdraw_expire_amount
integer
Loading...
cancelUnfreezeV2Amount
object
Loading...
txid
string
Loading...
constant_result
array
Loading...
result
object
Loading...
result
boolean
Loading...
code
string
Loading...
message
string
Loading...
energy_used
integer
Loading...
logs
array
Loading...
address
string
Loading...
topics
array
Loading...
data
string
Loading...
internal_transactions
array
Loading...
hash
string
Loading...
caller_address
string
Loading...
transferTo_address
string
Loading...
callValueInfo
array
Loading...
callValue
integer
Loading...
tokenId
string
Loading...
note
string
Loading...
rejected
boolean
Loading...
extra
string
Loading...
energy_penalty
integer
Loading...
Request
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"48exchangeID := int64(123)4950fmt.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}5657creatorAddress := string(exchange.CreatorAddress)58fmt.Printf("Exchange creator: %s\n", creatorAddress)59if creatorAddress != from {60fmt.Printf("Error: Only the exchange creator (%s) can withdraw liquidity\n", creatorAddress)61return62}6364firstTokenID := string(exchange.FirstTokenId)65secondTokenID := string(exchange.SecondTokenId)66fmt.Printf("Exchange %d contains tokens: %s and %s\n",67exchangeID, firstTokenID, secondTokenID)68fmt.Printf("Current liquidity: %d %s and %d %s\n",69exchange.FirstTokenBalance, firstTokenID,70exchange.SecondTokenBalance, secondTokenID)7172tokenID := firstTokenID73amountToken := int64(1000000)7475if tokenID != firstTokenID && tokenID != secondTokenID {76fmt.Printf("Error: Token %s is not in exchange %d\n", tokenID, exchangeID)77return78}7980var availableAmount int6481if tokenID == firstTokenID {82availableAmount = exchange.FirstTokenBalance83} else {84availableAmount = exchange.SecondTokenBalance85}8687if amountToken > availableAmount {88fmt.Printf("Error: Insufficient liquidity. Requested: %d, Available: %d\n",89amountToken, availableAmount)90return91}9293var otherTokenAmount int6494if tokenID == firstTokenID {95otherTokenAmount = amountToken * exchange.SecondTokenBalance / exchange.FirstTokenBalance96fmt.Printf("Withdrawing %d %s will also withdraw approximately %d %s\n",97amountToken, firstTokenID, otherTokenAmount, secondTokenID)98} else {99otherTokenAmount = amountToken * exchange.FirstTokenBalance / exchange.SecondTokenBalance100fmt.Printf("Withdrawing %d %s will also withdraw approximately %d %s\n",101amountToken, secondTokenID, otherTokenAmount, firstTokenID)102}103104fmt.Println("Creating exchange withdrawal transaction...")105106tx, err := conn.ExchangeWithdraw(107from, // The address withdrawing liquidity (must be exchange creator)108exchangeID, // Exchange ID109tokenID, // Token ID to withdraw110amountToken, // Amount to withdraw111)112113if err != nil {114fmt.Printf("Error creating withdrawal transaction: %v\n", err)115return116}117118fmt.Println("Withdrawal transaction created successfully. Transaction details:")119jsonData, _ := json.MarshalIndent(tx, "", " ")120fmt.Println(string(jsonData))121122// NOTE: In a production environment, the transaction should be signed here123fmt.Println("\nBroadcasting transaction to the TRON network...")124result, err := conn.Broadcast(tx.Transaction)125if err != nil {126fmt.Printf("Error broadcasting transaction: %v\n", err)127return128}129130if !result.GetResult() {131fmt.Printf("Broadcast failed: %s\n", result.GetMessage())132return133}134135fmt.Println("Liquidity withdrawal executed successfully! Result:")136resultJSON, _ := json.MarshalIndent(result, "", " ")137fmt.Println(string(resultJSON))138}
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"48exchangeID := int64(123)4950fmt.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}5657creatorAddress := string(exchange.CreatorAddress)58fmt.Printf("Exchange creator: %s\n", creatorAddress)59if creatorAddress != from {60fmt.Printf("Error: Only the exchange creator (%s) can withdraw liquidity\n", creatorAddress)61return62}6364firstTokenID := string(exchange.FirstTokenId)65secondTokenID := string(exchange.SecondTokenId)66fmt.Printf("Exchange %d contains tokens: %s and %s\n",67exchangeID, firstTokenID, secondTokenID)68fmt.Printf("Current liquidity: %d %s and %d %s\n",69exchange.FirstTokenBalance, firstTokenID,70exchange.SecondTokenBalance, secondTokenID)7172tokenID := firstTokenID73amountToken := int64(1000000)7475if tokenID != firstTokenID && tokenID != secondTokenID {76fmt.Printf("Error: Token %s is not in exchange %d\n", tokenID, exchangeID)77return78}7980var availableAmount int6481if tokenID == firstTokenID {82availableAmount = exchange.FirstTokenBalance83} else {84availableAmount = exchange.SecondTokenBalance85}8687if amountToken > availableAmount {88fmt.Printf("Error: Insufficient liquidity. Requested: %d, Available: %d\n",89amountToken, availableAmount)90return91}9293var otherTokenAmount int6494if tokenID == firstTokenID {95otherTokenAmount = amountToken * exchange.SecondTokenBalance / exchange.FirstTokenBalance96fmt.Printf("Withdrawing %d %s will also withdraw approximately %d %s\n",97amountToken, firstTokenID, otherTokenAmount, secondTokenID)98} else {99otherTokenAmount = amountToken * exchange.FirstTokenBalance / exchange.SecondTokenBalance100fmt.Printf("Withdrawing %d %s will also withdraw approximately %d %s\n",101amountToken, secondTokenID, otherTokenAmount, firstTokenID)102}103104fmt.Println("Creating exchange withdrawal transaction...")105106tx, err := conn.ExchangeWithdraw(107from, // The address withdrawing liquidity (must be exchange creator)108exchangeID, // Exchange ID109tokenID, // Token ID to withdraw110amountToken, // Amount to withdraw111)112113if err != nil {114fmt.Printf("Error creating withdrawal transaction: %v\n", err)115return116}117118fmt.Println("Withdrawal transaction created successfully. Transaction details:")119jsonData, _ := json.MarshalIndent(tx, "", " ")120fmt.Println(string(jsonData))121122// NOTE: In a production environment, the transaction should be signed here123fmt.Println("\nBroadcasting transaction to the TRON network...")124result, err := conn.Broadcast(tx.Transaction)125if err != nil {126fmt.Printf("Error broadcasting transaction: %v\n", err)127return128}129130if !result.GetResult() {131fmt.Printf("Broadcast failed: %s\n", result.GetMessage())132return133}134135fmt.Println("Liquidity withdrawal executed successfully! Result:")136resultJSON, _ := json.MarshalIndent(result, "", " ")137fmt.Println(string(resultJSON))138}
Don't have an account yet?
Create your Quicknode endpoint in seconds and start building
Get started for free