Buy on Rest API

Step 1: Get estimate TRX

API Method: Post

https://api.tronsave.io/v0/estimate-trx

Request params

FieldPositionTypeRequiredDescription

amount

body

number

true

The number of resources

buy_energy_type

body

string, number

true

"FAST", "MEDIUM", "SLOW" or number

duration_millisec

body

number

true

The duration of the bought resource, time unit is equal to millisecond.

request_address

body

string

false

The address of requester.

target_address

body

string

false

The address of receiver resource.

is_partial

body

boolean

false

Allow the order to be filled partially or not.

Request params example

{
      "amount": 100000,
      "buy_energy_type": "MEDIUM",
      "duration_millisec": 259200000
 }

Responses

FieldTypeRequiredDescription

unit_price

number

true

price in SUN of energy that fit with your buy_energy_type

duration_millisec

number

true

available_energy

number

true

total amount available ernery on Tronsave market that match with unit_price

estimate_trx

number

true

estimate total trx value will pay for buy all available_energy with price is unit_price in duration_millisec

{
    "unit_price": 45,
    "duration_millisec": 259200000,
    "available_energy": 4298470,
     "estimate_trx": 13500000,
}

Step 2: Get Signed Transaction

After Step 1 you will get a estimate_trx is the cost of buy order. Then you will using transactionBuilder to create a transfer transaction with amount transfer equal estimate_trx from buyer's address to fund of Tronsave market:

const dataSendTrx = await tronWeb.transactionBuilder.sendTrx('TRONSAVE_FUND_ADDRESS', estimate_trx, 'BUYER_ADDRESS')
const signed_tx = await tronWeb.trx.sign(dataSendTrx, 'PRIVATE_KEY');
  • change BUYER_ADDRESSis the buyer's public address

  • change PRIVATE_KEY is buyer's private key

  • change TRONSAVE_FUND_ADDRESS is our Tronsave fund address on mainnet

Our Tronsave fund address is

TWZEhq5JuUVvGtutNgnRBATbF8BnHGyn4S

Step 3: Create order

API Method: Post

https://api.tronsave.io/v0/buy-energy

Request params

FieldPositionTypeRequiredDescription

resource_type

body

string

true

"ENERGY"

unit_price

body

number

true

Price unit is equal to sun.

allow_partial_fill

body

boolean

true

Allow the order to be filled partially or not

target_address

body

string

true

Resource receiving address

duration_millisec

body

number

true

The duration of the bought resource, time unit is equal to millisec.

tx_id

body

string

true

Transaction ID

signed_tx

body

SignedTransaction

true

Signed transaction, Note that it is a json object (signed_tx in Step 2)

only_create_when_fulfilled

body

Boolean

false

[true]=> order only create when it can be fulfilled

[false] => order will create even it can not be fulfilled

Default value: false

max_price_accepted

body

Number

false

Only create order when the estimate price less than this value.

add_order_incomplete

body

Boolean

false

[true]=> order only create when there has no same parameters order is not complete in order list

[false] => order will create even there has no same parameters order is not complete in order list

Default value: false

Request params example

{
    "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"]
    },
    "only_create_when_fulfilled":false,
    "max_price_accepted":200,
    "add_order_incomplete":false
}

Responses

{
    "message": "651d2306e55c073f6ca0992e" //order_id
}

Code demo

const dataEstimateTrx = await fetch('https://api.tronsave.io/v0/estimate-trx', {
            method: 'POST',
            headers: {
                "Content-Type": "application/json",
            },
            body: JSON.stringify({
              "amount": 100000,
              "buy_energy_type": "MEDIUM",
              "duration_millisec": 259200000
   })
        })

        const { unit_price, duration_millisec, estimate_trx } = await dataEstimateTrx.json()
        console.log({ unit_price, duration_millisec, estimate_trx });

        const dataSendTrx = await tronWeb.transactionBuilder.sendTrx("TWZEhq5JuUVvGtutNgnRBATbF8BnHGyn4S", estimate_trx, 'BUYER_ADDRESS')
        const signed_tx = await tronWeb.trx.sign(dataSendTrx, 'PRIVATE_KEY');
        console.log(signed_tx);

        const dataCreateOrder = await fetch('https://api.tronsave.io/v0/buy-energy', {
            method: 'POST',
            headers: {
                "Content-Type": "application/json",
            },
            body: JSON.stringify({
                "resource_type": "ENERGY",
                unit_price,
                "allow_partial_fill": true,
                "target_address": "TM6ZeEgpefyGWeMLuzSbfqTGkPv8Z6Jm4X",
                duration_millisec,
                "tx_id": signed_tx.txID,
                signed_tx,
                "only_create_when_fulfilled":false,
                "max_price_accepted":200,
                "add_order_incomplete":false
            })
        })
        console.log(await dataCreateOrder.text());

Last updated