Rust: от сетевого бэкенда до своего блокчейна и токена

Курс: Rust — от сетевого бэкенда до своего блокчейна и токена

Для кого: разработчик с опытом C++ и Go, который хочет освоить Rust на рабочем уровне и применить его в двух направлениях: сетевой бэкенд (API, микросервисы, DNS-инструменты) и блокчейн-инженерия (свой блокчейн, токен на Solana, своя сеть). Логика курса: три части. Часть I — язык и его особенности (ownership, lifetimes, трейты, async, макросы, unsafe). Часть II — сетевой бэкенд: единая DNS-платформа в Cargo workspace (Axum + tonic + PostgreSQL/SQLx + Redis). Часть III — blockchain-трек: криптопримитивы, свой блокчейн с нуля, Solana-программы и SPL-токен, Substrate/CosmWasm. Стыкуется с курсом Blockchain Track (там Rust — Модуль 8; здесь — его развёрнутая версия). Формат: каждый блок = темы + материалы + задания + мини-проект с проверяемым результатом. Темп: 5–7 ч/нед → ~6 месяцев. Можно быстрее.


Как пользоваться курсом

Каждый блок устроен одинаково:

  • Темы — что понять.
  • Задания — что написать руками после уроков.
  • Мини-проект — кусок общей системы; критерий, что блок закрыт.

Все мини-проекты Части II строят единую систему в одном Cargo workspace:

dns-platform/
├── Cargo.toml          # workspace
├── shared/             # общие типы, ошибки, DNS-протокол
├── dns-server/         # DNS-сервер (UDP + TCP)
├── dns-client/         # CLI-утилита (аналог dig)
├── api-gateway/        # REST API управления (Axum)
├── monitor-service/    # gRPC мониторинг (tonic)
└── discovery/          # service discovery

Часть III строит второй workspace — собственную криптовалюту:

mini-coin/
├── Cargo.toml          # workspace
├── crypto/             # хеши, подписи, Merkle, сериализация
├── core/               # блок, цепочка, PoW, транзакции
├── node/               # P2P (libp2p), mempool
└── wallet/             # CLI-кошелёк

Правило то же, что и в Blockchain Track: не переходи дальше, пока не закрыл практику. Чтение без кода даёт иллюзию понимания.


Часть I. Язык и его особенности

Главный скачок для тебя как Go/C++-разработчика — не синтаксис, а ownership/borrowing: в Go память чистит сборщик мусора, в C++ ты сам следишь за временем жизни и получаешь UB за ошибки, а в Rust компилятор заставляет доказать корректность на этапе компиляции. Первые недели — «борьба с borrow checker», потом это становится второй натурой. Часть I закладывает именно этот фундамент: без него ни бэкенд-код, ни Solana-программы не пойдут.

Блок 1. Основы Rust (повторение)

~1.5 недели

Темы

  • Установка: rustup, cargo, структура проекта.
  • Примитивные типы, ownership, borrowing (обзор).
  • Structs, enums, pattern matching — enum'ы с данными это то, чего не хватало в Go.
  • Collections: Vec, HashMap, String vs &str.
  • Modules, visibility, crates.

Материалы

Задания после уроков

  1. Написать структуру DnsRecord с полями (name, type, ttl, value) и реализовать Display.
  2. Реализовать парсинг строки "example.com A 300 1.2.3.4" в DnsRecord через pattern matching.
  3. Собрать HashMap<String, Vec<DnsRecord>> — простейший in-memory DNS store.

Мини-проект 1 — shared крейт: типы DnsRecord, DnsQuery, DnsResponse, кастомный enum DnsError. Это фундамент для всей системы Части II.


Блок 2. Ownership глубже, Lifetimes, Traits

~2 недели

Темы

  • Lifetimes: 'a, lifetime elision, 'static.
  • Traits: определение, impl, trait objects (dyn Trait), generics.
  • Clone, Copy, Iterator, From/Into.
  • Smart pointers: Box<T>, Rc<T>, Arc<T>, RefCell<T>.
  • Closures и Fn, FnMut, FnOnce.

