Learning Platform
Troubleshooting
Глоссарий

Глоссарий — System Design для TON-разработчика

Справочник ключевых терминов курса System Design для TON-разработчика.

8 категорий · 40 терминов

Основы System Design

System Design для блокчейна

Blockchain System Design
Термин

Дисциплина проектирования распределённых систем на базе блокчейна с учётом специфических ограничений: детерминированное исполнение, неизменяемость данных, экономические стимулы и ограниченные вычислительные ресурсы. В отличие от классического System Design, здесь каждое решение имеет прямые экономические последствия в виде комиссий.

Пример:
// Классический подход: масштабируем сервер вертикально
// Блокчейн SD: масштабируем через шардинг контрактов

// Вместо одного контракта-монолита:
contract MonolithDEX { /* всё в одном */ }

// Проектируем систему контрактов:
contract Router { /* маршрутизация */ }
contract Pool { /* один пул ликвидности */ }
contract LPWallet { /* кошелёк LP-токенов */ }
Подробнее в уроках:

CAP-теорема в TON

CAP Theorem in TON
Термин

Применение теоремы CAP к архитектуре TON. TON выбирает Availability и Partition tolerance за счёт eventual consistency между шардами. Это означает, что межшардовые сообщения обрабатываются асинхронно, и контракт не может мгновенно получить актуальное состояние из другого шарда.

Пример:
// TON выбирает: AP (доступность + устойчивость к разделению)
// Следствие: eventual consistency между шардами

// Нельзя:
let balance = otherContract.getBalance(); // синхронный вызов

// Нужно проектировать асинхронно:
send(SendParameters{
    to: otherContract,
    body: RequestBalance{}.toCell()
});
// Ответ придёт отдельным сообщением
Подробнее в уроках:

Анализ компромиссов

Tradeoff Analysis
Термин

Метод систематической оценки архитектурных решений через выявление конкурирующих требований. В контексте TON ключевые оси компромиссов: газ vs UX, децентрализация vs производительность, гибкость vs безопасность. Каждое проектное решение оценивается по влиянию на стоимость, скорость и надёжность.

Пример:
// Компромисс: хранение on-chain vs off-chain

// On-chain: дорого, но верифицируемо
contract OnChainNFT {
    metadata: map<Int, Cell>; // ~0.01 TON за ячейку в год
}

// Off-chain: дёшево, но требует доверия к серверу
contract OffChainNFT {
    contentUrl: String; // только ссылка on-chain
}
Подробнее в уроках:

Паттерны проектирования

Design Patterns
Термин

Повторяемые архитектурные решения для типовых задач в TON System Design. Включают паттерны декомпозиции контрактов (Router-Pool, Master-Child), паттерны обмена сообщениями (Request-Response, Notification), паттерны масштабирования (Sharded Collection, Factory). Отличаются от классических GoF-паттернов адаптацией к асинхронной actor-модели.

Пример:
// Паттерн Master-Child (Factory)
// Master создаёт дочерние контракты с предсказуемыми адресами

contract JettonMaster {
    fun mint(to: Address, amount: Int) {
        let init = initOf JettonWallet(myAddress(), to);
        send(SendParameters{
            to: contractAddress(init),
            value: ton("0.05"),
            body: InternalTransfer{amount}.toCell(),
            code: init.code,
            data: init.data
        });
    }
}
Подробнее в уроках:

Фреймворк проектирования

Design Framework
Термин

Структурированный подход к проектированию систем на TON, состоящий из этапов: сбор требований, выбор архитектуры контрактов, проектирование потоков сообщений, анализ газовых затрат, оценка безопасности и планирование развёртывания. Фреймворк обеспечивает повторяемость процесса и снижает вероятность пропуска критических аспектов.

Пример:
// Этапы фреймворка для проектирования DEX:
// 1. Требования: swap, add/remove liquidity, fees
// 2. Архитектура: Router → Pool → LP Wallet
// 3. Потоки: пользователь → Router → Pool → Wallet
// 4. Газ: оценка цепочки из 3-5 сообщений
// 5. Безопасность: проверка bounce, replay, overflow
// 6. Деплой: порядок развёртывания контрактов
Подробнее в уроках:

Архитектура TON (System Design)

Многослойная архитектура

Multi-Layer Architecture Design
Термин

