使用 API 密钥通过 API 购买能源
这是使用 API 密钥通过 API 密钥购买能源的完整示例
如何获取api密钥
要求:TronWeb 版本 5.3.2
npm i [email protected] @noble/[email protected]
(了解更多:https://tronweb.network/docu/docs/5.3.2/Release%20Note/)
const API_KEY = `your_api_key`; // 请更改此处
const TRONSAVE_API_URL = "https://api.tronsave.io" // 在测试网络模式下更改为 "https://api-dev.tronsave.io"
const RECEIVER_ADDRESS = 'your_receiver_address' // 请更改此处
const BUY_AMOUNT = 100000 // 请更改此处
const DURATION = 3600 * 1000 // 当前值:1小时,请更改此处
const MAX_PRICE_ACCEPTED = 100 // 请更改此处
const sleep = async (ms) => {
await new Promise((resolver, reject) => {
setTimeout(() => resolver("OK"), ms)
})
}
const GetOrderBook = async (api_key, receiver_address) => {
const url = `${TRONSAVE_API_URL}/v0/order-book?address=${receiver_address}`
const data = await fetch(url, {
headers: {
'apikey': api_key
}
})
const response = await data.json()
/**
* 示例响应
* @link https://docs.tronsave.io/buy-energy-on-telegram/using-api-key-to/get-order-book
[
{
"price": -1,
"available_energy_amount": 177451
},
{
"price": 30,
"available_energy_amount": 331088
},
{
"price": 35,
"available_energy_amount": 2841948
},
]
*/
return response
}
const GetAccountInfo = async (api_key) => {
const url = `${TRONSAVE_API_URL}/v0/user-info`
const data = await fetch(url, {
headers: {
'apikey': api_key
}
})
const response = await data.json()
/**
* 示例响应
* @link https://docs.tronsave.io/buy-energy-on-telegram/using-api-key-to/get-internal-account-info
{
"id": "user_id",
"balance": "1000000",
"represent_address": "TKVSaJQDWeKFSEXmA44pjxduGTxy999999",
"deposit_address": "TKVSaJQDWeKFSEXmA44pjxduGTxy999999",
}
*/
return response
}
const BuyEnergy = async (api_key, target_address, amount, duration_ms, max_price_accepted) => {
const url = `${TRONSAVE_API_URL}/v0/internal-buy-energy`
// 更多信息请参见 https://docs.tronsave.io/buy-energy-on-telegram/using-api-key-to/buy-energy
const body = {
"resource_type": "ENERGY",
"buy_energy_type": "MEDIUM", // 价格以 sun 计,或者使用 "SLOW"|"MEDIUM"|"FAST"
"amount": amount, // 想要购买的资源量
"allow_partial_fill": true,
"target_address": target_address,
"duration_millisec": duration_ms, // 订单持续时间(毫秒)。默认值:259200000(3天)
"only_create_when_fulfilled": false,
"max_price_accepted": max_price_accepted,
"add_order_incomplete": false
}
const data = await fetch(url, {
method: "POST",
headers: {
'apikey': api_key,
"content-type": "application/json",
},
body: JSON.stringify(body)
})
const response = await data.json()
/**
* 示例响应
* @link https://docs.tronsave.io/buy-energy-on-telegram/using-api-key-to/buy-energy
{
"order_id": "651d2306e55c073f6ca0992e",
"requester": "TKVSaJQDWeKFSEXmA44pjxduGTxy999999",
"target": "TKVSaJQDWeKFSEXmA44pjxduGTxy999999",
"resource_amount": 100000,
"resource_type": "ENERGY",
"remain_amount": 0,
"price": 67.5,
"duration": 3600,
"allow_partial_fill": true,
"payout_amount": 6750000,
"fulfilled_percent": 100
}
*/
return response
}
const GetOneOrderDetails = async (api_key, order_id) => {
const url = `${TRONSAVE_API_URL}/v0/orders/${order_id}`
const data = await fetch(url, {
headers: {
'apikey': api_key
}
})
const response = await data.json()
/**
* 示例响应
* @link https://docs.tronsave.io/buy-energy-on-telegram/using-api-key-to/get-internal-account-order-history
{
"id": "651d2306e55c073f6ca0992e",
"requester": "TKVSaJQDWeKFSEXmA44pjxduGTxy999999",
"target": "TKVSaJQDWeKFSEXmA44pjxduGTxy999999",
"resource_amount": 100000,
"resource_type": "ENERGY",
"remain_amount": 0,
"price": 67.5,
"duration": 3600,
"allow_partial_fill": true,
"payout_amount": 6750000,
"fulfilled_percent": 100,
"matched_delegates": [
{
"delegator": "TKVSaJQDWeKFSEXmA44pjxduGTxy888888",
"amount": 100000,
"txid": "transaction_id_1"
}
]
}
*/
return response
}
const CreateOrderByUsingApiKey = async () => {
// 检查可用能量
const order_book = await GetOrderBook(API_KEY, RECEIVER_ADDRESS)
console.log(order_book)
/*
[
{
"price": -1,
"available_energy_amount": 177451
},
{
"price": 30,
"available_energy_amount": 331088
},
{
"price": 35,
"available_energy_amount": 2841948
},
]
*/
// 查看上面的响应,我们有 177k 能量,价格低于 30,有 331k 能量,价格为 30,有 2841k 能量,价格为 35
// 例如,如果要在 3 天内购买 500k 能量,则必须以至少 35 能量的价格下单以完成订单(如果订单持续时间少于 3 天,则价格可能更高)
const need_trx = MAX_PRICE_ACCEPTED * BUY_AMOUNT
// 检查内部余额是否足够购买
const account_info = await GetAccountInfo(API_KEY)
console.log(account_info)
/*
{
"id": "user_id",
"balance": "1000000",
"represent_address": "TKVSaJQDWeKFSEXmA44pjxduGTxy999999",
"deposit_address": "TKVSaJQDWeKFSEXmA44pjxduGTxy999999",
}
*/
const is_balance_enough = Number(account_info.balance) >= need_trx
if (is_balance_enough) {
const buy_energy_order = await BuyEnergy(API_KEY, RECEIVER_ADDRESS, BUY_AMOUNT, DURATION, MAX_PRICE_ACCEPTED)
console.log(buy_energy_order)
/*
{
"order_id": "651d2306e55c073f6ca0992e",
"requester": "TKVSaJQDWeKFSEXmA44pjxduGTxy999999",
"target": "TKVSaJQDWeKFSEXmA44pjxduGTxy999999",
"resource_amount": 100000,
"resource_type": "ENERGY",
"remain_amount": 0,
"price": 67.5,
"duration": 3600,
"allow_partial_fill": true,
"payout_amount": 6750000,
"fulfilled_percent": 100
}
*/
// 购买后等待 3-5 秒,然后检查
if (buy_energy_order.order_id) {
while (true) {
await sleep(3000)
const order_details = await GetOneOrderDetails(API_KEY, buy_energy_order.order_id)
console.log(order_details)
/*
{
"id": "651d2306e55c073f6ca0992e",
"requester": "TKVSaJQDWeKFSEXmA44pjxduGTxy999999",
"target": "TKVSaJQDWeKFSEXmA44pjxduGTxy999999",
"resource_amount": 100000,
"resource_type": "ENERGY",
"remain_amount": 0,
"price": 67.5,
"duration": 3600,
"allow_partial_fill": true,
"payout_amount": 6750000,
"fulfilled_percent": 100,
"matched_delegates": [
{
"delegator": "TKVSaJQDWeKFSEXmA44pjxduGTxy888888",
"amount": 100000,
"txid": "transaction_id_1"
}
]
}
*/
if (order_details && order_details.fulfilled_percent === 100 || order_details.remain_amount === 0) {
console.log(`您的订单已经完成`)
break;
} else {
console.log(`您的订单尚未完成,请等待 3 秒后重新检查`)
}
}
} else {
console.log({ buy_energy_order })
throw new Error(`购买订单失败`)
}
}
}
CreateOrderByUsingApiKey()
Last updated