Buy energy by API using private key
This is full example buy energy by API key using private key
Last updated
This is full example buy energy by API key using private key
Last updated
Requirement: TronWeb version 5.3.2
npm i tronweb@5.3.2 @noble/secp256k1@1.7.1
(Read more: )
const TronWeb = require('tronweb')
const TRONSAVE_RECEIVER_ADDRESS = "TWZEhq5JuUVvGtutNgnRBATbF8BnHGyn4S" //in testnet mode change it to "TATT1UzHRikft98bRFqApFTsaSw73ycfoS"
const PRIVATE_KEY = "your_private_key" //Change it
const TRON_FULLNODE = "https://api.trongrid.io" //in testnet mode change it to "https://api.nileex.io"
const TRONSAVE_API_URL = "https://api.tronsave.io" //in testnet mode change it to "https://api-dev.tronsave.io"
const REQUEST_ADDRESS = "your_request_address" //Change it
const TARGET_ADDRESS = "your_target_address" //Change it
const BUY_AMOUNT = 100000 //Chanageable
const DURATION = 3 * 86400 * 1000 //3 days.Changeable
const tronWeb = new TronWeb({
fullNode: TRON_FULLNODE,
solidityNode: TRON_FULLNODE,
eventServer: TRON_FULLNODE,
privateKey: PRIVATE_KEY,
})
const GetEstimate = async (request_address, target_address, amount, duration) => {
const url = TRONSAVE_API_URL + "/v0/estimate-trx"
//see more at https://docs.tronsave.io/buy-energy-on-telegram/using-api-key-to/buy-energy
const body = {
"amount": amount,
"buy_energy_type": "MEDIUM",
"duration_millisec": duration,
"request_address": request_address,
"target_address": target_address || request_address,
"is_partial": true
}
const data = await fetch(url, {
method: "POST",
headers: {
"content-type": "application/json",
},
body: JSON.stringify(body)
})
const response = await data.json()
/**
* Example response
* @link https://docs.tronsave.io/market/how-to-buy-energy/buy-on-rest-api
{
"unit_price": 45,
"duration_millisec": 259200000,
"available_energy": 4298470,
"estimate_trx": 13500000,
}
*/
return response
}
const GetSignedTransaction = async (estimate_trx, request_address) => {
const dataSendTrx = await tronWeb.transactionBuilder.sendTrx(TRONSAVE_RECEIVER_ADDRESS, estimate_trx, request_address)
const signed_tx = await tronWeb.trx.sign(dataSendTrx, PRIVATE_KEY);
return signed_tx
}
const CreateOrder = async (signed_tx, target_address, unit_price, duration) => {
const url = TRONSAVE_API_URL + "/v0/buy-energy"
//see more at https://docs.tronsave.io/buy-energy-on-telegram/using-api-key-to/buy-energy
const body = {
"resource_type": "ENERGY",
"unit_price": unit_price,
"allow_partial_fill": true,
"target_address": target_address,
"duration_millisec": duration,
"tx_id": signed_tx.txID,
"signed_tx": signed_tx
}
const data = await fetch(url, {
method: "POST",
headers: {
"content-type": "application/json",
},
body: JSON.stringify(body)
})
const response = await data.text()
//Example response
// @link https://docs.tronsave.io/market/how-to-buy-energy/buy-on-rest-api
// "651d2306e55c073f6ca0992e" //order id in tronsave
return response
}
const BuyEnergyUsingPrivateKey = async () => {
//Step 1: Estimate the cost of buy order
const estimate_data = await GetEstimate(REQUEST_ADDRESS, TARGET_ADDRESS, BUY_AMOUNT, DURATION)
const { unit_price, estimate_trx, available_energy } = estimate_data
console.log(estimate_data)
/*
{
"unit_price": 45,
"duration_millisec": 259200000,
"available_energy": 4298470,
"estimate_trx": 13500000,
}
*/
const is_ready_fulfilled = available_energy >= BUY_AMOUNT //if available_energy equal buy_amount it means that your order can be fulfilled 100%
if (is_ready_fulfilled) {
//Step 2: Build signed transaction by using private key
const signed_tx = await GetSignedTransaction(estimate_trx, REQUEST_ADDRESS)
console.log(signed_tx);
/*
{
"resource_type": "ENERGY",
"unit_price": 45,
"allow_partial_fill": true,
"target_address": "TM6ZeEgpefyGWeMLuzSbfqTGkPv8Z6Jm4X",
"duration_millisec": 259200000,
"tx_id": "446eed36e31249b98b201db2e81a3825b185f1a3d8b2fea348b24fc021e58e0d",
"signed_tx": {
"visible": false,
"txID": "446eed36e31249b98b201db2e81a3825b185f1a3d8b2fea348b24fc021e58e0d",
"raw_data": {
"contract": [
{
"parameter": {
"value": {
"amount": 13500000,
"owner_address": "417a0d868d1418c9038584af1252f85d486502eec0",
"to_address": "41055756f33f419278d9ea059bd2b21120e6add748"
},
"type_url": "type.googleapis.com/protocol.TransferContract"
},
"type": "TransferContract"
}
],
"ref_block_bytes": "0713",
"ref_block_hash": "6c5f7686f4176139",
"expiration": 1691465106000,
"timestamp": 1691465046758
},
"raw_data_hex": "0a02071322086c5f7686f417613940d084b5999d315a68080112640a2d747970652e676f6f676c65617069732e636f6d2f70726f746f636f6c2e5472616e73666572436f6e747261637412330a15417a0d868d1418c9038584af1252f85d486502eec0121541055756f33f419278d9ea059bd2b21120e6add74818e0fcb70670e6b5b1999d31",
"signature": ["xxxxxxxxx"]
}
}
*/
//Step 3: Create order
const dataCreateOrder = await CreateOrder(signed_tx, TARGET_ADDRESS, unit_price, DURATION)
console.log(dataCreateOrder);
}
}
BuyEnergyUsingPrivateKey()