Reading from network
Introduction
This guide will walk you through reading data from TON Blockchain. You'll learn how to:
- Fetch account information
- Call
get methods
- Retrieve account transactions
By the end, you'll understand how to interact with TON HTTP-based APIs. In this guide, TON Center is used—a fast and reliable HTTP API for TON.
Set up environment
First, visit the installation pages and install Node.js and npm for your OS. Check that the installation is correct by running the following commands:
node -v
npm -v
Versions of node
and npm
should be at least v20
and v10
correspondingly.
Project setup
Let’s set up your project structure:
- Create a new directory for your project and navigate into it.
- Initialize a Node.js project.
- Install the required dependencies.
- Initialize TypeScript configuration.
Run these commands in your terminal:
mkdir reading-from-ton && cd reading-from-ton
npm init -y
npm install typescript ts-node @ton/ton @ton/core @ton/crypto
npx tsc --init
To run a TypeScript script saved as script.ts
in your current directory, run:
npx ts-node script.ts
Reading account information
Account information includes the balance
, state
, code
, and data
.
balance
: The amount of TON the account holds.state
: Can be one of:- Nonexist: The address has no data.
- Uninit: The address has a balance but no smart contract code.
- Active: The address is live with code and balance.
- Frozen: The address is locked due to insufficient balance for storage costs.
code
: The contract's code in raw format.data
: Serialized contract data stored in a Cell.
Account state may be obtained using the getContractState
method.
Account's address
To get account information, you need the account's address. In TON, we can use a user-friendly address — a base64url-encoded string that represents a blockchain account in a human-readable and error-resistant format.
User-friendly addresses also include special flags that define how the address should be used. For example, some addresses are valid only on Testnet, while others work on any network. These flags are encoded in the first few bits and influence the first letter of the address:
- Addresses beginning with E or U are used on Mainnet
- Addresses beginning with k or 0 are used for Testnet
Mainnet example:
EQDKbjIcfM6ezt8KjKJJLshZJJSqX7XOA4ff-W72r5gqPrHF
UQDKbjIcfM6ezt8KjKJJLshZJJSqX7XOA4ff-W72r5gqPuwA
Testnet example:
kQDKbjIcfM6ezt8KjKJJLshZJJSqX7XOA4ff-W72r5gqPgpP
0QDKbjIcfM6ezt8KjKJJLshZJJSqX7XOA4ff-W72r5gqPleK
Your address in the following examples
In the given code snippets, feel free to change the example address to your test wallet address in this line.
// Replace with any address
const accountAddress = Address.parse('0QD-SuoCHsCL2pIZfE8IAKsjc0aDpDUQAoo-ALHl2mje04A-');
Implementation
Create a new file 1-get-account-state.ts
:
import { Address, TonClient } from "@ton/ton";
async function main() {
// Initializaing TON HTTP API Client
const tonClient = new TonClient({
endpoint: 'https://testnet.toncenter.com/api/v2/jsonRPC',
});
// Replace with any address
const accountAddress = Address.parse('0QD-SuoCHsCL2pIZfE8IAKsjc0aDpDUQAoo-ALHl2mje04A-');
// Calling method on http api
const state = await tonClient.getContractState(accountAddress);
console.log('State: ', state.state);
console.log('Balance: ', state.balance);
console.log('Data: ', state.data?.toString('hex'));
console.log('Code: ', state.code?.toString('hex'));
}
main();
Run this example using the following command:
npx ts-node 1-get-account-state.ts
Expected result
State: active
Balance: 3722511000883n
Data: b5ee9c7241010101002...fd1e976824402aa67b98
Code: b5ee9c7241021401000...c9ed54696225e5
Note: the balance may differ from the example because anyone can send funds to the wallet, so the amount is dynamic and not fixed.
Calling get methods
Get methods are special functions in smart contracts that allow you to conveniently observe the current state of a smart contract, returning only the specific data you need—without having to read the entire account state, as we did in the first example. While reading the whole account provides you with all the information, including balance, code, data, and more, get methods allow you to query precise pieces of information, making the process more efficient and developer-friendly.
Their execution:
- Do not charge any fees from contracts.
- Cannot modify the smart contract’s storage or state.
The result of calling a get method via the TON HTTP API is returned in a stack format, which can be deserialised step-by-step using functions like readNumber()
or others, depending on the expected data type.