Архитектурный подход TON, разделяющий сеть на слои с различными зонами ответственности: masterchain (координация и консенсус), workchains (исполнение контрактов), shardchains (параллельная обработка подмножеств аккаунтов). При проектировании системы необходимо учитывать стоимость и задержки межслойного взаимодействия.

Пример:
// Влияние многослойности на проектирование:

// Слой 1: Masterchain — конфигурация, валидаторы
// → Не деплоить пользовательские контракты

// Слой 2: Basechain (workchain 0) — смарт-контракты
// → Основная среда для DeFi, NFT, токенов

// Слой 3: Shardchains — автоматическое разделение
// → Проектировать контракты sharding-friendly
Подробнее в уроках:

Infinite Sharding (проектное решение)

Infinite Sharding (Design Perspective)
Термин

Проектное решение TON, при котором каждый аккаунт рассматривается как отдельный шард. С точки зрения System Design это означает, что контракты должны быть самодостаточными: не полагаться на синхронный доступ к данным других контрактов и минимизировать межшардовые зависимости. Это фундаментально отличает проектирование в TON от Ethereum.

Пример:
// Ethereum: контракты в одном шарде читают друг друга
uint price = oracle.getPrice(); // синхронно

// TON: каждый контракт — свой шард
// Нельзя синхронно прочитать состояние другого контракта
// Решение: асинхронный запрос-ответ
send(RequestPrice{pair: "TON/USD"}.toCell());
// Обработка в receive(PriceResponse)
Подробнее в уроках:

Координация через Masterchain

Masterchain Coordination
Термин

Архитектурный паттерн, при котором masterchain обеспечивает глобальную согласованность распределённой системы TON. Masterchain хранит хеши блоков всех шардчейнов, что позволяет верифицировать состояние любого шарда. При проектировании критически важных систем это гарантирует финальность транзакций после включения в masterchain блок.

Пример:
// Финальность транзакции:
// 1. Транзакция попадает в блок шардчейна (~2-5 сек)
// 2. Хеш шардчейн-блока включается в masterchain
// 3. После этого транзакция финальна

// Для проектирования: ожидание финальности
// составляет ~6 секунд (1-2 masterchain-блока)
// Учитывать в UX платёжных систем
Подробнее в уроках:

Кросс-чейн сравнительный анализ

Cross-Chain Comparison Patterns
Термин

Метод анализа архитектурных решений TON через сравнение с Ethereum и Solana. Ключевые различия: синхронная vs асинхронная модель исполнения, единое vs шардированное состояние, EVM vs TVM. Позволяет переносить проверенные паттерны из других экосистем с адаптацией к особенностям TON.

Пример:
// Сравнение подходов к DEX:

// Ethereum (синхронная модель):
// Uniswap: Router вызывает Pool.swap() синхронно
// Всё в одной транзакции, атомарно

// TON (асинхронная модель):
// DeDust: Router отправляет сообщение Pool
// Pool обрабатывает и отправляет результат
// Цепочка из 3-5 асинхронных сообщений
Подробнее в уроках:

Архитектурные антипаттерны

Architectural Anti-Patterns
Термин

Типичные ошибки проектирования в TON: монолитный контракт с множеством ответственностей, предположение о синхронности исполнения, игнорирование bounce-механизма, хранение больших объёмов данных в одном контракте. Распознавание антипаттернов позволяет избежать дорогостоящих переделок.

Пример:
// Антипаттерн: God Contract
contract BadDEX {
    pools: map<Address, PoolData>;
    balances: map<Address, Int>;
    orders: map<Int, Order>;
    // Всё в одном контракте → не масштабируется
}

// Правильно: декомпозиция
contract Router { /* маршрутизация */ }
contract Pool { /* один пул */ }
contract Vault { /* хранение средств */ }
Подробнее в уроках:

Actor Model и Messaging

Actor Model как паттерн проектирования

Actor Model as Design Pattern
Термин

Модель вычислений, в которой каждый контракт TON является независимым актором с собственным состоянием, обрабатывающим сообщения последовательно. С точки зрения System Design это означает отсутствие shared state между контрактами и необходимость проектирования всех взаимодействий как обмена асинхронными сообщениями.

