TRON Developer Hub

The TRON Developer Hub

Welcome to the TRON developer hub. You'll find comprehensive guides and documentation to help you start working with TRON as quickly as possible, as well as support if you get stuck. Let's jump right in!

Get Started    

Integrating Blockchain APIs

Blockchain Data Polling

Tron Grid allows four methods for blockchain data polling:

  • By Contract Address:
curl https://api.trongrid.io/event/contract/TMJnJcHfdP5rhmXVkwRYb1a9A6gS46PUm6

// By default, the above line returns most recent 50 events. If you wish to return the most recent event:

curl https://api.trongrid.io/event/contract/TMJnJcHfdP5rhmXVkwRYb1a9A6gS46PUm6?size=1

// To return the second most recent event, execute:

curl https://api.trongrid.io/event/contract/TMJnJcHfdP5rhmXVkwRYb1a9A6gS46PUm6?size=1&page=2
  • By Contract Address and Event Name:
curl https://api.trongrid.io/event/contract/TMJnJcHfdP5rhmXVkwRYb1a9A6gS46PUm6/Notify

// To retrieve the most recent contract event:

curl https://api.trongrid.io/event/contract/TMJnJcHfdP5rhmXVkwRYb1a9A6gS46PUm6/Notify?size=1

// To retrieve the second most recent event, execute:

curl https://api.trongrid.io/event/contract/TMJnJcHfdP5rhmXVkwRYb1a9A6gS46PUm6/Notify?size=1&page=2
  • By Contract Address, Event Name, and Block Height:
curl https://api.trongrid.io/event/contract/TMJnJcHfdP5rhmXVkwRYb1a9A6gS46PUm6/Notify/88
  • By Transaction ID:
curl https://api.trongrid.io/event/transaction/5c3747ffa94fc87a2188708a9e0758cbd01f000d3d01f6589651921930183f6a

Request Parameters

// The parameter `since` sets a default time stamp of 0, and returns all events after that timestamp:

curl https://api.trongrid.io/event/contract/TMJnJcHfdP5rhmXVkwRYb1a9A6gS46PUm6/Notify?since=1541547888000

// The parameter `size` returns the number of results. Default is 20 results, and maximum is 200:

curl https://api.trongrid.io/event/contract/TMJnJcHfdP5rhmXVkwRYb1a9A6gS46PUm6/Notify?size=10

// The parameter `page` returns the page number. The below example returns latest 11 - 20th results:

curl https://api.trongrid.io/event/contract/TMJnJcHfdP5rhmXVkwRYb1a9A6gS46PUm6/Notify?size=10&page=2

// The parameter `sort` can take values of `block_timestamp`(Ascending order) or `-block_timestamp`(Descending order). Sorts results by block_timestamp. 

Example Contract

pragma solidity ^0.4.23;

contract Fibonacci {

    event Notify(uint input, uint result);

    function fibonacci(uint number) public constant returns(uint result) {
        if (number == 0) return 0;
        else if (number == 1) return 1;
        else return Fibonacci.fibonacci(number - 1) + Fibonacci.fibonacci(number - 2);
    }

    function fibonacciNotify(uint number) public returns(uint result) {
        result = fibonacci(number);
        emit Notify(number, result);
    }
}

Deploy contract using TronWeb, TronBox, or directly using RPC or HTTP call:

deploycontract DataStore [{"constant":false,"inputs":[{"name":"number","type":"uint256"}],"name":"fibonacciNotify","outputs":[{"name":"result","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"number","type":"uint256"}],"name":"fibonacci","outputs":[{"name":"result","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"input","type":"uint256"},{"indexed":false,"name":"result","type":"uint256"}],"name":"Notify","type":"event"}] 608060405234801561001057600080fd5b50610196806100206000396000f30060806040526004361061004c576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633c7fdc701461005157806361047ff414610092575b600080fd5b34801561005d57600080fd5b5061007c600480360381019080803590602001909291905050506100d3565b6040518082815260200191505060405180910390f35b34801561009e57600080fd5b506100bd60048036038101908080359060200190929190505050610124565b6040518082815260200191505060405180910390f35b60006100de82610124565b90507f71e71a8458267085d5ab16980fd5f114d2d37f232479c245d523ce8d23ca40ed8282604051808381526020018281526020019250505060405180910390a1919050565b6000808214156101375760009050610165565b60018214156101495760019050610165565b61015560028303610124565b61016160018403610124565b0190505b9190505600a165627a7a723058201540ed8f82b334522f0e3a11793ba18c1d184536d7b797b30adbba3ca9b7f52c0029 1000000 30 0

After triggering fibonacciNotify and event notify:

triggersmartcontract 417C5D1624B699C425355B99D1C8D188D367FA232D fibonacciNotify(uint256) 7 false 1000000 0000000000000000000000000000000000000000000000000000000000000000

Return Value:

[
  {
    "block_number": 88,
    "block_timestamp": 1534767012000,
    "contract_address": "TMJnJcHfdP5rhmXVkwRYb1a9A6gS46PUm6",
    "event_name": "Notify",
    "result": [
      "7",
      "13"
    ],
    "transaction_id": "5c3747ffa94fc87a2188708a9e0758cbd01f000d3d01f6589651921930183f6a"
  }
]

Return Format:

block_number: block height
block_timestamp: event time stamp
contract_address: contract address
event_name: event name
result: event parameter
transaction_id: transcation id

Blockchain Interaction

Use Tron-Web & Tron-Grid to interact with the Blockchain:

import TronWeb from 'TronWeb'

const HttpProvider = TronWeb.providers.HttpProvider; // Optional provider, can just use a url for the nodes instead

const fullNode = new HttpProvider('https://api.trongrid.io:8090'); // Full node http endpoint
    
const solidityNode = new HttpProvider('https://api.trongrid.io:8091'); // Solidity node http endpoint
    
const eventServer = 'https://api.trongrid.io/'; // Contract events http endpoint
const privateKey = 'da146374a75310b9666e834ee4a...c76217c5a495fff9f0d0';

const tronWeb = new TronWeb(
  fullNode,
  solidityNode,
  eventServer,
  privateKey
);
        
// The majority of the function calls are asynchronus, 
// meaning that they cannot return the result instantly.
// These methods therefore return a promise, which you can await.
const balance = await tronWeb.trx.getBalance(address);
console.log({ balance });

// You can also bind a `then` and `catch` method.
tronWeb.trx.getBalance(address).then(balance => {
console.log({ balance });
}).catch(err => console.error(err));

// If you'd like to use a similar API to Web3, provide a callback function.
tronWeb.trx.getBalance(address, (err, balance) => {
  if(err)
    return console.error(err);
    console.log({ balance });
    });