Зачем это блокчейну. Solana-программа — это функция, которой передают пачку ссылок на аккаунты; без уверенного владения borrowing и lifetimes ты будешь воевать с компилятором вместо написания логики. Этот блок — самая важная инвестиция всего курса.

Материалы

Задания после уроков

  1. Добавить трейт Resolvable в shared, реализовать для DnsRecord.
  2. Написать generic функцию parse_record<T: FromStr>() -> Result<T, DnsError>.
  3. Реализовать Iterator для коллекции записей с фильтрацией по типу.

Мини-проект 2 — dns-client v0.1: CLI-утилита, читает зону из файла, строит HashMap, отвечает на запросы из stdin. Без сети — только структуры данных.


Блок 3. Обработка ошибок

~0.5 недели

Темы

  • Result<T, E> и Option<T> в глубину.
  • ? оператор и его механика (сравни с Go: там if err != nil на каждый вызов, здесь — один символ и автоконверсия через From).
  • thiserror — для библиотечных ошибок.
  • anyhow — для приложений.
  • Стратегия: когда использовать что.

Материалы

Задания после уроков

  1. Перевести все ошибки shared на thiserror с кастомными вариантами.
  2. Добавить anyhow в dns-client, обернуть main в anyhow::Result.
  3. Реализовать цепочку ошибок с контекстом через .context().

Блок 4. Async / Concurrency

~2 недели

Темы

  • async/await — модель выполнения; чем отличается от горутин (нет прозрачного планировщика «бесплатно», futures ленивые).
  • Tokio runtime: tokio::main, spawn, join!, select!.
  • Каналы: mpsc, broadcast, oneshot.
  • Arc<Mutex<T>>, Arc<RwLock<T>> — shared state; компилятор ловит гонки данных на этапе сборки.
  • Graceful shutdown: CancellationToken, tokio::signal.
  • tokio::net: TCP/UDP listeners.

Зачем это блокчейну. Tokio — рантайм, на котором работают валидатор Solana, Ethereum-клиент reth и почти вся блокчейн-инфраструктура на Rust. P2P-узел твоей монеты в Блоке 16 — это целиком async-код.

Материалы

Задания после уроков

  1. Написать async UDP echo-сервер на Tokio.
  2. Добавить broadcast канал для рассылки событий между задачами.
  3. Реализовать graceful shutdown по SIGTERM с дрейном активных соединений.

Мини-проект 3 — dns-server v0.1: async UDP-сервер, принимает DNS-запросы, отвечает из in-memory store. Graceful shutdown обязателен.


Блок 5. Тестирование

~1.5 недели

Темы

  • Unit-тесты: #[test], #[cfg(test)], модули тестов.
  • Integration тесты: папка tests/, тесты бинарников.
  • mockall — моки трейтов.
  • proptest — property-based тестирование.
  • cargo-fuzz — фаззинг (особенно для парсеров бинарных форматов).
  • Тестирование async кода с Tokio.

Зачем это блокчейну. В блокчейн-коде цена бага — чужие деньги. Фаззинг и property-тесты («сериализация → парсинг → тот же объект», «сумма балансов постоянна») — обязательная практика индустрии; ты будешь применять её и к DNS-парсеру, и к транзакциям своей монеты.

Материалы

Задания после уроков

  1. Покрыть shared DNS-парсер unit-тестами (граничные случаи: пустые строки, невалидные TTL).
  2. Написать property-based тесты: parse(serialize(record)) == record.
  3. Запустить фаззер на DNS-парсере, устранить найденные паники.

Мини-проект 4 — тестовое покрытие shared и dns-server v0.1: integration тест поднимает UDP-сервер, шлёт реальные запросы, проверяет ответы.


Блок 6. Traits, Generics, Macros

~1 неделя

Темы

  • Продвинутые traits: associated types, default impl, trait bounds.
  • Generics в глубину, monomorphization (почему generics в Rust — zero-cost, в отличие от interface в Go).
  • Declarative macros: macro_rules!.
  • Proc macros — обзор (derive, attribute).
  • Популярные derive: serde, Debug, Clone.