Пример:
// Каждый контракт — актор
// Принципы:
// 1. Своё изолированное состояние
// 2. Обрабатывает сообщения по одному
// 3. Может отправлять сообщения другим акторам
// 4. Может создавать новых акторов (deploy)

contract WalletActor {
    balance: Int = 0;
    
    receive(msg: Deposit) {
        self.balance += msg.amount;
        // Отправка сообщения другому актору
        send(Notification{amount: msg.amount}.toCell());
    }
}
Подробнее в уроках:

Проектирование потоков сообщений

Async Message Flow Design
Термин

Методика проектирования последовательностей асинхронных сообщений между контрактами TON. Включает определение цепочек сообщений для бизнес-операций, обработку ветвлений при ошибках, расчёт газовых бюджетов для всей цепочки и обеспечение идемпотентности обработки.

Пример:
// Поток swap в DEX (5 сообщений):
//
// User → Router: запрос swap
//   Router → Pool: transfer_notification
//     Pool → JettonWallet: transfer (выход)
//       JettonWallet → User: transfer_notification
//       JettonWallet → Pool: excesses (сдача газа)
//
// Gas budget: 0.3 TON (0.06 на каждое сообщение)
Подробнее в уроках:

Стратегии обработки bounce

Bounce Handling Strategies
Термин

Набор проектных решений для обработки отклонённых сообщений в TON. Bounce-сообщение возвращается отправителю, когда получатель не может обработать запрос (недостаточно газа, ошибка в коде, контракт не развёрнут). Стратегии включают: откат состояния, повторную отправку, эскалацию ошибки и graceful degradation.

Пример:
// Стратегия: откат при bounce
contract SafeTransfer {
    pendingAmount: Int = 0;
    
    // Отправка с сохранением pending
    fun transfer(to: Address, amount: Int) {
        self.pendingAmount = amount;
        self.balance -= amount;
        send(SendParameters{to, value: amount, bounce: true});
    }
    
    // Откат при bounce
    bounced(msg: Slice) {
        self.balance += self.pendingAmount;
        self.pendingAmount = 0;
    }
}
Подробнее в уроках:

Проектирование конечных автоматов

State Machine Design
Термин

Паттерн проектирования контрактов TON как конечных автоматов с явными состояниями и переходами. Каждое сообщение может инициировать переход между состояниями. Паттерн обеспечивает предсказуемость поведения, упрощает аудит безопасности и позволяет обрабатывать сложные многошаговые процессы (escrow, аукционы, голосования).

Пример:
// Escrow как конечный автомат
contract Escrow {
    state: Int = 0; // 0=created, 1=funded, 2=released, 3=refunded
    
    receive(msg: Fund) {
        require(self.state == 0, "Wrong state");
        self.state = 1;
    }
    
    receive(msg: Release) {
        require(self.state == 1, "Wrong state");
        require(sender() == self.buyer, "Not buyer");
        self.state = 2;
        send(/* transfer to seller */);
    }
}
Подробнее в уроках:

Параллельная оркестрация сообщений

Parallel Message Orchestration
Термин

Паттерн проектирования, при котором контракт отправляет несколько сообщений параллельно и собирает результаты. В TON параллельные сообщения обрабатываются независимо в разных шардах, что повышает пропускную способность. Сложность заключается в сборе результатов и обработке частичных отказов.

Пример:
// Scatter-Gather паттерн
contract Aggregator {
    responses: Int = 0;
    expected: Int = 3;
    
    fun queryAll() {
        // Отправка параллельно в 3 оракула
        send(/* → Oracle A */);
        send(/* → Oracle B */);
        send(/* → Oracle C */);
    }
    
    receive(msg: OracleResponse) {
        self.responses += 1;
        // Действие после сбора всех ответов
        if (self.responses == self.expected) {
            self.finalize();
        }
    }
}
Подробнее в уроках:

Sharding Patterns

Sharding-Friendly контракты

Sharding-Friendly Contract Design
Термин

Подход к проектированию контрактов, оптимизированный для работы в шардированной среде TON. Ключевые принципы: минимизация межшардовых зависимостей, распределение состояния по множеству мелких контрактов, использование предсказуемых адресов и избегание глобальных блокировок.

Пример:
// Не sharding-friendly: одна точка сбора
contract CentralLedger {
    allBalances: map<Address, Int>; // все данные в одном шарде
}

