Чтение из сети
Введение
Это руководство демонстрирует, как читать данные из блокчейна TON. Вы узнаете, как:
- Получать информацию об аккаунте
- Вызывать
get-методы
- Получать данные о транзакциях аккаунта
В итоге вы поймёте, как взаимодействовать с TON API на основе HTTP. В этом руководстве используется TON Center — быстрый и надежный HTTP API для TON.
Настройка окружения
Сначала посетите страницы установки и установите Node.js и npm для вашей ОС. Проверьте, что установка корректна, выполнив следующие команды:
node -v
npm -v
Версии node
и npm
должны быть по меньшей мере v20
и v10
соответственно.
Настройка проекта
Давайте настроим структуру вашего проекта:
- Создайте новый каталог для вашего проекта и перейдите в него.
- Инициализируйте проект Node.js.
- Установите необходимые зависимости.
- Инициализируйте конфигурацию TypeScript.
Выполните эти команды в терминале:
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
Для запуска скрипта на TypeScript, сохранённого как script.ts
в вашей текущей директории, можно выполнить такую команду:
npx ts-node script.ts
Чтение информации об аккаунте
Информация об аккаунте включает составляющие balance
, state
, code
и data
.
balance
: Сумма TON на счету.state
: Состояние может быть одним из следующих:- Nonexist: По адресу ещё нет никаких данных.
- Uninit: У адреса есть баланс, но нет кода смарт-контракта.
- Active: Адрес уже активен, у него есть и код, и баланс.
- Frozen: Адрес заблокирован, поскольку баланс оказался недостаточным для расходов на хранение данных.
code
: Код контракта в «сыром формате».data
: Сериализованные данные контракта, хранящиеся в ячейке.
Состояние аккаунта может быть получено с помощью метода getContractState
.
Реализация
Создайте новый файл 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',
});
const accountAddress = Address.parse('0QD-SuoCHsCL2pIZfE8IAKsjc0aDpDUQAoo-ALHl2mje04A-'); // Replace with any address
// 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();
Запустите этот пример, используя следующую команду:
npx ts-node 1-get-account-state.ts