Зачем это блокчейну. Anchor (главный фреймворк Solana) — это по сути набор proc-макросов: #[program], #[derive(Accounts)]. Substrate/FRAME — тоже макросы поверх макросов. Понимая, что генерирует макрос, ты читаешь блокчейн-фреймворки, а не заклинаешь их.

Материалы

Задания после уроков

  1. Добавить serde сериализацию во все типы shared.
  2. Написать macro_rules! для генерации тестовых DNS-записей разных типов.
  3. Реализовать generic Cache<K, V> с TTL-инвалидацией для DNS-записей.

Блок 7. Продвинутые особенности языка

~1 неделя. Новый блок: особенности Rust, на которых держится системный и блокчейн-код.

Темы

  • Send/Sync: как компилятор доказывает потокобезопасность типов; почему tokio::spawn требует Send и что делать, когда его нет.
  • Pin/Unpin и устройство Future изнутри: во что компилируется async fn (конечный автомат), зачем нужен Pin.
  • Interior mutability: Cell, RefCell, OnceCell/LazyLock; когда RefCell паникует в рантайме.
  • Const generics и массивы фиксированного размера: [u8; 32] — так в Rust-блокчейнах представлены хеши и ключи, без аллокаций.
  • Newtype и typestate: кодируем инварианты в типах — Address нельзя перепутать с Hash, неподписанную транзакцию нельзя отправить. Компилятор как аудитор.
  • no_std и таргеты компиляции: wasm32-unknown-unknown, SBF (Solana). Почему смарт-контракты — это код в жёстко ограниченной среде: без файлов, сети, потоков и часов.
  • Аллокации и zero-copy: bytemuck, чтение структур прямо из байтового буфера; почему on-chain код избегает аллокаций (каждая стоит «газа»/compute units).

Материалы

Задания после уроков

  1. Newtype-обёртки Hash([u8; 32]) и Address([u8; 20]) с Display/FromStr (hex) — пригодятся в Части III без изменений.
  2. Typestate: Transaction<Unsigned>.sign(&key)Transaction<Signed>; функция broadcast() принимает только подписанную. Убедись, что неверный порядок не компилируется.
  3. Собрать одну из библиотек курса под wasm32-unknown-unknown, спрятав std-зависимости за feature-флагом.

Результат: ты понимаешь, «что под капотом» у async, потокобезопасности и generics, и умеешь использовать систему типов как инструмент защиты инвариантов — главный профессиональный приём Rust-инженера.


Блок 8. Unsafe Rust + FFI

~1 неделя

Темы

  • unsafe блоки: raw pointers, разыменование.
  • Инварианты безопасности — что берёт на себя программист.
  • FFI: extern "C", #[no_mangle], bindgen.
  • Вызов C-функций из Rust (пример: libresolv или c-ares).
  • CString, CStr — работа со строками через FFI границу.

Материалы

Задания после уроков

  1. Написать unsafe функцию для чтения сырых байт DNS-пакета.
  2. Создать FFI-обёртку над getaddrinfo из libc.
  3. Проверить обёртку через Miri (UB-детектор).

Мини-проект 5 — dns-client v0.5: добавить режим резолвинга через системный резолвер (libc FFI), сравнивать результат с собственным UDP-запросом.


Часть II. Network backend: DNS-платформа

Прикладная часть по исходной цели курса: REST API, микросервисы, gRPC и DNS-инструменты. Всё в одном Cargo workspace; каждый блок наращивает систему. Если тебе не терпится к блокчейну — Часть III зависит только от Блоков 1–8, её можно проходить параллельно с Частью II.

Блок 9. REST API (Axum + PostgreSQL + Redis)

~2 недели

Темы

  • Axum: Router, handlers, extractors, middleware.
  • tower и tower-http: трассировка, CORS, rate limiting.
  • SQLx: подключение к PostgreSQL, query!, миграции через sqlx-cli.
  • Redis: redis крейт, кэширование ответов, pub/sub.
  • Аутентификация: JWT через jsonwebtoken.
  • Валидация: validator крейт.