// Sharding-friendly: распределённая архитектура
contract UserWallet {
    balance: Int; // каждый пользователь в своём шарде
}
contract Master {
    totalSupply: Int; // только агрегированные данные
}
Подробнее в уроках:

Jetton Sharded паттерн

Jetton Sharded Pattern
Термин

Эталонный паттерн проектирования токенов в TON, при котором каждый владелец получает отдельный контракт-кошелёк (JettonWallet). Master-контракт отвечает за метаданные и общую эмиссию, а кошельки распределяют нагрузку по шардам. Этот паттерн обеспечивает горизонтальное масштабирование при любом количестве держателей.

Пример:
// Архитектура Jetton:
// JettonMaster (1 контракт)
//   ├── JettonWallet (owner: Alice) — шард A
//   ├── JettonWallet (owner: Bob)   — шард B
//   └── JettonWallet (owner: Carol) — шард C
//
// Transfer: Wallet_A → Wallet_B (прямой, без Master)
// Mint: Master → новый Wallet
// Burn: Wallet → Master
Подробнее в уроках:

NFT Factory паттерн

NFT Factory Pattern
Термин

Паттерн проектирования коллекций NFT в TON, где Collection-контракт выступает фабрикой для создания отдельных NFT Item контрактов. Каждый Item содержит собственные метаданные и логику владения. Паттерн обеспечивает масштабирование коллекций до миллионов элементов за счёт распределения по шардам.

Пример:
// NFT Collection как фабрика:
// NFTCollection (контракт-фабрика)
//   ├── NFTItem #0 (index: 0, owner: Alice)
//   ├── NFTItem #1 (index: 1, owner: Bob)
//   └── NFTItem #N (index: N, owner: ...)
//
// Адрес каждого Item детерминирован:
// addr = hash(collection_addr + item_index)
// → Можно вычислить без запроса к сети
Подробнее в уроках:

Детерминированная деривация адресов

Deterministic Address Derivation
Термин

Техника вычисления адреса контракта до его развёртывания на основе init-кода и начальных данных. В TON адрес — это хеш StateInit (code + data), что позволяет заранее знать адрес будущего контракта. Критически важна для sharded-систем, где контракт должен знать адреса партнёров без on-chain запросов.

Пример:
// Вычисление адреса JettonWallet до деплоя:
let walletInit = initOf JettonWallet(jettonMaster, owner);
let walletAddress = contractAddress(walletInit);

// Теперь можно отправить сообщение на walletAddress
// даже если контракт ещё не развёрнут —
// первое сообщение с StateInit создаст его
send(SendParameters{
    to: walletAddress,
    value: ton("0.05"),
    code: walletInit.code,
    data: walletInit.data,
    body: Mint{amount: 1000}.toCell()
});
Подробнее в уроках:

Стратегии пользовательского шардинга

Custom Sharding Strategies
Термин

Проектирование собственных паттернов распределения контрактов по шардам за пределами стандартных Jetton/NFT. Включает стратегии: шардинг по пользователям, по временным периодам, по географическим зонам, гибридный шардинг. Выбор стратегии зависит от паттернов доступа и требований к консистентности.

Пример:
// Шардинг по эпохам для системы голосования:
// VoteMain
//   ├── VoteEpoch(round: 1) — завершённый
//   ├── VoteEpoch(round: 2) — завершённый
//   └── VoteEpoch(round: 3) — активный
//       ├── VoteBallot(voter: Alice)
//       └── VoteBallot(voter: Bob)
//
// Каждый раунд — отдельный контракт
// Старые раунды не нагружают сеть
Подробнее в уроках:

Структуры данных (System Design)

Проектирование cell-деревьев

Cell Tree Design
Термин

Методика организации данных контракта в виде дерева ячеек (cells) с учётом ограничений TON: максимум 1023 бит и 4 ссылки на ячейку. Глубина дерева влияет на стоимость чтения и записи. Оптимальное проектирование балансирует между плоскими структурами (дешёвое чтение) и глубокими (экономия хранения).

Пример:
// Плоская структура (быстрый доступ, дорогое хранение):
// Root → [balance, owner, data1, data2]
// Глубина: 1, доступ: O(1)

