Глоссарий экосистемы TON
Справочник ключевых терминов блокчейна TON -- от архитектуры до смарт-контрактов, DeFi и Telegram Mini Apps. Определения, примеры кода и ссылки на уроки курса.
Архитектура TON
Account State
Account StateСостояние аккаунта в TON, включающее баланс, код контракта, данные контракта и библиотеки. Каждый аккаунт может находиться в одном из состояний: uninit, active, frozen.
Bag of Cells
Bag of Cells (BoC)Формат сериализации данных в TON. BoC -- это компактное двоичное представление дерева ячеек, используемое для хранения и передачи данных, включая блоки, транзакции и сообщения.
// Сериализация BoC в Tact
let cell: Cell = beginCell()
.storeUint(42, 32)
.endCell();
let boc: Slice = cell.asSlice();Bounceable Address
Bounceable AddressФормат адреса TON с флагом bounceable=true. Если контракт по этому адресу не существует или не может обработать сообщение, средства автоматически возвращаются отправителю. Рекомендуется для межконтрактных взаимодействий.
Infinite Sharding
Infinite Sharding ParadigmПарадигма масштабирования TON, при которой каждый аккаунт теоретически представляет собственный шард. Шардчейны автоматически разделяются и объединяются в зависимости от нагрузки, обеспечивая горизонтальное масштабирование.
Masterchain
MasterchainГлавная цепочка TON (workchain_id = -1), хранящая конфигурацию сети, информацию о валидаторах и хеши блоков всех воркчейнов. Обеспечивает консенсус и финальность для всей сети.
Non-Bounceable Address
Non-Bounceable AddressФормат адреса TON с флагом bounceable=false. Используется для первого перевода на новый кошелек, когда контракт ещё не развёрнут. Сообщения на такой адрес не возвращаются при ошибке.
Proof-of-Stake (TON)
Proof-of-Stake (TON)Механизм консенсуса TON, где валидаторы замораживают залог в Toncoin для участия в валидации блоков. Недобросовестные валидаторы теряют часть залога (slashing).
Shardchain
ShardchainПодцепочка воркчейна, обрабатывающая подмножество аккаунтов. Шардчейны автоматически разделяются при высокой нагрузке и объединяются при низкой. Адрес аккаунта определяет принадлежность к шарду.
Slashing
SlashingМеханизм наказания валидаторов за недобросовестное поведение. При обнаружении нарушений (двойная подпись, простой) часть залога валидатора конфискуется через голосование других валидаторов.
TON
The Open NetworkДецентрализованная блокчейн-платформа, изначально разработанная командой Telegram. Отличается многоуровневой архитектурой (masterchain, workchains, shardchains), асинхронной моделью акторов и глубокой интеграцией с Telegram.
Tree of Cells
Tree of CellsОсновная структура данных TON. Каждая ячейка содержит до 1023 бит данных и до 4 ссылок на другие ячейки. Всё в TON -- блоки, транзакции, состояние -- представлено как дерево ячеек.
// Дерево ячеек: корень с двумя дочерними
let child1 = beginCell().storeUint(1, 8).endCell();
let child2 = beginCell().storeUint(2, 8).endCell();
let root = beginCell()
.storeRef(child1)
.storeRef(child2)
.endCell();Validator
ValidatorУзел сети TON, участвующий в валидации блоков. Валидаторы выбираются через Elector Contract на основе размера залога. Они проверяют транзакции, формируют блоки и получают вознаграждение.
Validator Election
Validator ElectionПроцесс выбора валидаторов через смарт-контракт Elector. Кандидаты отправляют залог, и контракт выбирает набор валидаторов на раунд (~18 часов) на основе размера стейка.
Workchain
WorkchainНезависимая цепочка в сети TON со своими правилами обработки транзакций. Basechain (workchain_id = 0) -- основной воркчейн для пользовательских контрактов. TON поддерживает до 2^32 воркчейнов.
Cell
CellБазовая единица данных в TON. Содержит до 1023 бит данных и до 4 ссылок на дочерние ячейки. Ячейки неизменяемы после создания и используют дедупликацию по хешу.
// Создание ячейки в Tact
let c: Cell = beginCell()
.storeUint(0, 32) // 32 бита
.storeAddress(addr) // 267 бит
.endCell();TVM и Исполнение
Builder
BuilderПримитив TVM для последовательной записи данных в новую ячейку. Builder накапливает биты и ссылки, а метод endCell() создаёт из него неизменяемую Cell.
// Builder в Tact
let b = beginCell();
b = b.storeUint(42, 32);
b = b.storeAddress(myAddr);
let cell = b.endCell();Cell Reference
Cell ReferenceСсылка на дочернюю ячейку внутри родительской. Каждая ячейка может содержать до 4 ссылок, формируя направленный ациклический граф (DAG). Используется для хранения вложенных структур данных.
Computational Gas
Computational GasЕдиница измерения вычислительных затрат в TVM. Каждая инструкция потребляет определённое количество газа. Лимит газа ограничивает время выполнения контракта и определяет комиссию за вычисления.
// Проверка доступного газа в Tact
receive(msg: InternalMessage) {
// Убедиться, что хватает газа
require(context().value > ton("0.05"),
"Insufficient gas");
}Continuation
ContinuationОбъект TVM, представляющий отложенное вычисление -- набор инструкций, готовых к выполнению. Используется для реализации циклов, условных переходов и вызовов функций внутри TVM.
External Message
External MessageСообщение, отправленное в блокчейн извне (от кошелька пользователя). Не содержит Toncoin -- контракт-получатель оплачивает обработку из собственного баланса через accept_message().
Forwarding Fee
Forwarding FeeКомиссия за доставку сообщения между контрактами. Зависит от размера сообщения (количество ячеек и бит). Оплачивается из value сообщения при его маршрутизации через сеть.
Internal Message
Internal MessageСообщение между двумя контрактами внутри блокчейна TON. Может переносить Toncoin и произвольные данные. Основной механизм взаимодействия между контрактами в асинхронной модели акторов.
// Отправка internal message в Tact
send(SendParameters{
to: recipient,
value: ton("0.1"),
body: "Hello".asComment()
});Slice
SliceПримитив TVM для последовательного чтения данных из ячейки. Slice -- это курсор, перемещающийся по битам и ссылкам ячейки. После создания из Cell можно считывать целые числа, адреса и ссылки.
// Чтение Slice в Tact
let s: Slice = cell.asSlice();
let value: Int = s.loadUint(32);
let addr: Address = s.loadAddress();Stack Machine
Stack MachineАрхитектура TVM, основанная на стеке. Операнды помещаются на стек, инструкции извлекают их и помещают результат обратно. TVM использует стек из 256-битных целых чисел, ячеек, слайсов и continuation.
Storage Fee
Storage FeeКомиссия за хранение данных контракта в блокчейне. Начисляется за каждый бит и ячейку в состоянии контракта за единицу времени. Если баланс контракта недостаточен, аккаунт замораживается.
TVM
TON Virtual MachineВиртуальная машина TON, выполняющая код смарт-контрактов. Основана на стековой архитектуре, оперирует 257-битными целыми числами и ячейками. Каждый контракт исполняется изолированно в рамках модели акторов.
Actor Model
Actor ModelМодель параллельных вычислений, принятая в TON. Каждый смарт-контракт -- независимый актор с собственным состоянием, общающийся с другими только через асинхронные сообщения. Гарантирует отсутствие разделяемого состояния.
Смарт-контракты
Blueprint
BlueprintФреймворк для разработки смарт-контрактов TON. Предоставляет инструменты для компиляции, тестирования и деплоя контрактов. Работает с Tact и FunC проектами.
# Создание проекта Blueprint
npm create ton@latest my-project
# Компиляция
npx blueprint build
# Тестирование
npx blueprint testBounce
Bounce (Bouncing)Механизм автоматического возврата сообщения отправителю при ошибке обработки. Если контракт выбросил исключение, сообщение с оставшимися средствами отправляется обратно. Критически важен для безопасности межконтрактных взаимодействий.
Contract Code
Contract CodeСкомпилированный байт-код смарт-контракта, хранящийся в ячейке. Определяет логику обработки входящих сообщений. Может быть обновлён через механизм code upgrade.
Contract Data
Contract DataПерсистентное хранилище смарт-контракта, представленное в виде ячейки. Хранит состояние контракта между транзакциями. В Tact данные описываются как поля контракта.
Deployment
DeploymentПроцесс размещения смарт-контракта в блокчейне. В TON деплой выполняется через отправку external message со StateInit (код + данные) на вычисленный адрес контракта.
// Деплой через Blueprint
npx blueprint run deployMyContract
// Или программно:
await myContract.sendDeploy(
provider.sender(),
toNano('0.05')
);FunC
FunCНизкоуровневый язык программирования для смарт-контрактов TON. Предоставляет прямой доступ к примитивам TVM. Используется в legacy-контрактах и для чтения существующего кода. Для новой разработки рекомендуется Tact или Tolk.
Get-method
Get-methodФункция контракта, вызываемая offchain для чтения данных без создания транзакции. Не изменяет состояние контракта и не требует комиссий. В Tact объявляется ключевым словом get fun.
// Get-method в Tact
get fun balance(): Int {
return myBalance();
}
// Вызов offchain
const result = await contract.getBalance();Multisig Wallet
Multisig WalletКошелёк с мультиподписью, требующий подтверждения нескольких владельцев для выполнения транзакции. Типичная схема: k-of-n, где k подписей из n необходимы.
Receiver
ReceiverОбработчик входящих сообщений в Tact. Объявляется через receive() и определяет логику обработки конкретного типа сообщения. Каждый контракт может иметь несколько receiver для разных типов сообщений.
// Receiver в Tact
receive(msg: Increment) {
self.counter += msg.amount;
}
receive("reset") {
self.counter = 0;
}Sandbox
SandboxСреда локального тестирования смарт-контрактов TON от Blueprint. Эмулирует блокчейн, позволяя выполнять транзакции, проверять газ и тестировать межконтрактные взаимодействия без реальной сети.
// Тест в Sandbox
const blockchain = await Blockchain.create();
const contract = blockchain.openContract(
MyContract.createFromConfig({...})
);
const result = await contract.sendIncrement(
deployer.getSender(), toNano('0.05'), 1n
);Send Mode
Send ModeФлаги, управляющие отправкой сообщений в TON. Определяют, сколько Toncoin приложить, как обработать ошибки и как распределить баланс. Основные режимы: 0 (обычный), 64 (весь входящий value), 128 (весь баланс).
// Send Mode флаги в Tact
send(SendParameters{
to: addr,
value: 0,
mode: SendRemainingValue // mode 64
});StateInit
StateInitНачальное состояние контракта при деплое, содержащее код и данные. Адрес контракта в TON вычисляется как hash(StateInit), поэтому он известен до деплоя. StateInit прикрепляется к первому сообщению на адрес.
Tact
TactВысокоуровневый язык программирования для смарт-контрактов TON. Предоставляет строгую типизацию, встроенную сериализацию и удобный синтаксис для работы с сообщениями. Рекомендуемый язык для новой разработки.
// Простой контракт на Tact
contract Counter {
val: Int as uint32 = 0;
receive("increment") {
self.val += 1;
}
get fun value(): Int {
return self.val;
}
}Tolk
TolkСовременная замена FunC с улучшенным синтаксисом, сохраняющая полный доступ к примитивам TVM. Использует привычный синтаксис с фигурными скобками вместо FunC-специфичных конструкций.
// Tolk: функция get-метода
fun getBalance(): int {
return getMyOriginalBalance();
}accept_message
accept_messageФункция TVM, позволяющая контракту принять external message и оплатить газ из собственного баланса. Без вызова accept_message обработка external message будет отклонена.
Стандарты токенов
Getgems
GetgemsКрупнейший NFT-маркетплейс в экосистеме TON. Поддерживает листинг, продажу и аукционы NFT и SBT. Использует стандарт TEP-62 для коллекций.
Jetton 2.0
Jetton 2.0Обновлённый стандарт взаимозаменяемых токенов TON (TEP-74, сентябрь 2025). Двухконтрактная архитектура: Jetton Master хранит метаданные, Jetton Wallet -- баланс каждого владельца. Обеспечивает шардируемость через распределённые кошельки.
Jetton Master
Jetton MasterЦентральный контракт токена Jetton, хранящий метаданные (имя, символ, описание) и общий supply. Отвечает за минтинг новых токенов и предоставляет информацию о токене через get-методы.
// Get-метод Jetton Master
get fun get_jetton_data(): JettonData {
return JettonData{
totalSupply: self.totalSupply,
mintable: self.mintable,
owner: self.owner,
content: self.content,
walletCode: self.walletCode
};
}Jetton Wallet
Jetton WalletИндивидуальный контракт-кошелёк для хранения баланса Jetton конкретного владельца. Каждый пользователь имеет отдельный Jetton Wallet для каждого токена. Адрес вычисляется детерминированно из адреса владельца и Jetton Master.
NFT Collection
NFT CollectionКонтракт-коллекция NFT в TON (TEP-62). Хранит метаданные коллекции и отвечает за минтинг отдельных NFT Item. Каждый элемент -- отдельный контракт со ссылкой на коллекцию.
NFT Item
NFT ItemИндивидуальный контракт невзаимозаменяемого токена в TON. Хранит индекс в коллекции, адрес владельца и метаданные. Передача происходит через change_owner сообщение.
Opcode
Opcode32-битный идентификатор типа сообщения в TON-контрактах. Первые 32 бита тела сообщения определяют, какой обработчик вызвать. Стандартные opcodes: 0x7362d09c (transfer), 0x178d4519 (internal_transfer).
// Opcode в Tact определяется автоматически
message(0x7362d09c) TokenTransfer {
queryId: Int as uint64;
amount: Int as coins;
destination: Address;
}Royalty
RoyaltyПроцент от вторичных продаж NFT, выплачиваемый создателю коллекции. В TON роялти определяются на уровне коллекции через стандарт TEP-66 и применяются маркетплейсами.
SBT
Soulbound TokenНепередаваемый токен (TEP-85), привязанный к конкретному адресу. Используется для сертификатов, достижений и удостоверений. Отличается от обычного NFT запретом на передачу владения.
TEP-62
TEP-62TON Enhancement Proposal, определяющий стандарт NFT-коллекций и отдельных NFT Item. Описывает интерфейсы get-методов, формат метаданных и протокол передачи владения.
TEP-74
TEP-74TON Enhancement Proposal, определяющий стандарт Jetton (взаимозаменяемых токенов). Описывает архитектуру Master-Wallet, протокол передачи токенов и обязательные get-методы.
TEP-85
TEP-85TON Enhancement Proposal, определяющий стандарт Soulbound Token. Расширяет TEP-62 (NFT), добавляя запрет на передачу, механизм отзыва и подтверждения привязки к адресу.
DeFi на TON
AMM
Automated Market MakerАвтоматический маркет-мейкер -- алгоритм ценообразования на основе математической формулы (обычно x*y=k). В TON AMM реализован в DEX-протоколах STONfi и DeDust для обмена Jetton-токенов.
DEX
Decentralized ExchangeДецентрализованная биржа для обмена токенов без посредников. В TON основные DEX -- STONfi и DeDust -- используют AMM с пулами ликвидности и асинхронный обмен через цепочку сообщений.
DeDust
DeDustDEX-протокол на TON с архитектурой Vault-Pool-Factory. Поддерживает volatile и stable пулы. Vault контракты изолируют активы, обеспечивая безопасность при обменах.
EVAA
EVAA ProtocolПротокол лендинга и заимствования на TON. Позволяет предоставлять активы в кредитные пулы для получения процентов и занимать под залог. Использует динамические процентные ставки.
LP Token
LP Token (Liquidity Provider Token)Токен, подтверждающий долю провайдера в пуле ликвидности. Выпускается при добавлении ликвидности и сжигается при выводе. Представляет пропорциональную долю обоих активов пула.
Liquid Staking
Liquid StakingМеханизм стейкинга, при котором пользователь получает ликвидный токен-расписку (tsTON, stTON) в обмен на застейканные Toncoin. Позволяет использовать застейканные активы в DeFi-протоколах.
Liquidity Pool
Liquidity PoolПул ликвидности -- смарт-контракт, хранящий пару активов для обменов. Пользователи вносят оба актива в равной стоимости и получают LP-токены. Цена определяется соотношением активов в пуле.
Nominator Pool
Nominator PoolСмарт-контракт для коллективного стейкинга в TON. Позволяет нескольким номинаторам объединить средства для участия в валидации, делегируя техническую работу оператору пула.
Pool Contract
Pool ContractКонтракт пула ликвидности в DEX-протоколах TON. Хранит резервы двух активов, выполняет расчёт обменного курса по формуле AMM и выпускает LP-токены.
Router Contract
Router ContractКонтракт-маршрутизатор в DEX STONfi, направляющий запросы на обмен к соответствующим пулам. Принимает Jetton от пользователя и организует цепочку сообщений для выполнения свопа.
STONfi
STONfiКрупнейший DEX-протокол на TON с архитектурой Router-Pool. Поддерживает обмен Jetton-токенов через AMM пулы ликвидности. Использует цепочку из 5-7 внутренних сообщений для выполнения свопа.
Vault Contract
Vault ContractКонтракт-хранилище в протоколе DeDust, изолирующий активы от логики обмена. Каждый тип актива имеет отдельный Vault, что повышает безопасность при обменах.
stTON
stTONТокен ликвидного стейкинга от протокола Bemo. Представляет застейканные Toncoin с накопленным вознаграждением. Курс stTON к TON растёт со временем.
tsTON
tsTONТокен ликвидного стейкинга от протокола Tonstakers. Представляет застейканные Toncoin, которые можно использовать в DeFi-протоколах, продолжая получать стейкинг-вознаграждения.
TON Connect
Bridge Protocol
Bridge ProtocolПротокол моста в TON Connect, обеспечивающий шифрованную связь между dApp и кошельком. Сообщения шифруются X25519 и передаются через SSE-соединение или HTTP-bridge сервер.
SSE
Server-Sent EventsТехнология однонаправленной передачи данных от сервера к клиенту. В TON Connect используется для доставки сообщений от кошелька к dApp через bridge-сервер в реальном времени.
Session (TON Connect)
Session (TON Connect)Сессия TON Connect -- зашифрованный канал связи между dApp и кошельком. Создаётся при подключении, сохраняется между перезагрузками. Идентифицируется парой X25519 ключей.
TON Connect 2.0
TON Connect 2.0Протокол подключения кошельков к dApp в экосистеме TON. Обеспечивает безопасную аутентификацию, подписание транзакций и обмен данными между приложением и кошельком через зашифрованный мост.
TonConnectButton
TonConnectButtonReact-компонент из @tonconnect/ui-react для подключения кошелька. Отображает кнопку подключения, QR-код и информацию о подключённом кошельке. Основной UI-элемент интеграции TON Connect.
// TonConnectButton в React
import { TonConnectButton } from
'@tonconnect/ui-react';
function App() {
return <TonConnectButton />;
}X25519
X25519Алгоритм обмена ключами на эллиптической кривой Curve25519. В TON Connect используется для создания общего секрета между dApp и кошельком, на основе которого шифруются все сообщения сессии.
manifest.json (TON Connect)
manifest.json (TON Connect)Файл манифеста dApp для TON Connect. Содержит имя приложения, URL, иконку. Кошелёк отображает эту информацию пользователю при запросе на подключение для идентификации dApp.
ton_proof
ton_proofМеханизм аутентификации в TON Connect, подтверждающий владение кошельком. Кошелёк подписывает challenge от dApp приватным ключом. Бэкенд верифицирует подпись для авторизации пользователя.
Telegram Mini Apps
BackButton
BackButtonКнопка навигации назад в интерфейсе Telegram Mini App. Управляется через WebApp.BackButton API. Позволяет реализовать внутреннюю навигацию приложения с интеграцией в UI Telegram.
HMAC-SHA256 Validation
HMAC-SHA256 ValidationМетод проверки подлинности initData от Telegram. Бэкенд вычисляет HMAC-SHA256 от строки параметров initData с ключом, производным от токена бота. Совпадение хешей подтверждает, что данные не подделаны.
// Проверка initData на сервере
const secret = crypto
.createHmac('sha256', 'WebAppData')
.update(BOT_TOKEN)
.digest();
const hash = crypto
.createHmac('sha256', secret)
.update(dataCheckString)
.digest('hex');MainButton
MainButtonОсновная кнопка действия внизу экрана Telegram Mini App. Настраивается через WebApp.MainButton API -- текст, цвет, прогресс. Используется для ключевых действий: оплата, подтверждение, отправка.
// MainButton в Mini App
Telegram.WebApp.MainButton
.setText('Оплатить')
.show()
.onClick(() => processPayment());Telegram Mini App
Telegram Mini App (TMA)Веб-приложение, работающее внутри Telegram через WebView. Имеет доступ к Telegram API, данным пользователя и нативным UI-элементам. Может интегрироваться с TON для платежей через TON Connect.
Telegram Stars
Telegram Stars (XTR)Внутренняя валюта Telegram для покупок в Mini Apps и ботах. Позволяет принимать платежи без внешних платёжных систем. Курс фиксирован Telegram, вывод через Fragment.
WebApp API
WebApp APIJavaScript API, предоставляемый Telegram через объект window.Telegram.WebApp. Позволяет Mini App взаимодействовать с клиентом Telegram: получать данные пользователя, управлять UI, открывать ссылки.
initData
initDataСтрока с данными инициализации Mini App, передаваемая Telegram. Содержит информацию о пользователе, чате, времени запуска и хеш для верификации. Используется для аутентификации пользователя на бэкенде.
pre_checkout_query
pre_checkout_queryСобытие Bot API, отправляемое перед завершением платежа Stars. Бот должен ответить answerPreCheckoutQuery в течение 10 секунд для подтверждения или отклонения платежа.
sendInvoice
sendInvoiceМетод Bot API для отправки счёта на оплату в Stars. Создаёт кнопку оплаты в чате или Mini App. Принимает описание товара, сумму в Stars и payload для идентификации покупки.
web_app_data
web_app_dataМетод отправки данных из Mini App в бот через Telegram.WebApp.sendData(). Данные поступают как web_app_data в сообщении бота. Ограничение: работает только при открытии через keyboard button.
Сервисы TON
.ton Domain
.ton DomainДоменное имя в системе TON DNS, привязанное к адресу кошелька или сайта. Приобретается через аукцион на DNS-маркетплейсе. Хранится как NFT и может быть передано другому владельцу.
ADNL
Abstract Datagram Network LayerНизкоуровневый сетевой протокол TON для P2P-коммуникации. Обеспечивает шифрование, маршрутизацию и NAT-обход. Используется TON Proxy, TON Storage и узлами сети для безопасного обмена данными.
Bag ID
Bag IDУникальный идентификатор набора файлов в TON Storage, вычисляемый как хеш merkle-дерева содержимого. Используется для адресации и верификации данных в децентрализованном хранилище.
DHT
Distributed Hash TableРаспределённая хеш-таблица TON на основе протокола Kademlia. Хранит соответствия ADNL-адресов и IP-адресов узлов, маршрутную информацию для TON Storage и данные TON DNS.
DNS Resolver
DNS ResolverСмарт-контракт в TON DNS, отвечающий за разрешение доменных имён. Корневой resolver хранится в конфигурации сети. Поддоменные resolver-ы могут быть настроены владельцами доменов.
RLDP
Reliable Large Datagram ProtocolПротокол надёжной передачи больших данных поверх ADNL. Обеспечивает гарантированную доставку, разбиение на пакеты и сборку. Используется TON Storage и TON Sites для передачи файлов.
TEP-81
TEP-81TON Enhancement Proposal, определяющий стандарт TON DNS. Описывает формат DNS-записей в смарт-контрактах, типы записей (wallet, site, storage) и процесс разрешения доменных имён.
TON DNS
TON DNSДецентрализованная система доменных имён TON, хранящая DNS-записи в смарт-контрактах. Позволяет привязывать .ton домены к адресам кошельков, сайтов и хранилищ. Домены являются NFT.
TON Proxy
TON ProxyДецентрализованный прокси-сервис TON на основе ADNL. Обеспечивает анонимный доступ к TON Sites и обычному интернету. Работает через сеть промежуточных узлов с шифрованием трафика.
TON Sites
TON SitesДецентрализованные веб-сайты, доступные через TON Proxy по ADNL-адресу или .ton домену. Не требуют традиционного хостинга и DNS. Контент передаётся через протокол RLDP.
TON Storage
TON StorageДецентрализованное файловое хранилище TON, работающее по принципу BitTorrent. Файлы разбиваются на части, распределяются по узлам сети. Адресация по Bag ID (хеш содержимого).
Безопасность
Audit Checklist
Audit ChecklistКонтрольный список проверок безопасности для смарт-контрактов TON. Включает проверки: обработка bounced-сообщений, валидация газа, целочисленные переполнения, гонки состояний, контроль доступа.
Bounced Message Handling
Bounced Message HandlingОбработка возвращённых сообщений в смарт-контрактах TON. Если отправленное сообщение вызвало ошибку, контракт-отправитель получает bounced-сообщение и должен откатить изменения состояния.
// Обработка bounced в Tact
bounced(msg: bounced<TokenTransfer>) {
// Откатить баланс
self.balance += msg.amount;
}Code Upgrade
Code UpgradeМеханизм обновления кода смарт-контракта в TON через set_code(). Позволяет исправлять баги и добавлять функциональность после деплоя. Требует строгого контроля доступа -- только owner должен иметь право на обновление.
Excess Return
Excess Return (0xd53276db)Паттерн возврата неиспользованного газа отправителю через сообщение с opcode 0xd53276db. Предотвращает накопление избыточных средств в промежуточных контрактах при цепочках сообщений.
// Возврат excess в Tact
send(SendParameters{
to: sender(),
value: 0,
mode: SendRemainingValue,
body: Excesses{queryId: msg.queryId}
.toCell()
});Gas Validation
Gas ValidationПроверка достаточности газа перед выполнением операций в контракте. Без валидации контракт может выполнить часть логики и остановиться, оставив состояние в некорректном промежуточном виде.
// Валидация газа в Tact
receive(msg: Transfer) {
require(context().value >= ton("0.05"),
"Insufficient gas");
// ... логика перевода
}Integer Overflow
Integer OverflowОшибка переполнения целого числа, когда результат арифметической операции выходит за границы типа. TVM использует 257-битные целые, но при сериализации в ячейки диапазон ограничивается (uint32, coins и др.).
Replay Attack
Replay AttackАтака повторного воспроизведения, при которой злоумышленник повторно отправляет перехваченное сообщение. В TON защита реализуется через seqno (порядковый номер) в кошельках и проверку query_id в контрактах.
TOCTOU
Time-of-Check to Time-of-UseУязвимость гонки состояний: между проверкой условия и его использованием состояние может измениться. В TON особенно актуально из-за асинхронности -- между отправкой и доставкой сообщения состояние контракта-получателя может обновиться.
msg_value
msg_valueКоличество Toncoin, приложенное к входящему сообщению. Используется для оплаты газа вычислений и пересылки дочерних сообщений. Корректная проверка msg_value -- ключевой паттерн безопасности.
seqno
seqno (Sequence Number)Порядковый номер транзакции кошелька TON. Инкрементируется после каждого external message. Защищает от replay-атак: сообщение с уже использованным seqno отклоняется.
Инструменты и инфраструктура
Faucet
FaucetСервис раздачи тестовых Toncoin для разработки в testnet. Позволяет бесплатно получить токены для тестирования деплоя и взаимодействия с контрактами. Доступен через @testgiver_ton_bot в Telegram.
TON Web IDE
TON Web IDEБраузерная среда разработки для смарт-контрактов TON. Поддерживает написание, компиляцию и деплой контрактов на Tact и FunC прямо в браузере без установки инструментов.
Testnet
TestnetТестовая сеть TON для разработки и отладки. Полностью копирует mainnet, но использует тестовые токены без реальной стоимости. Адреса testnet маркируются флагом testOnly.
Tonkeeper
TonkeeperПопулярный криптокошелёк для экосистемы TON. Поддерживает TON Connect 2.0, отправку транзакций, просмотр NFT и взаимодействие с dApps. Доступен как мобильное приложение и расширение браузера.
Tonviewer
TonviewerОбозреватель блокчейна TON (block explorer). Позволяет просматривать транзакции, балансы аккаунтов, код контрактов и трассировку сообщений. Незаменимый инструмент для отладки контрактов.
toncenter API
toncenter APIHTTP API для взаимодействия с блокчейном TON. Предоставляет методы для отправки транзакций, запроса состояния аккаунтов, вызова get-методов контрактов. Используется dApps и ботами для программного доступа к сети.