Курс: 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,Stringvs&str. - Modules, visibility, crates.
Материалы
Задания после уроков
- Написать структуру
DnsRecordс полями (name, type, ttl, value) и реализоватьDisplay. - Реализовать парсинг строки
"example.com A 300 1.2.3.4"вDnsRecordчерез pattern matching. - Собрать
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 ты будешь воевать с компилятором вместо написания логики. Этот блок — самая важная инвестиция всего курса.
Материалы
Задания после уроков
- Добавить трейт
Resolvableвshared, реализовать дляDnsRecord. - Написать generic функцию
parse_record<T: FromStr>() -> Result<T, DnsError>. - Реализовать
Iteratorдля коллекции записей с фильтрацией по типу.
Мини-проект 2 — dns-client v0.1: CLI-утилита, читает зону из файла, строит HashMap, отвечает на запросы из stdin. Без сети — только структуры данных.
Блок 3. Обработка ошибок
~0.5 недели
Темы
Result<T, E>иOption<T>в глубину.?оператор и его механика (сравни с Go: тамif err != nilна каждый вызов, здесь — один символ и автоконверсия черезFrom).thiserror— для библиотечных ошибок.anyhow— для приложений.- Стратегия: когда использовать что.
Материалы
Задания после уроков
- Перевести все ошибки
sharedнаthiserrorс кастомными вариантами. - Добавить
anyhowвdns-client, обернуть main вanyhow::Result. - Реализовать цепочку ошибок с контекстом через
.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-код.
Материалы
Задания после уроков
- Написать async UDP echo-сервер на Tokio.
- Добавить
broadcastканал для рассылки событий между задачами. - Реализовать 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-парсеру, и к транзакциям своей монеты.
Материалы
Задания после уроков
- Покрыть
sharedDNS-парсер unit-тестами (граничные случаи: пустые строки, невалидные TTL). - Написать property-based тесты:
parse(serialize(record)) == record. - Запустить фаззер на 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 — тоже макросы поверх макросов. Понимая, что генерирует макрос, ты читаешь блокчейн-фреймворки, а не заклинаешь их.
Материалы
Задания после уроков
- Добавить
serdeсериализацию во все типыshared. - Написать
macro_rules!для генерации тестовых DNS-записей разных типов. - Реализовать 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).
Материалы
- Rust for Rustaceans (Jon Gjengset) — лучшая книга «второго уровня», выборочно.
- Async Book — главы про устройство Future
- Rustonomicon — Send/Sync
Задания после уроков
- Newtype-обёртки
Hash([u8; 32])иAddress([u8; 20])сDisplay/FromStr(hex) — пригодятся в Части III без изменений. - Typestate:
Transaction<Unsigned>→.sign(&key)→Transaction<Signed>; функцияbroadcast()принимает только подписанную. Убедись, что неверный порядок не компилируется. - Собрать одну из библиотек курса под
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 границу.
Материалы
Задания после уроков
- Написать unsafe функцию для чтения сырых байт DNS-пакета.
- Создать FFI-обёртку над
getaddrinfoиз libc. - Проверить обёртку через 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крейт.
Материалы
- Axum docs и примеры
- SQLx docs
- Zero To Production In Rust — главный практический источник
Задания после уроков
- CRUD эндпоинты для DNS-записей (GET/POST/PUT/DELETE
/records). - Middleware для логирования всех запросов с
tracing. - Кэширование ответов в 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-gateway→dns-serverчерез gRPC. - Cargo workspace: зависимости между крейтами.
towerinterceptors для auth в gRPC.
Материалы
Задания после уроков
- Определить
.protoдляMonitorService(метрики DNS-сервера). - Реализовать server-side streaming для real-time статистики запросов.
- Подключить
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.
Материалы
Задания после уроков
- Написать бинарный DNS-парсер для типа A с нуля (без библиотек).
- Добавить поддержку CNAME-цепочек в
dns-server. - Реализовать 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.
Материалы
Задания после уроков
- Добавить spans в каждый DNS-запрос (query → cache check → resolve → response).
- Экспортировать метрики DNS-сервера в Prometheus.
- Настроить 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) vsserde+bincode. Почему детерминированность байтов критична, когда от них считается хеш. - Кодирование адресов:
bs58(Base58 — Bitcoin, Solana),bech32; как из публичного ключа получается адрес.
Материалы
- RustCrypto — репозитории и docs.rs
- k256 docs, ed25519-dalek docs, borsh
- Теория — Модуль 1 Blockchain Track и Dan Boneh, «Cryptography I».
Задания после уроков
- Keypair-модуль: генерация, подпись, верификация — на
k256и наed25519-dalek; сравни API и размеры подписей. - Merkle tree + proof; property-тест на
proptest: proof верифицируется для каждого листа любого дерева. - Вывести 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.
Задания после уроков
- PoW-майнер: подбор nonce под target; регулировка сложности по времени последних N блоков.
- Полная валидация цепочки: пересчёт хешей, проверка Merkle root и подписей, отклонение двойной траты.
- Два узла на
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.
Практика
- Поставь Solana CLI и Anchor; настрой devnet, получи тестовые SOL через airdrop.
- Native Rust: минимальная программа без Anchor — прочувствуй модель аккаунтов и бойлерплейт вживую.
- Anchor: перепиши то же на Anchor; затем программа-счётчик с состоянием в PDA-аккаунте, тесты.
- Задеплой в devnet, вызови программу Rust-клиентом.
- Свой SPL-токен: создай mint, выпусти supply, сделай переводы между ATA; напиши Rust-клиент, который делает mint и перевод.
Материалы
- solana.com/docs (раздел Rust + Anchor), Anchor Book
- SPL Token docs
Результат: ✅ свой токен на 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.
Практика блока (выбери один основной путь)
- Substrate-путь: своя сеть из node-template + кастомный pallet + нативная монета с genesis-распределением.
- 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.5 | shared крейт |
| 2 | Ownership, Lifetimes, Traits | 2 | dns-client v0.1 |
| 3 | Обработка ошибок | 0.5 | — (рефакторинг) |
| 4 | Async / Concurrency | 2 | dns-server v0.1 |
| 5 | Тестирование | 1.5 | Тест-покрытие системы |
| 6 | Traits, Generics, Macros | 1 | — |
| 7 | Продвинутые особенности языка | 1 | typestate-транзакции, wasm-сборка |
| 8 | Unsafe + FFI | 1 | dns-client v0.5 |
| Часть II. Network backend | |||
| 9 | REST API (Axum + SQLx) | 2 | api-gateway v1.0 |
| 10 | Микросервисы + gRPC | 1.5 | monitor-service v1.0 |
| 11 | DNS в глубину | 2.5 | dns-server v1.0 + discovery |
| 12 | Observability | 0.5 | Dashboards |
| 13 | Docker + compose | 0.5 | 🎯 Финальная система Части II |
| 14 | Kubernetes (опц.) | 1 | Helm chart |
| Часть III. Blockchain | |||
| 15 | Криптопримитивы на Rust | 1 | crypto крейт |
| 16 | Свой блокчейн на Rust | 2 | 🎯 Своя криптовалюта mini-coin |
| 17 | Solana + Anchor + SPL | 2 | 🎯 Свой токен в devnet |
| 18 | Substrate / ink! / CosmWasm | 2 | 🎯 Своя сеть или 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-платформа никуда не денется.