// Глубокая структура (медленный доступ, дешёвое хранение):
// Root → [balance, ref→[owner, ref→[data1, data2]]]
// Глубина: 3, доступ: O(depth)

// Оптимальный баланс: часто читаемые данные — наверху
// Root → [balance, owner, ref→[metadata]]
Подробнее в уроках:

Стратегия сериализации BoC

BoC Serialization Strategy
Термин

Проектирование формата хранения и передачи данных через Bag of Cells с учётом газовых затрат. Выбор между inline-хранением (данные в ячейке сообщения) и reference-хранением (данные в отдельных ячейках) влияет на стоимость парсинга. Стратегия сериализации определяет, как структурировать данные для минимизации газа при типичных операциях.

Пример:
// Стратегия: минимизация gas при частых операциях

// Частая операция — проверка баланса:
// Хранить balance в первых битах корневой ячейки
beginCell()
    .storeCoins(balance)    // первым — частый доступ
    .storeAddress(owner)    // вторым
    .storeRef(metadata)     // редко читаемое — в ref
    .endCell()
Подробнее в уроках:

Проектирование TL-B схем

TL-B Schema Design
Термин

Методика создания Type Language — Binary схем для описания формата данных в TON. TL-B схемы определяют бинарную раскладку данных в ячейках и используются для сериализации/десериализации сообщений и хранилища. Хорошая схема обеспечивает компактность, версионируемость и обратную совместимость.

Пример:
// TL-B схема для токен-трансфера:
// transfer#0f8a7ea5
//   query_id:uint64
//   amount:(VarUInteger 16)
//   destination:MsgAddress
//   response_destination:MsgAddress
//   custom_payload:(Maybe ^Cell)
//   forward_ton_amount:(VarUInteger 16)
//   forward_payload:(Either Cell ^Cell)
//   = InternalMsgBody;
//
// Opcode 0f8a7ea5 — уникальный идентификатор
Подробнее в уроках:

Оптимизация словарей

Dictionary Optimization
Термин

Техники эффективного использования HashmapE (словарей) в контрактах TON. Словари хранятся как Patricia-деревья в ячейках, и каждая операция требует обхода дерева. Оптимизации включают: выбор размера ключа, пакетные обновления, lazy-загрузку поддеревьев и вынос редко используемых данных в дочерние контракты.

Пример:
// Проблема: словарь с 10000 записями
// Каждая запись/чтение — обход дерева O(key_bits)

// Оптимизация 1: уменьшить размер ключа
// map<Int as uint256, V>  → дорого (256 бит)
// map<Int as uint32, V>   → дёшево (32 бита)

// Оптимизация 2: шардинг словаря
// Вместо одного большого словаря:
// Master.users: map<Address, Data> // 10000 записей
// Распределить по дочерним контрактам:
// UserContract(owner).data // 1 запись на контракт
Подробнее в уроках:

Оптимизация стоимости хранения

Storage Cost Optimization
Термин

Стратегии минимизации расходов на хранение данных в контрактах TON. Каждая ячейка стоит ~0.000000033 TON за бит в год. При проектировании системы необходимо оценивать TCO хранения и выбирать между on-chain (дорого, верифицируемо) и off-chain (дёшево, требует доверия) хранением.

Пример:
// Расчёт стоимости хранения NFT-коллекции:
// 10000 NFT × 1 KB metadata on-chain
// = 10 MB × 0.000000033 TON/бит/год
// = ~2.6 TON/год

// Альтернатива: off-chain metadata
// 10000 NFT × 32 байта (ссылка на IPFS)
// = 320 KB → ~0.08 TON/год

// Решение: гибридный подход
// Критичные данные (owner, index) — on-chain
// Медиа и описание — IPFS/TON Storage
Подробнее в уроках:

Gas и экономика контрактов

Gas-модель как ограничение проектирования

Gas Model as Design Constraint
Термин

Подход к газовой модели TON не как к техническому ограничению, а как к ключевому фактору архитектурных решений. Стоимость вычислений, хранения и пересылки сообщений определяет выбор между альтернативными архитектурами. Контракт, дешёвый в деплое, может оказаться дорогим в эксплуатации.

Пример:
// Gas влияет на архитектуру:

// Вариант A: один контракт, сложная логика
// Deploy: 0.05 TON
// Каждый вызов: 0.1 TON (много вычислений)
// 1000 вызовов: 100 TON