Материалы

Задания после уроков

  1. CRUD эндпоинты для DNS-записей (GET/POST/PUT/DELETE /records).
  2. Middleware для логирования всех запросов с tracing.
  3. Кэширование ответов в Redis с TTL равным DNS TTL.

Мини-проект 6 — api-gateway v1.0: REST API управления DNS-зонами. PostgreSQL хранит зоны и записи, Redis кэширует частые запросы, JWT авторизация для мутаций.


Блок 10. Микросервисы + gRPC (tonic)

~1.5 недели

Темы

  • Protobuf: .proto файлы, типы, prost.
  • tonic: сервер, клиент, streaming.
  • Межсервисная коммуникация: api-gatewaydns-server через gRPC.
  • Cargo workspace: зависимости между крейтами.
  • tower interceptors для auth в gRPC.

Материалы

Задания после уроков

  1. Определить .proto для MonitorService (метрики DNS-сервера).
  2. Реализовать server-side streaming для real-time статистики запросов.
  3. Подключить api-gateway как gRPC-клиент к monitor-service.

Мини-проект 7 — monitor-service v1.0: gRPC сервис мониторинга. DNS-сервер шлёт метрики (запросов/сек, cache hit rate, latency) через gRPC streaming. API gateway их агрегирует.


Блок 11. DNS в глубину

~2.5 недели

11.1. DNS-протокол (база)

  • RFC 1035: структура пакета, заголовок, секции.
  • Типы записей: A, AAAA, MX, CNAME, NS, SOA, TXT, SRV.
  • UDP vs TCP, message compression.
  • Парсинг бинарного пакета вручную (без библиотек) — тот же навык, что парсинг блока/транзакции в Части III.

11.2. DNS-сервер (приоритет)

  • Authoritative vs recursive resolver.
  • Zone files: парсинг, загрузка.
  • Кэширование с TTL-инвалидацией.
  • EDNS0, большие ответы.
  • hickory-dns как референс.

11.3. DNS-инструменты

  • Аналог dig: отправить UDP-пакет, распарсить ответ, вывести.
  • Аналог dnstrace: измерить latency по всей цепочке.
  • Парсер pcap-файлов с DNS-трафиком.

11.4. DNS в микросервисах (приоритет)

  • Service discovery через DNS SRV-записи.
  • Интеграция dns-server как внутренний резолвер для сервисов.
  • Health-check через TTL: сервис жив пока обновляет запись.
  • Сравнение с Consul DNS.

Материалы

Задания после уроков

  1. Написать бинарный DNS-парсер для типа A с нуля (без библиотек).
  2. Добавить поддержку CNAME-цепочек в dns-server.
  3. Реализовать SRV lookup для api-gateway и monitor-service.

Мини-проект 8 — dns-server v1.0 + discovery крейт: полноценный authoritative DNS-сервер. discovery предоставляет API регистрации сервисов — api-gateway и monitor-service регистрируются при старте через SRV-записи.


Блок 12. Observability

~0.5 недели

Темы

  • tracing крейт: spans, events, subscriber.
  • tracing-subscriber: fmt, JSON формат, фильтрация.
  • Prometheus: метрики через metrics + metrics-exporter-prometheus.
  • Instrumenting Axum endpoints и Tokio tasks.
  • docker-compose с Prometheus + Grafana.

Материалы

Задания после уроков

  1. Добавить spans в каждый DNS-запрос (query → cache check → resolve → response).
  2. Экспортировать метрики DNS-сервера в Prometheus.
  3. Настроить Grafana dashboard: RPS, latency percentiles, cache hit rate.

Блок 13. Docker + docker-compose

~0.5 недели

Темы

  • Multi-stage Dockerfile для Rust (builder → runtime).
  • Минимальный образ: distroless или scratch.
  • docker-compose: все сервисы + PostgreSQL + Redis + Prometheus + Grafana.
  • Health checks, depends_on, networks.
  • .env файлы, конфигурация через переменные окружения (config крейт).