// Вариант B: система контрактов, простая логика
// Deploy: 0.2 TON (4 контракта)
// Каждый вызов: 0.03 TON (параллельно)
// 1000 вызовов: 30 TON

// Вариант B дешевле при > 200 вызовах
Подробнее в уроках:

Паттерны газовой оптимизации

Gas Optimization Patterns
Термин

Набор техник снижения газовых затрат при сохранении функциональности. Включают: оптимизацию раскладки данных в ячейках, минимизацию количества сообщений в цепочке, batch-операции, lazy-вычисления, кеширование промежуточных результатов и выбор оптимальных структур данных.

Пример:
// Паттерн: batch-обработка вместо поштучной

// Неоптимально: 100 отдельных сообщений
for (let i = 0; i < 100; i++) {
    send(Transfer{to: recipients[i]});
}
// Gas: 100 × 0.01 = 1 TON

// Оптимально: batch через merkle-proof
send(BatchTransfer{
    merkleRoot: root,
    count: 100
});
// Gas: 0.05 TON (один вызов с proof)
Подробнее в уроках:

Экономическое моделирование контрактов

Contract Economics Modeling
Термин

Анализ экономической устойчивости системы контрактов: доходы (комиссии, стейкинг), расходы (газ, хранение, maintenance), точка безубыточности. Моделирование помогает определить оптимальную структуру комиссий, минимальный TVL для самоокупаемости и стратегию управления treasury.

Пример:
// Экономическая модель DEX-пула:
// Доходы:
//   Swap fee: 0.3% от объёма
//   Ежедневный объём: 100,000 TON
//   Доход: 300 TON/день
//
// Расходы:
//   Gas на swap: 0.03 TON × 500 = 15 TON/день
//   Хранение: 0.01 TON/день
//   Итого: ~15 TON/день
//
// Прибыль: ~285 TON/день
// Breakeven при объёме: ~5000 TON/день
Подробнее в уроках:

Оценка комиссий

Fee Estimation
Термин

Методика предварительного расчёта стоимости операций в TON для UX и проектирования. Включает три компонента: compute fee (вычисления TVM), storage fee (хранение данных), forward fee (пересылка сообщений). Точная оценка позволяет показывать пользователю ожидаемую стоимость транзакции до подтверждения.

Пример:
// Оценка gas для цепочки swap:

// Шаг 1: User → Router (compute: ~3000 gas)
// forward_fee: ~0.005 TON

// Шаг 2: Router → Pool (compute: ~5000 gas)
// forward_fee: ~0.005 TON

// Шаг 3: Pool → JettonWallet (compute: ~4000 gas)
// forward_fee: ~0.005 TON

// Итого estimate: ~0.03 TON
// Рекомендация UX: отправлять 0.05 TON
// Разница вернётся через excess-сообщение
Подробнее в уроках:

Проектирование compute-бюджета

Compute Budget Design
Термин

Стратегия распределения вычислительных ресурсов между контрактами в системе. TVM имеет ограничение на максимальный gas_limit одной транзакции. Сложные операции необходимо декомпозировать на цепочку сообщений, каждое из которых укладывается в лимит. Проектирование бюджета определяет, сколько работы выполняет каждый контракт.

Пример:
// Проблема: слишком много вычислений в одном вызове
// gas_limit = 1,000,000 gas units

// Тяжёлая операция: пересчёт 1000 позиций
// Не влезает в один вызов!

// Решение: continuation-паттерн
contract BatchProcessor {
    processed: Int = 0;
    
    receive(msg: Process) {
        let batch = 50; // обработать порцию
        // ... обработка 50 элементов ...
        self.processed += batch;
        if (self.processed < total) {
            send(/* сообщение самому себе */)
        }
    }
}
Подробнее в уроках:

DeFi Design и Security

DEX/AMM паттерны проектирования

DEX/AMM Design Patterns
Термин

Архитектурные паттерны для децентрализованных бирж на TON, адаптированные к асинхронной модели. Включают: Router-Pool-Vault архитектуру, CPMM (Constant Product) и StableSwap формулы, управление ликвидностью через LP-токены. Ключевое отличие от EVM-DEX: отсутствие атомарных мульти-контрактных вызовов.

Пример:
// Архитектура DEX на TON (DeDust-стиль):
//
// Factory → создаёт Pool по параметрам
// Router  → маршрутизирует swap-запросы
// Pool    → хранит ликвидность, выполняет swap
// Vault   → хранит токены одного типа
//
// Swap flow:
// User → Jetton.transfer → Pool.swap_notification
// Pool → Vault.withdraw → User.transfer_notification
//
// В отличие от Uniswap: нет flashloan (async!)
Подробнее в уроках:

Проектирование оракулов

Oracle Integration Design
Термин

Архитектурные решения для интеграции внешних данных (цены, курсы, погода) в контракты TON. Из-за асинхронной модели оракул не может быть вызван синхронно — данные запрашиваются через сообщения с задержкой. Паттерны: push-оракул (обновляет данные периодически), pull-оракул (по запросу), гибридный с кешированием.

Пример:
// Push-оракул (периодическое обновление):
contract PriceOracle {
    prices: map<Int, PriceData>; // pair_id → price
    lastUpdate: Int;
    
    receive(msg: UpdatePrice) {
        require(sender() == self.updater, "Not updater");
        self.prices.set(msg.pairId, PriceData{
            price: msg.price,
            timestamp: now()
        });
    }
    
    // Контракты запрашивают цену асинхронно
    receive(msg: GetPrice) {
        let data = self.prices.get(msg.pairId);
        reply(PriceResponse{price: data.price});
    }
}
Подробнее в уроках:

Проектирование токенных систем

Token System Design
Термин

Комплексный подход к проектированию токенных экосистем на TON: выбор стандарта (Jetton, SBT, NFT), дизайн эмиссии (фиксированная, инфляционная, дефляционная), механизмы распределения (airdrop, vesting, staking), governance-модели. Учитывает экономические стимулы и game theory.

Пример:
// Проектирование токеномики DAO:
//
// Эмиссия: 1,000,000 токенов (фиксированная)
// Распределение:
//   40% — community (vesting 4 года)
//   25% — team (cliff 1 год, vesting 3 года)
//   20% — treasury (управляется DAO)
//   15% — liquidity mining
//
// Governance: 1 токен = 1 голос
// Порог создания пропозала: 10,000 токенов
// Кворум: 10% supply
Подробнее в уроках:

Security-First проектирование

Security-First Design
Термин

Методология проектирования, при которой безопасность закладывается на этапе архитектуры, а не добавляется позже. Включает: threat modeling для каждого потока сообщений, проверку всех граничных условий, protection against reentrancy (через actor model), валидацию газа, проверку bounce и excess-сообщений.

Пример:
// Чек-лист безопасности для каждого контракта:
// □ msg_value >= required_gas + forward_fees
// □ sender() проверяется в каждом receive
// □ bounce обработан для каждого send
// □ Integer overflow невозможен
// □ Excess возвращается отправителю
// □ Replay protection (seqno или query_id)
// □ Нет зависимости от block.timestamp
// □ Код обновляемости защищён multisig
Подробнее в уроках:

Паттерны обновляемости

Upgradability Patterns
Термин

Архитектурные подходы к обновлению кода контрактов TON после деплоя. В отличие от Ethereum proxy-паттернов, TON позволяет прямую замену кода контракта. Паттерны: прямое обновление (owner вызывает set_code), голосование DAO, timelock с задержкой, emergency multisig. Каждый паттерн балансирует между гибкостью и безопасностью.

Пример:
// Паттерн: Timelock-обновление
contract Upgradable {
    pendingCode: Cell? = null;
    upgradeAt: Int = 0;
    
    receive(msg: ProposeUpgrade) {
        require(sender() == self.admin, "Not admin");
        self.pendingCode = msg.newCode;
        self.upgradeAt = now() + 86400; // 24h delay
    }
    
    receive(msg: ExecuteUpgrade) {
        require(now() >= self.upgradeAt, "Too early");
        require(self.pendingCode != null, "No pending");
        nativeSetCode(self.pendingCode!!);
    }
}
Подробнее в уроках:

Production и Mini Apps

Архитектура Mini Apps

Mini Apps Architecture Design
Термин