Материалы

Мини-проект 9 (финал Части II) — полная система в docker-compose: один docker-compose up поднимает всё — DNS-сервер, API, gRPC мониторинг, PostgreSQL, Redis, Prometheus, Grafana. ✅ Первая цель курса достигнута: связанная микросервисная система на Rust.


Блок 14. Kubernetes (опциональный)

~1 неделя

Темы

  • Манифесты: Deployment, Service, ConfigMap, Secret.
  • DNS в k8s: CoreDNS, как работает <service>.<namespace>.svc.cluster.local.
  • Helm chart для всей системы.
  • kube крейт — Kubernetes client на Rust.
  • Интеграция собственного DNS-сервера как CoreDNS plugin (advanced).

Материалы


Часть III. Blockchain-трек: блокчейн, криптовалюта и токены на Rust

Rust — второй по важности язык блокчейна после Solidity и, вероятно, самый быстрорастущий: на нём написаны Solana, Polkadot/Substrate, NEAR, клиент reth и почти весь ZK-стек. Эта часть — развёрнутая версия Модуля 8 курса Blockchain Track: там обзор, здесь — полный путь руками. Зависит только от Блоков 1–8 (язык), поэтому её можно проходить параллельно с Частью II. Концептуальная база (хеши, подписи, Merkle, UTXO, консенсус) подробно разобрана в Модулях 1–3 Blockchain Track — здесь мы реализуем всё это на Rust.

Блок 15. Криптографические примитивы на Rust

~1 неделя

Темы

  • Экосистема RustCrypto: хеши — sha2 (SHA-256, Bitcoin), sha3 (Keccak-256, Ethereum), blake3; единый интерфейс через трейт Digest.
  • Подписи: k256 — secp256k1/ECDSA (Bitcoin, Ethereum); ed25519-dalek — Ed25519 (Solana, Polkadot). Сравни две схемы: где какая используется и почему.
  • Merkle tree с нуля: построение корня, генерация и проверка Merkle proof.
  • Сериализация для консенсуса: borsh (детерминированная, Solana/NEAR) vs serde + bincode. Почему детерминированность байтов критична, когда от них считается хеш.
  • Кодирование адресов: bs58 (Base58 — Bitcoin, Solana), bech32; как из публичного ключа получается адрес.

Материалы

Задания после уроков

  1. Keypair-модуль: генерация, подпись, верификация — на k256 и на ed25519-dalek; сравни API и размеры подписей.
  2. Merkle tree + proof; property-тест на proptest: proof верифицируется для каждого листа любого дерева.
  3. Вывести Ethereum-адрес из публичного ключа (Keccak-256, последние 20 байт) и Base58-адрес в стиле Bitcoin — используй newtype-обёртки из Блока 7.

Мини-проект 10 — crypto крейт (новый workspace mini-coin): ключи, подписи, хеши, Merkle tree, borsh-сериализация. Полностью покрыт тестами + фаззинг парсеров.


Блок 16. Свой блокчейн на Rust (своя криптовалюта)

~2 недели. Главный практический блок трека: собираем примитивы в работающую монету.

Темы

  • Структура блока: заголовок (prev_hash, Merkle root, nonce, timestamp, target) + транзакции; Proof-of-Work с регулировкой сложности.
  • Транзакции: упрощённая UTXO-модель, проверка подписей, защита от двойной траты; mempool.
  • Хранилище: sled или RocksDB (rust-rocksdb) — embedded key-value, аналог BoltDB из Go-трека.
  • P2P: libp2p — gossipsub для распространения блоков и транзакций, mDNS для локального обнаружения узлов. Это та же библиотека (в Rust-версии), на которой работают Polkadot и Ethereum-клиенты.
  • Кошелёк: CLI — генерация ключей, адрес, баланс (скан UTXO), отправка транзакции.

Материалы

  • libp2p docs + официальные примеры (chat, gossipsub)
  • sled docs
  • Концептуальная канва — «Building Blockchain in Go» и Модули 2–3 Blockchain Track: та же логика, но реализация на Rust и с настоящим P2P.

Задания после уроков

  1. PoW-майнер: подбор nonce под target; регулировка сложности по времени последних N блоков.
  2. Полная валидация цепочки: пересчёт хешей, проверка Merkle root и подписей, отклонение двойной траты.
  3. Два узла на libp2p: обмен транзакциями и блоками через gossipsub, синхронизация цепочки при подключении нового узла.

Мини-проект 11 — mini-coin v1.0:своя криптовалюта на Rust — узел (node) майнит и синхронизируется по P2P, кошелёк (wallet) делает переводы, цепочка живёт на диске. Запусти три узла и прогони перевод через всю сеть.


Блок 17. Solana: программы, Anchor и свой SPL-токен

~2 недели. Главная Rust-first сеть — и твой токен на ней.

Темы

  • Модель Solana: программы stateless — код не хранит состояние, данные лежат в отдельных аккаунтах; rent; программа компилируется в SBF (вариант eBPF). Сравни с account-моделью Ethereum и UTXO Bitcoin — это третье измерение.
  • PDA (Program Derived Addresses) — детерминированные адреса аккаунтов, принадлежащих программе; основа хранения состояния.
  • Anchor: #[program], #[derive(Accounts)], constraint-валидация, IDL и клиентские байндинги. После Блока 6 ты понимаешь, что это proc-макросы, и можешь читать сгенерированное.
  • CPI (cross-program invocation) — вызов одной программы из другой.
  • SPL Token / Token-2022: mint account, associated token accounts (ATA), decimals, mint/freeze authority. Это аналог ERC-20 из Модуля 6 Blockchain Track.
  • Клиенты: solana-sdk/solana-client на Rust (остаёмся в стеке) или @solana/web3.js.

Практика

  1. Поставь Solana CLI и Anchor; настрой devnet, получи тестовые SOL через airdrop.
  2. Native Rust: минимальная программа без Anchor — прочувствуй модель аккаунтов и бойлерплейт вживую.
  3. Anchor: перепиши то же на Anchor; затем программа-счётчик с состоянием в PDA-аккаунте, тесты.
  4. Задеплой в devnet, вызови программу Rust-клиентом.
  5. Свой SPL-токен: создай mint, выпусти supply, сделай переводы между ATA; напиши Rust-клиент, который делает mint и перевод.

Материалы

Результат:свой токен на Rust-сети — развёрнутая Solana-программа в devnet и собственный SPL-токен с mint и переводами. Сравни ощущения с ERC-20-треком из Blockchain Track.


Блок 18. Своя сеть и Rust-контракты: Substrate, ink!, CosmWasm (+ ZK)

~2 недели. Закрываем карту: собственный L1 на Rust и контракты для не-EVM сетей.

18.1. Substrate / Polkadot — своя сеть с нативной монетой

  • FRAME и pallets — готовые модули (балансы, стейкинг, governance), из которых собирается свой L1. Rust-аналог Cosmos SDK.
  • Практика: собери чейн из node-template, настрой нативную монету (pallet-balances: имя, символ, decimals, genesis-аллокации), напиши один простой кастомный pallet со своей логикой, запусти локальную сеть и сделай перевод.

18.2. ink! — Rust-контракты в WASM

  • Смарт-контракты на Rust для Substrate-чейнов; здесь пригодится no_std из Блока 7.
  • Практика (по желанию): контракт-токен на ink! (PSP22 — аналог ERC-20).

18.3. CosmWasm — Rust-контракты для Cosmos

  • Прямая стыковка с Модулем 7 Blockchain Track: контракты на Rust для той самой сети, которую ты строишь на Cosmos SDK (Go). Оба твоих языка в одном проекте.
  • Практика: контракт cw20 (токен-стандарт Cosmos, аналог ERC-20) — задеплой в локальную сеть или тестнет.

18.4. ZK и инфраструктура (обзор)

  • Rust — де-факто язык ZK: zkVM RISC Zero и SP1 исполняют обычный Rust-код и генерируют доказательство его выполнения. Попробуй их quickstart — доказательство «я знаю x, такой что hash(x)=y» пишется за вечер.
  • reth — производительный Ethereum-клиент на Rust; читать его код — мастер-класс по системному Rust.

Практика блока (выбери один основной путь)

  1. Substrate-путь: своя сеть из node-template + кастомный pallet + нативная монета с genesis-распределением.
  2. CosmWasm-путь: cw20-токен, задеплоенный в Cosmos-сеть (лучший вариант, если проходишь Blockchain Track — соединяет оба курса).

Материалы

  • Substrate docs / Polkadot SDK docs, ink! docs
  • CosmWasm book, cw-plus (референсные контракты, включая cw20)
  • RISC Zero docs, SP1 docs, reth

Результат:своя сеть с нативной монетой (Substrate) или свой cw20-токен в Cosmos-сети; ориентируешься в ink!/CosmWasm/ZK и понимаешь, где Rust в блокчейн-индустрии обязателен.


Итоговая карта плана

# Блок Недели Мини-проект / результат
Часть I. Язык
1Основы (повторение)1.5shared крейт
2Ownership, Lifetimes, Traits2dns-client v0.1
3Обработка ошибок0.5— (рефакторинг)
4Async / Concurrency2dns-server v0.1
5Тестирование1.5Тест-покрытие системы
6Traits, Generics, Macros1
7Продвинутые особенности языка1typestate-транзакции, wasm-сборка
8Unsafe + FFI1dns-client v0.5
Часть II. Network backend
9REST API (Axum + SQLx)2api-gateway v1.0
10Микросервисы + gRPC1.5monitor-service v1.0
11DNS в глубину2.5dns-server v1.0 + discovery
12Observability0.5Dashboards
13Docker + compose0.5🎯 Финальная система Части II
14Kubernetes (опц.)1Helm chart
Часть III. Blockchain
15Криптопримитивы на Rust1crypto крейт
16Свой блокчейн на Rust2🎯 Своя криптовалюта mini-coin
17Solana + Anchor + SPL2🎯 Свой токен в devnet
18Substrate / ink! / CosmWasm2🎯 Своя сеть или cw20-токен

Итого: ~24–25 недель (~6 месяцев) при 5–7 ч/неделю (+1 неделя опционального Kubernetes). Части II и III независимы после Блока 8 — их можно менять местами или вести параллельно.


Базовый набор ресурсов (закладки)

Язык:

  • The Rust Book (doc.rust-lang.org/book) + Rustlings + Exercism
  • Rust for Rustaceans (Jon Gjengset) — второй уровень
  • Rustonomicon — unsafe и инварианты
  • Zero To Production In Rust — бэкенд-практика

Backend:

  • Tokio Tutorial, Axum docs, SQLx docs, tonic docs
  • hickory-dns, Implement DNS in a Weekend, RFC 1035

Blockchain:

  • RustCrypto (sha2/sha3/k256/ed25519-dalek), borsh, libp2p docs
  • solana.com/docs (Rust + Anchor), Anchor Book, SPL Token docs
  • Substrate / Polkadot SDK docs, ink! docs, CosmWasm book + cw-plus
  • RISC Zero / SP1 (ZK), reth (референс системного Rust)

Смежный курс:

  • Blockchain Track — теория блокчейна, Bitcoin/Ethereum, Solidity-токен, своя сеть на Cosmos SDK. Модули 1–3 — теоретическая база для Части III этого курса.

Один совет напоследок

Не пытайся «пройти язык быстро, чтобы скорее к блокчейну». Всё интересное в Части III — Anchor, Substrate, CosmWasm — это плотный идиоматический Rust: макросы, трейты, lifetimes, no_std. Каждый час, вложенный в Блоки 2, 6 и 7, экономит три часа непонимания в Блоках 16–18. И наоборот: если Часть II покажется затянутой — иди в Часть III после Блока 8, DNS-платформа никуда не денется.