Проектирование Telegram Mini Apps как фронтенда для TON-контрактов. Архитектура включает три слоя: Mini App UI (React/Vue в WebView), backend (API-сервер для off-chain логики), on-chain (смарт-контракты). Ключевые решения: разделение логики между слоями, стратегия подключения кошелька через TON Connect, кеширование on-chain данных.

Пример:
// Трёхслойная архитектура Mini App:
//
// Слой 1: Telegram WebView (Mini App)
//   React + TON Connect UI
//   Показывает UI, подписывает транзакции
//
// Слой 2: Backend API
//   Кеширование on-chain данных
//   Индексация событий
//   Push-уведомления
//
// Слой 3: TON Smart Contracts
//   Бизнес-логика и хранение
//   Обработка платежей
Подробнее в уроках:

Проектирование платёжных каналов

Payment Channel Design
Термин

Layer-2 решение для масштабирования микроплатежей в TON. Два участника открывают канал on-chain, обмениваются подписанными состояниями off-chain и закрывают канал с финальным балансом on-chain. Проектирование включает: протокол обновления состояний, механизм dispute resolution, стратегию определения timeout и защиту от мошенничества.

Пример:
// Жизненный цикл платёжного канала:
//
// 1. Открытие (on-chain)
//    Alice deploy ChannelContract с залогом 100 TON
//    Bob подтверждает участие с залогом 100 TON
//
// 2. Off-chain обмен (мгновенно, бесплатно)
//    State #1: Alice=90, Bob=110 (подписано обоими)
//    State #2: Alice=85, Bob=115 (подписано обоими)
//
// 3. Закрытие (on-chain)
//    Публикация финального state + challenge period
//    Распределение: Alice=85, Bob=115
Подробнее в уроках:

Паттерны production-мониторинга

Production Monitoring Patterns
Термин

Стратегии наблюдения за системой контрактов в production. Включают: мониторинг балансов контрактов, отслеживание цепочек сообщений, алертинг на аномальные транзакции, индексация событий для аналитики. В TON мониторинг сложнее, чем в EVM, из-за асинхронности и отсутствия event logs.

Пример:
// Мониторинг DEX в production:
//
// 1. Balance Monitor:
//    Проверять баланс Pool каждые 30 сек
//    Alert если < минимальной ликвидности
//
// 2. Transaction Monitor:
//    Индексировать все входящие сообщения
//    Отслеживать failed transactions
//    Alert если error rate > 5%
//
// 3. TVL Tracker:
//    Агрегировать балансы всех пулов
//    Dashboard с историей TVL
//    Alert при резком падении (> 20% за час)
Подробнее в уроках:

Паттерны интеграции Capstone

Capstone Integration Patterns
Термин

Методика объединения всех изученных паттернов System Design в единую DeFi-платформу. Capstone-проект демонстрирует сквозное проектирование: от требований до production-деплоя. Включает интеграцию контрактов (DEX + Lending + Governance), фронтенд (Mini App), мониторинг и документацию.

Пример:
// Capstone: DeFi платформа
//
// Контракты:
//   DEX (Router + Pools) — модули 04, 07
//   Token (Jetton + LP) — модуль 08
//   Governance (DAO voting) — модуль 11
//
// Frontend:
//   Telegram Mini App — модуль 09
//   TON Connect — подключение кошелька
//
// Infrastructure:
//   Indexer — отслеживание транзакций
//   Monitor — алертинг и дашборды
//   CI/CD — автодеплой контрактов
Подробнее в уроках:

Стратегии развёртывания

Deployment Strategies
Термин

Подходы к развёртыванию систем контрактов TON в production. Включают: порядок деплоя (сначала листовые контракты, затем координаторы), стратегии миграции (параллельная работа старой и новой версии), canary-деплой (ограниченный трафик на новую версию), blue-green деплой (мгновенное переключение через Router).

Пример:
// Порядок деплоя DEX-системы:
//
// Фаза 1: Deploy базовых контрактов
//   1. JettonMaster (LP токены)
//   2. Vault контракты
//   3. Pool контракты
//
// Фаза 2: Deploy координаторов
//   4. Router (ссылается на Pool-ы)
//   5. Factory (создаёт новые Pool-ы)
//
// Фаза 3: Настройка и верификация
//   6. Инициализация ликвидности
//   7. Тестовый swap
//   8. Открытие публичного доступа
Подробнее в уроках: