Выпуск 59 · подкаст «Тысяча фичей»

#59: Основы Web3: Blockchain и Ether

1:32:46
↓ скачать mp3

Александр Пахомов и Дима Королёв (инженер, несколько лет в Web3) разбирают блокчейн и Ethereum инженерным языком — без маркетингового буллшита. Как биткоин Сатоши стал первым leaderless-леджером с инвариантом no double spend через `proof of work`; почему у биткоина нет финалити, а балансы — это derived-вьюха поверх лога блоков; как Ethereum добавил EVM, смарт-контракты и `ERC-20`, а `proof of stake`, валидаторы со стейком и L2-шардинг сделали транзакции дешёвыми. Попутно — MEV-атаки, мосты и `WBTC`, CAP-теорема через partial order и аналогию с Kafka, DEX против CEX, и как идеи Web3 (доказуемые гарантии, secure chip, confidential compute) просачиваются в Web2.

Главное

  • Биткоин — первая самоподдерживающаяся система, распределяющая ценность без доверия между участниками; её главный инвариант — no double spend (нельзя потратить больше, чем есть).
  • `Satoshi consensus` (он же `proof of work`) устроен так, что всем майнерам выгодно достраивать одну самую длинную цепь: максимальный reward получает тот, кого принял majority сети, а не тот, кто «первый» — физического времени в сети нет, только логическое.
  • У биткоина нет финалити: состояние вероятностно, и теоретически историю можно переписать — но каждый новый блок стоит астрономических вычислений, поэтому после ~5 блоков перезапись практически невозможна.
  • Балансы в леджере биткоина не хранятся — хранится лог блоков с транзакциями, а таблица балансов это derived materialized-вьюха; атака `50% + 1` даёт контроль заморозить/цензурировать транзакции, но не украсть чужие токены (нет валидной подписи).
  • Ethereum добавил EVM и смарт-контракты на `Solidity` с `gas fees`: правила зашиты не в протокол, а в код; стандарт `ERC-20` позволил хранить ненативные токены на леджере эфира и запустил DeFi (лендинг под `collateral`, `WBTC`, стейблкоины).
  • `Proof of stake` заменяет гонку всех майнеров на псевдослучайно выбранный небольшой набор валидаторов со «золочённым» стейком (слэшинг за читерство); это дёшево, но финалити всё ещё вероятностная — чекпоинт в эфире наступает примерно раз в полчаса.
  • L1-сети (`proof of work` Bitcoin, `proof of stake` Ethereum) дают total order и потому медленные и дорогие; L2 — это шардинг на независимые партиции (аналог партиций в Kafka) с периодическим settlement в L1, что роняет стоимость транзакции до десятков центов.
  • Идеи Web3 просачиваются в Web2: доказуемые криптографические гарантии вместо голого доверия провайдеру, `secure chip`/passkey в каждом устройстве и confidential compute (докер-образ на secure-чипе в облаке с подписью вендора) — движение к системам с меньшим baseline-доверием.

В выпуске

  • Дима КоролёвИнженер, в прошлом олимпиадник, несколько лет занимается Web3; ведёт технический митап и Substack «Stateful Compute» про будущее вычислительных движков. dimakorolev.substack.com ↗ substack.com ↗
Расшифровка

[00:00] Александр: Здарова! Вы слушаете 59-й выпуск подкаста «Тысяча фичей». Сегодня мы говорим про технологию блокчейн и эфир доступным инженерным языком. Помогает нам в этом разобраться Дима Королёв — в прошлом олимпиадник, а сейчас осознанно занимается Web3. У нас получился бодрый диалог про базу Web3-технологий без маркетингового буллшита и высокомерной отдалённости, которая частенько встречается в разговорах про децентрализованные биржи. Устраивайтесь поудобнее, мы начинаем. Поехали!

[00:45] Александр: Дима, расскажи, что такое Web3 сегодня?

[00:48] Дима: О, это будет длинное введение.

[00:50] Александр: Давай, можно.

[00:52] Дима: Начнём, наверное, с того, что сначала был блокчейн, а потом пошёл Web3. И это немного разные вещи, хотя Web3, конечно, вырастает из блокчейна. Если подходить к этому философски, то в какой-то момент времени происходит фазовый переход, и некоторый набор технологических идей вместе оказывается сильно больше, чем они сами по отдельности. В историю глубоко углубляться не будем — были cypherpunk’и, всякие WebMoney, был David Chaum. В итоге Сатоши собрал воедино то, что многие хотели сделать, но не могли собрать. Сатоши сделал, по сути, определённую базу данных, которая гарантирует один инвариант — no double spend, что ты не можешь потратить больше, чем у тебя есть. Сейчас мы поговорим и про минусы его решения — их много, — но оно было первым, поэтому это было очень круто. Ты майнишь двумя способами: коммитишь, контрибьютишь свой сервис, свою машину в эту большую сеть. Чем быстрее ты вычисляешь, чем лучше у тебя пинги, чем ты ближе к интернету — тем выше шанс, что ты получишь какие-то плюшки. Эта штуковина оказалась первым самоподдерживающимся решением: его запустили энтузиасты, и оно полетело. Наверное, стоит остановиться.

[02:25] Александр: По-моему, ты затронул три важные темы, которые надо бы раскрыть. Первая — та задача, которую решает блокчейн, конкретно биткоин: то value, которую он приносит. Когда у технологии есть такой простой ответ на вопрос «что она делает?» — значит, она имеет смысл. Вторая — то, что это сеть, а не просто программа, запустившаяся на компе: это нетворк. Как они образуются, как всё это само живёт, самоорганизуется, восстанавливается, обновляется — это очень интересно с инженерной точки зрения. И третье — процесс майнинга: ты контрибьютишь свою машину в сеть и вычисляешь, и чем быстрее вычисляешь, тем больше у тебя монет. Вот эти три вещи, мне кажется, надо разобрать одну за другой. И я бы предложил начать с сети, потому что мне очень интересно, как написать такую программу, которая может самоорганизовываться в сеть, жить на разных компьютерах и представлять собой какой-то саможивущий организм, уже отдельный от создателя. Мне кажется, это вообще уникальная штука.

[03:26] Дима: Слушай, и да и нет. Мы записываем в 2025 году, поэтому фразу надо строить аккуратно. Пока на планете Земля есть один вид с агентностью, то есть с целеполаганием, — это люди. Гусары, молчать: я с основанием полагаю, что дельфины и собаки тоже что-то умеют, и с основанием полагаю, что у нас будет AGI. Возможно, это изменится, плюс-минус единицы лет в ту или иную сторону. Но пока по способности влиять на окружающий мир человек всё-таки слишком зашкаливает. Поэтому, когда мы говорим, что система живёт сама, надо признать: сегодня, до появления AGI, работают две силы. Это эволюция, когда очень много разных организмов подстраиваются под среду, и это человеческий разум, который как-то креативит инженерно. Я аккуратно подвожу к тому, что если на первое место поставить не то, что система живёт сама, а то, что люди помогают системе жить, потому что она им нужна, — то биткоин далеко не первая такая система.

[04:12] Дима: Пример, который я в такой ситуации привожу, — это торренты. Торренты тоже расплодились по этой земле, казалось бы, как паразиты. Это сеть, и люди просто ей пользовались — потому что хотели делиться фильмами и находили друг друга. И протокол торрента по степени распространённости, я думаю, очень сильно опережал биткоин — если сделать поправку на то, когда он появился, сколько людей было в интернете и какое было качество этого интернета. То же самое относится, допустим, к протоколу e-mail. Сегодня e-mail централизован — это два-три больших провайдера, ну пять, и больше особо ничего. А изначально, если посмотреть на стандарт e-mail, идея была в том, что машины могут не знать who is who: они кидают пакетики в сеть, и те собираются в письмо от меня к тебе. К теме централизации и децентрализации мы ещё быстро придём. Я пытаюсь сказать, что биткоин далеко не первый и далеко не последний. Это просто пример того, что там появился value, какая-то ценность именно в этих монетках, — не как «отправить другу письмо» или «посмотреть фильм», а ценность сама по себе. Но сегодня мы говорим не о философии, а о технологиях. А в технологиях это первый пример системы, которая распределяет какую-то ценность в формате, не требующем доверия между участниками. Ни я не доверяю тебе, ни мы с тобой не обязаны доверять какой-то большой системе — банку или государству. Оттуда всё и пошло.

[05:22] Александр: Так, а с точки зрения софта как это выглядит? Что нужно, чтобы оно заработало? Вот торрент понятно: я скачал клиент, нажал кнопочку «скачать», потом «раздавать» — и оно работает. А если мы говорим про биткоин? Я сам никогда не занимался биткоин-майнингом, в жизни ни одной ноды не запускал. Допускаю, что на каких-то моих компах, за которыми я особо не следил, какой-то malware что-то намайнил, и что кто-то это делал в браузерах. Но лично я, сознательно, майнеры не запускал — кроме случая, когда работал в App3: там у нас были свои сети, и это было сильно позже биткоинских времён. Мы ещё придём к тому, что ушли от proof of work к proof of stake, где таких затрат ресурсов и электричества не так много. Это ближе к подъёму Кассандры, чем к подъёму большой сети. Но как это работает?

[06:06] Дима: Как в торренте, даже проще. Раз уж мы говорим совсем инженерно, давай чётко скажем: в мире торрента есть различие на уровне сетевого стека. Есть ключевая разница между протоколом торрента и торрент-трекерами — это два разных класса продуктов.

[06:20] Александр: О, кстати, чем отличается? Я вот не знаю. Что такое торрент, если говорить языком инжиниринга?

[06:22] Дима: Это самая большая в мире восстанавливалка файлов по их MD5-хэшу. Не знаю, может, уже SHA, но тогда, наверное, был MD5. Что такое фильм, который ты скачиваешь с торрента? У тебя есть, по-моему, это называется манифест-файл. Как полагается, большой файл делится на чанки — не помню, какого размера, может, поменьше. Условно, тысяча чанков. У каждого чанка есть офсет начала и конца, и ты знаешь его хэш-сумму, чек-сумму. Ты говоришь торрент-системе: хочу получить вот эти кусочки — вот название файла, вот индекс кусочка, вот его сумма, у кого такой есть — дайте мне. Торрент-узлы сами между собой обменяются информацией, у кого что есть. Но найти того, с кого ты можешь это скачать, — отдельная задача. Сеть индексированием, грубо говоря, не занимается. Есть сеть торрента, а есть индексеры торрента. В мире блокчейна тоже есть чейн, а есть индексеры. Торрент-трекеры — это индексеры. Даже если говорить языком продукта: на уровне протокола ты не можешь скачать файл быстро, если сам ничего не раздаёшь. Есть система репутации: если ты хранишь то, что людям нужно, и готов это раздавать, у тебя появляется право скачивать быстрее. Эти гарантии обеспечиваются протоколом — нет внешнего авторитета, нет централизованного сервера типа Cloudflare, который эту информацию трекает и может упасть. Это делают ноды между собой. Пока ты в своей пиринговой сети, качаешь те фильмы, что посмотрел твой сосед по общаге, — шанс, что между вами есть сиды, довольно большой. А если хочешь скачать что-то вообще из другой части этого графа, тебе нужно сначала найти, к кому идти, чтобы кто-то сказал: да, у меня это есть, или я знаю того, у кого есть. Вот это и есть индексеры, торрент-трекеры.

[07:58] Александр: А как, например, найти, если мы говорим про чанк? С MD5-хэшем понятно — берёшь, у кого файл с таким хэшем есть. А если про конкретный чанк, то там уже двойной ключ: сначала MD5-хэш, потом позиция чанка. Это и есть ключ поиска?

[08:12] Дима: Подожди, давай шаг наверх. Поиск по чанкам касается больше протокола. А когда ты ищешь как пользователь, ты ищешь не чанк — ты ищешь «хочу посмотреть фильм „Терминатор“». Вот когда ты ищешь по названию фильма — это работа индексера, работа торрент-трекера. Трекер сказал: вот тебе файл .torrent, вот список чанков с хэшами. Это первая часть задачи. Вторая — найти кого-то, у кого есть хотя бы один такой чанк. Обычно индексер знает не только метаданные — как из названия фильма получить список чанков и их контрольных сумм, — но и примерно какие-то айпишники, готовые эти чанки раздавать. В принципе, достаточно одного. Дальше уже пиринговая сеть скажет: у моего соседа есть вторая половина фильма.

[08:52] Александр: Окей, окей. Про торрент поговорили, возвращаемся к блокчейну. Мы остановились на том, как сеть самоорганизуется и как мы поднимаем ноду. Это же какая-то программа, какой-то демон — не знаю, на чём он написан, на C, наверное?

[09:06] Дима: Исходная версия — да. Самое главное, что в торрентах, что в блокчейне, что в биткоине, — найти своих пиров. Если у тебя есть три компьютера, ты можешь поднять на них майнеры, и они будут майнить свою сеть. Она может быть совместима с протоколом биткоина, но ничего общего с общими монетками иметь не будет. Ценность биткоин-леджера, конечно, в том, что он один на всей планете. И гений Сатоши — то, что называется Satoshi consensus, — это, по сути, и есть proof of work. Математика этих алгоритмов работает так, что всем выгоднее строить одну длиннющую цепь. Это немного как невидимая рука рынка по Адаму Смиту: можно спорить, работает она или нет, но идея алгоритма такова, что если ты запустил майнера, то рано или поздно найдёшь большую сеть, а когда нашёл — у тебя нет никакой финансовой мотивации майнить куда-то ещё. Максимальный reward ты получишь, дописывая самую длинную цепочку. Нет смысла строить альтернативную сеть, потому что оригинальная, самая большая, by design протокола притягивает к себе. Поэтому достигается всеобщий консенсус: сеть одна, и всем выгодно работать именно в её рамках.

[10:11] Александр: Да, в том смысле, что если под «смыслом» понимать желание получать и отдавать токены в общей сети — смысла нет. То есть технически всё ещё можно поднять свою биткоин-сеть на своих семи машинах, которая станет твоим собственным etcd, твоим собственным Paxos или Raft. Это возможно.

[10:27] Дима: Это можно сделать. Сегодня это не имеет смысла, а раньше — можно было. Но по смыслам: если понимать, что то, что я намайнил, не имеет ценности, а участвуя в сети, я помогаю другим людям удовлетворять их желание отдавать друг другу токены, — то да, смысла нет.

[10:45] Дима: Тут есть крайне важная штука, которую нужно проговорить. В конце 2000-х, когда это появилось, она была не так важна. Сегодня — супер важна. Давай сначала скажу короткую фразу, а потом объясню. В биткоине нет финалити. Точнее, есть, но вероятностная. В отличие от привычных нам баз данных, в сети биткоин просто нет понятия финализированной транзакции. Это реально важно понимать. В эфире она потом появилась, через много лет. В биткоине её нет до сих пор — и это часть того, чем комьюнити биткоина очень дорожит. Рассказать подробнее?

[11:07] Александр: Мне кажется, можно рассказать, что такое транзакция в биткоине, а дальше вырулить на финалити. Потому что, не понимая досконально, как работает этот алгоритм proof of work, будет сложно понять, о чём речь.

[11:21] Дима: Транзакция в биткоине — это банальный факт того, что я, хозяин какого-то приватного ключа, у которого есть какие-то токены, хочу отправить какое-то их количество тебе. Я знаю твой публичный ключ. Думаю, можно не останавливаться на асимметричном шифровании — что есть приватный и публичный ключ. Публичный ключ всегда публичен, это, по сути, номер твоего кошелька. Приватный ключ — то, что даёт тебе право этим кошельком распоряжаться. В леджере биткоина балансы не хранятся. Там хранятся проведённые транзакции — то, что она намайнила. По сути, табличка балансов derived, это вьюха над списком транзакций.

[11:56] Александр: Как write-ahead log, в который мы просто пишем, а потом по нему проходимся, чтобы посчитать баланс? Или это делается как-то иначе?

[12:04] Дима: Логически — да, хотя технически write-ahead всё-таки ahead, а в биткоине скорее behind. Это скорее materialized-вьюха. Более того, если тебя будут собеседовать в Web3, могут спросить, как писать индексеры, — и важно понимать, что в биткоине нет одной цепочки. Есть постоянно много цепочек, которые конкурируют за то, чтобы одна стала главной. Такое дерево гита, которое взрастает.

[12:21] Александр: Для тех, кто слушает без видео: Дима руками показывает.

[12:24] Дима: Дерево гита взрастает, а потом постоянно идут мерджи этих веток, и какая-то одна выигрывает. И ещё важная вещь: этот лог не из транзакций, а из блоков. В каждом блоке есть какое-то количество транзакций.

[12:33] Александр: По модулю этих двух вещей — да, так оно и есть. Раз уж мы заговорили про гит: конфликтов там, наверное, не возникает, просто мы делаем ретрай? Мерджа-то нет. Ну, по сути, не мердж, а — как это — ребейс. Не ребейс, а… господи.

[12:48] Дима: Не-не-не. Мы, в принципе, никогда не делаем ничего — у нас есть ровно одна операция. Вот был head commit. Я намайнил правильный хэш — какой-то новый блок, новый набор транзакций, — который дорисовывается вверх этого head commit. Первый, кто смог включить набор транзакций как input и выдать в качестве output хэш, удовлетворяющий некоторым правилам, — тот и записывает. А найти такой хэш сложно.

[13:11] Александр: Просто мне интересно, что с синхронизацией. Бывает ли, что в какой-то момент в двух разных точках планеты намайнили два разных таких хэша? И одновременно.

[13:23] Дима: Правильный вопрос. Мы очень скоро, вопроса через два-три, придём к CAP-теореме — она тут очень быстро влезет. Но идея в том, что одновременно в распределённых системах не бывает. Поэтому фраза «кто первый намайнил, кто первый нашёл» — немного лукавство, потому что понятие «первый» не имеет смысла. В мире биткоина физического времени как такового нет — есть логическое время: что произошло раньше чего. И чтобы получить reward, нужно не просто первым намайнить и первым забродкастить. Нужно быть тем, кого приняли в большую сеть, — а принимает majority. Ты можешь быть первым где-нибудь в Папуа — Новой Гвинее, но у тебя очень длинная цепочка до большого биткоина, который майнится на фермах между Казахстаном и Южной Америкой. И, sorry, ты оказался быстрее на полсекунды, но проиграл. Так бывает, и это всех устраивает: если ты реально упарываешься за майнинг, шанс, что ты озаботился хорошим интернетом, высокий. Понятие «физически первое где-то в какой-то точке вселенной» скорее отсутствует. А вот то, что ты засабмитил, оно, как торрент, стало расползаться, расползлось, влилось в самую большую цепочку и стало там следующим коммитом, — это есть.

[14:26] Дима: Давай я просто скажу про финалити блока — сразу будет понятно. Я сказал, что у биткоина нет финалити, то есть нет понятия «вот текущее состояние сети». Оно всё ещё может поменяться: сегодня может быть переписана история за вчера. Просто это крайне-крайне маловероятно. Как в мире физики: палка может сама подняться и полететь — броуновское движение это не запрещает, просто это настолько маловероятно, что во вселенной не случается никогда. Нужно, чтобы прошли триллионы триллионов вселенных, чтобы это стало хоть как-то вероятно. В мире биткоина у тебя всегда есть какой-то блок, и от него растут много голов. От каждой головы ты можешь листать назад N блоков, потому что каждый следующий коммит — это астрономическое количество вычислений. Есть консенсус: если блоки кажутся каждую секунду-минуту, и твоя транзакция попала в блок, который был пять блоков назад и больше, — шанс, что её перепишут, очень-очень мал. Была одна история, когда переписали блоков на двадцать назад, — реально одна, потому что выкатывали новую версию. Всё остальное время переписаться могут блок номер один или два: кто-то намайнил эти два, но другая часть большой сети, большой майнинговый пул, намайнил плюс три, потом это смерджилось, и те два проиграли этим трём. Но переписывать историю на десяток блоков назад настолько дорого, что никому не выгодно. Вот в чём мысль.

[15:30] Александр: Получается, что добавление каждого следующего блока в цепочку наделяет предыдущие блоки большей ценностью. Это как Merkle tree или что-то такое: твой текущий хэш включает хэши остальных, ты их подтягиваешь, и твои вычисления — сложные, долгие — подкрепляют всю цепочку назад, и следующие, и так далее. И чем дальше мы уходим, тем дороже пересчитать это заново.

[15:58] Дима: Всё так. В этом очень важная особенность всего этого дела: благодаря ей оно и работает — мошенничество в этой сети получается сложным.

[16:08] Александр: Интересно. Но как инженеры, давай ещё немного углубимся и рассмотрим, что за вычисления. Вот proof of work. Work — что? Посчитать хэш — это значит сделать что?

[16:19] Дима: Не уходя в дебри, говоря чётко языком инжиниринга: если забить на постквантовую криптографию — это отдельная сложная тема, — рассмотрим какой-нибудь хороший хэш, типа SHA-512. Вроде он и используется. Биткоин сказал следующее: чтобы твой блок приняли, нужно найти рандомный шум определённого размера, чтобы, будучи добавленным к твоему блоку — считай, что это тупо JSON с транзакциями, которые ты хочешь провести, — эта строчка, гипотетически 64-битная, размером с хэш, давала следующее. Чтобы две эти вещи, сконкатенированные, по SHA-512 начинались с какого-то количества нулей. В принципе, всё. Если считать SHA равномерно распределённым, то чтобы первые N цифр в hex были нулями, нужно перебрать 16 в этой степени попыток. Вот и всё. И не существует хака, чтобы сделать это быстрее.

[16:57] Александр: Не углубляясь в философию, в TL;DR — вообще во всём мире секьюрити на планете ты не можешь абсолютно ни от чего защититься, ты просто можешь сделать атаку сильно более дорогой, чем альтернативы. В мире блокчейна атаки, конечно, есть — фронтраннинг и всякое, разные схемы. А сама математика считается условно бесконечно надёжной на фоне всего остального.

[17:27] Дима: Мне кажется, самый хороший способ ответить на этот вопрос — взять аналогию с TLS, RSA, HTTPS. Ты вводишь пароль в собственном браузере для банка, вокруг может быть всякий malware, но плюс-минус есть консенсус: кроме случая, когда какой-то реально state actor — большая всепланетарная организация с кучей компьютеров — пытается вскрыть твой ключ RSA, с огромной вероятностью никто не перехватит весь трафик между тобой, твоим роутером, твоим интернетом. И даже провайдер не сможет узнать твой пароль от банка. Люди всё-таки доверяют криптографии — в большой степени. Есть долгие рассказы о том, что многие ключи настолько мощные, что считаются незаконными в куче стран, — это отдельная тема. Но идея в том, что криптография скорее работает, чем нет — если не брать постквантовые вещи. Представь, что мы живём в 2016 году: есть консенсус, что определённые математические процедуры в одну сторону работают, а в другую нет. Поэтому public/private key — это хорошо.

[18:21] Александр: Хорошо, доверяем. И, в общем-то, посчитать этот хэш статистически занимает какое-то ненулевое количество времени, и это не быстро.

[18:31] Александр: Посчитав хэш, что мы с ним делаем, куда отправляем? Мы же знаем пиров — находясь в сети, у нас есть информация о соседях. Мы им отправляем: вот вам новый блок, берите. И они включают его к себе и делают то же, что мы делали на предыдущем шаге.

[18:47] Дима: Всё так. Если хочешь поговорить про математику изнутри, давай я скажу два предложения про потенциальную атаку здесь.

[18:53] Александр: Прикольно, давай.

[18:55] Дима: Во всех блокчейнах есть понятие mempool — это транзакции, которые пока не попали ни в какой чейн. Следующий майнер может посмотреть, какие ещё есть запросы на транзакции, которые ещё не в чейне.

[19:05] Александр: Так, а что такое запрос на транзакцию?

[19:07] Дима: Это когда я говорю: хочу отправить тебе токены, и эта операция подписана моим приватным ключом. Каждый, кто знает мой публичный ключ, может проверить, что подпись валидна. Этому мы доверяем. Есть класс атаки, когда ты начинаешь какие-то транзакции специально не брать в чейн. Ты говоришь: у меня большой процент вычислительной сети, и я не хочу подписывать транзакции Димы. Я просто пишу if: если они от Димы — стараюсь их игнорировать, не хочу, чтобы они попадали.

[19:27] Александр: Denial-of-service-атака.

[19:29] Дима: Да. Если у тебя большой процент сети, ты можешь такое провернуть на какое-то время. Но если процент не огромный, рано или поздно тот, кто транзакцию втащил, оказывается в более выгодном положении — у него будет длинная цепочка. Поэтому долго поддерживать такую атаку ты не можешь. Эти вещи называются maximum extractable value, MEV-атаки. В мире DeFi, в эфире, они уже сильно пошли. Как есть фирмы, которые строят дата-центры между биржами, чтобы лишняя доля миллисекунды задержки сигнала давала преимущество, — похожие вещи есть в мире блокчейна, только там не миллисекунды: кто умнее, тот понимает, какие транзакции в каком порядке в рамках блока переставить. Вот эти вещи есть. Но чтобы ввести твой пароль, твой приватный ключ, — этого нет, это крайне маловероятно.

[20:10] Александр: Интересно.

[20:11] Дима: То же самое, кстати, относится к атаке «50% плюс 1». Есть странное заблуждение, что если кто-то может управлять больше чем половиной блокчейна, у него полный контроль. Это полуправда. Контроль есть, но транзакцию от меня тебе он инициировать не может, потому что не будет корректной подписи, которая удостоверяет, что я хочу отправить свои токены тебе. Контроль над биткоином означает, что можно какие-то транзакции заблокировать — условно, все от меня или все, кроме своих. Но чужие токены забрать нельзя.

[20:35] Александр: То есть контроль сети «50 плюс 1 процент» — что он тогда позволяет, если не даёт угнать деньги?

[20:42] Дима: Заморозить сетку. Большой DDoS. По сути, задинаить всё. Но если совсем будут борзеть, энтузиасты быстро сделают софтфорк и выиграют. Хотя это уже детали.

[20:54] Александр: Какие минусы у этого есть? Мы не поговорили про минусы блокчейна: работает — супер, а почему тогда появляются альтернативные технологии, почему мы ещё не пересылаем друг другу за кофе именно блокчейн?

[21:07] Дима: Очень хороший вопрос, давай аккуратно. Во-первых, почти все технологии будут блокчейнами. То есть понятия «минусы блокчейна» толком нет — надо разделять минусы блокчейна и минусы биткоина.

[21:15] Александр: Да, мы сейчас говорим про биткоин. Какие минусы у биткоина?

[21:18] Дима: Кстати, биткоин на самом деле не протокол, а семейство протоколов. Тот же лайткоин — это ровно биткоин под капотом. Даже, кажется, догикоин — тоже биткоин под капотом, просто с другими параметрами. Там есть трейд-оффы между перформансом, скоростью сеттлмента и количеством транзакций в блоке. Минусы биткоина, я бы сказал, делятся на две большие категории. Я не то чтобы большой энвайронменталист, но мне кажется не очень правильным, когда мы тратим синхронно такое количество электричества на то, чтобы Алиса прислала Бобу какое-то смешное количество токенов. С точки зрения классического систем-дизайна это не бред — точнее, тут важно правильно расставить акценты. Это бред, когда есть альтернативы. А когда биткоин появился, альтернатив не было. Я согласен, что с точки зрения классического систем-дизайнера перформанс леджера биткоина как базы данных прямо очень плохой — тут даже спорить не о чем. Но это был единственный способ построить леджер, который держит один инвариант, no double spend, и держит consensus по сеттлменту без доверия какому-либо агенту. Много раз звучала фраза: «Да возьми одну Postgres, или один инстанс MySQL, или одну Cassandra». Хорошо, пусть не одну — пусть распределённый кластер на 100 машин, раскиданный по планете. Это будет сильно-сильно эффективнее по всему: по трафику, по CPU, по нагреванию планеты, по времени сеттлмента. Факт, так можно сделать. Но ты построишь систему, у которой есть слабые звенья. А мы как цивилизация не научились делать так, чтобы «50% плюс одна» страна договорились и их регуляторы обязались это не трогать. Рано или поздно это будет дорого, но возможно атаковать: какие-то большие силы скажут «мы бы хотели это закрыть» — и хотя бы в теории смогут. Биткоин был первым решением, которое сделало то, что закрыть не могут. Потом появились другие. Proof of work при всей неэффективности был пионером именно этого подхода — за что ему нужно давать очень много уважения, респекта и кредита.

[23:12] Александр: Хороший пример с распределённой Кассандрой — будет работать. Что же отличает Кассандру, задеплоенную по миру, от биткоина? Одно слово — доверие?

[23:23] Дима: Ну, не одно слово. «Доверие» — это очень много разного. Может, в коде будет баг. Может, мейнтейнеры где-то ошиблись и данные можно закорраптить атакой. А может, это была умышленная ошибка: она пошла в апстрим, была сделана год назад, задеплоена во всех версиях, а потом бац — у меня есть уязвимость. Это другой уровень доверия. Это не доверие «кто-то попытается сделать атаку 50%». Это доверие, что в коде нет уязвимости, нет багов, что он математически корректно доказан и его не обманешь.

[23:50] Александр: Окей, согласен. Про альтернативы — сейчас они у нас появились. Какая, наверное, первая и самая популярная, про которую мы будем говорить?

[23:59] Дима: Давай сразу скажу, что я в этом не эксперт. Ты наверняка хочешь поговорить про proof of stake вместо proof of work — мы это всё обсудим в деталях. Но после этого было ещё 15 новых идей, про которые я знаю очень мало, так что рассказывать про них мне было бы некорректно. Про proof of stake точно поговорим. И, честно, мне кажется, инженерное повествование лучше вести с другой стороны: давай сначала перейдём от биткоина к эфиру, а потом от условного «эфира один» к «эфиру два» с proof of stake. Там будет не 1 и 2, а реально 5 и 6, но это детали.

[24:25] Александр: Про эфир я и хотел поговорить. Окей, давай идти хронологически. Эфир сегодня мы знаем как первую большую сеть, перешедшую с proof of work на proof of stake. Но это не вся история эфира.

[24:33] Дима: Когда эфир появлялся, я не знаю, были ли уже разговоры про proof of stake, но для Виталика это точно не было приоритетом тогда. Эфир появился как очень смелая идея виртуальной машины — эфирская виртуальная машина. Потому что в протоколе биткоина захардкожен не только алгоритм консенсуса, proof of work, — там захардкожены и варианты. По сути, есть два: no double spend, что ты не можешь потратить больше, чем есть, и правило, по которому майнер получает свои бенефиты. Ты майнер, потому что каждый новый блок приносит тебе какую-то копеечку, плюс каждая транзакция отстёгивает что-то тому, кто её подтвердил; можно оставить премию «на чай», чтобы твою транзакцию с чуть большей вероятностью включили в следующий блок. Это было закодено в протоколе биткоина. Это можно менять, и оно потихонечку меняется — какие-то мелкие вещи. Но, опять-таки, community биткоина супер консервативно. Их идеология в том, что каждый человек со среднемощным компьютером должен мочь участвовать в сети биткоин, чтобы их точно нельзя было атаковать: они супер-супер децентрализованы. А эфир по определению менее децентрализован. Есть категория людей — я к ним не отношусь, — которые считают, что могут «загнуться» все коины, кроме биткоина, из соображений security. Я в это не очень верю, но уважаю комьюнити, которое из этого принципа поддерживает биткоин как есть, не развивая в сторону усложнения. Это был детур. Теперь к делу.

[25:54] Дима: Эфир сказал: у нас же 21 век на носу, мы умеем считать любые формулы, у нас есть интерпретаторы, компиляторы, JIT-компиляторы. Давайте позволим участникам сети писать то, что мы сегодня знаем под названием smart contract. Когда правило, которое нужно соблюдать, захардкожено не в правилах блокчейна, а захардкожено правило того, как мы меняем правила. Ты можешь написать код, можешь иметь токен — это будет твой контракт, и все будут его исполнять. Там есть понятие gas fees — стоимость транзакции: чем сложнее код, тем больше токенов ты заплатишь, сожжёшь, чтобы этот код исполнить. Как у биткоина, у Сатоши, сошлась математика про proof of work, так у Виталика сошлась математика про исполнение произвольного кода в рамках безопасных математических гарантий. Это, на самом деле, взрывает голову: по сути, это распределённая по всей планете виртуальная машина, которая может исполнять код. Мы перешли от понятия «перевести деньги и не потратить больше, чем есть» к понятию, что в целом ты можешь исполнять код. Это очень круто. Поначалу это всё ещё медленно и не имеет юзкейсов, кроме тех, для которых был придуман биткоин, — какое-то гарантированное исполнение транзакции. Я сходу не скажу, какие вещи были первыми в эфире в плане контрактов, но очень быстро появилось то, что мы все знаем как ERC-20.

[27:18] Дима: ERC — это типа RFC для эфира. Для биткоина будут BIP, Bitcoin Improvement Proposal, а ERC — это Ethereum Request for Comments. Это очередная версия чего-то, что, возможно, пошло в продакшн.

[27:32] Дима: ERC-20 по-русски, грубо говоря, — это «хранить на леджере эфира». В сеть эфира добавляется знание о том, какие другие токены, потенциально из других сетей, принадлежат каким владельцам, каким кошелькам эфира. Что такое ERC-20? Есть монетка ETH, эфирная. А ты можешь запустить свой токен — это было, когда пошли всякие NFT, ICO и прочее. До ERC-20 было принято, что свой токен — это, по сути, свой полноценный блокчейн: свой код, своя сеть, свои энтузиасты, свой консенсус, свой леджер. Код может быть форком биткоина, но это всё равно своя сеть. Эфир сказал: смотрите, эти токены неизбежно нужно менять друг на друга. Тогда это делалось контрактами; сейчас есть более хорошие способы, всякие бриджи. Но тогда Виталик — или кто-то возле комьюнити Виталика — сказал: у нас же универсальная сеть, давайте будем местом, где люди могут хранить свои токены. Так и произошло. Ты можешь сказать: вот у меня есть токен сети ABC, который существует только как что-то, обмениваемое само на себя в эфире. Честный non-fungible token, NFT: я выпустил один или миллиард этих штук, и контракт эфира гарантирует, что больше миллиарда не появится, что их можно обменивать туда-обратно. Ты платишь косты в сети эфира, весь публичный леджер доступен, но гарантии соблюдаются. Я к тому, что такой тип кода работает в сети эфира с первых дней, ещё до proof of stake. На этом эфир и полетел.

[28:51] Александр: То есть, грубо говоря, эта виртуальная машина позволяет с помощью смарт-контракта задать такие правила, которые гарантированно позволяют менять одни монеты на другие в рамках сети эфир. Правильно?

[29:04] Дима: Я начал с того, что ты можешь их передавать друг другу, но менять, конечно, тоже можешь — это будет частью контракта эфира.

[29:09] Александр: А как это всё работает? Вот что интересно. Мне понятно, как работает биткоин: поднял ноду, она транзакции, хэши считает, передаёт. А как исполняется код? Там получается какой-то байт-код, есть аналог компилятора? Где это исполняется, на чьей машине? К каким данным код может обращаться, к каким нет?

[29:29] Дима: Думаю, поначалу он интерпретировался, а не компилировался. Байт-код там, несомненно, есть. Есть язык Solidity. Версий было много, были баги — в первых версиях серьёзные проблемы. Алгоритмически, как архитектор, я бы искал что-то знакомое: большая, сложная задача — выполнять кастомный код на виртуальной машине. Как это работает? Был Redis, а потом появился Redis + Lua. Был Postgres — или даже кто там ещё был раньше, всякие Oracle, серьёзные ранние базы — там довольно рано появились stored procedures. Ты можешь залить транзакцией какой-то шаблонный исходник; возможно, он компилируется, JIT-компилируется, возможно, нет — сейчас не так важно. Важно, что ты можешь сказать базе: вот моя операция, которую я заранее тебе описал, исполни её, пожалуйста. И она исполнит. Как инженер я понимаю, что в мире биткоина, где есть международный распределённый алгоритмический консенсус, это не так очевидно, как «выполни произвольный код». Но с точки зрения разработки протокола консенсуса всё плюс-минус то же самое. Просто вместо того чтобы подтвердить транзакцию перевода, ты подтверждаешь, что такой-то контракт привязан к такому-то адресу, исполняет такую-то версию такого-то кода, и что этот код был исполнен. Там есть детали с детерминизмом. Если мы доберёмся сегодня до Stateful Compute, я расскажу больше — мы про это много обсуждали с ребятами. Короче, ты не можешь использовать вещи типа локального времени, нет рандома — должен быть псевдорандом, иначе на разных нодах один и тот же код отработает по-разному. И, конечно, у него нет доступа к внешнему миру — он не может пойти в интернет на какой-нибудь айпишник. Это должна быть замкнутая система, сама на себя. И есть нюансы с индексированием: с одной стороны, есть леджер, который занимает огромное количество места, с другой — нода, которая занимается вычислением этого кода. Насколько я знаю, сегодняшний человеческий консенсус такой: нода, исполняющая код, может помнить последние N блоков, может сутки, а индексер обязан помнить всю историю. Если хочешь контракт, который смотрит совсем назад, — так нельзя, добавь что-то в индексируемые данные, это будет дороже, но зато исполнится гарантированно детерминистически, быстро и дёшево. Условно дёшево, условно быстро. TL;DR: простые варианты типа «перевести токены из A в B, если они не закончились» — можно.

[31:28] Александр: Наверное, проще всего объяснить на примере.

[31:30] Дима: Опять-таки, я могу не знать всей истории и сейчас ошибусь в деталях, но технически, наверное, не ошибусь. Большой класс ранних смарт-контрактов — это, собственно, DeFi, Decentralized Finance, идея финансовых инструментов.

[31:34] Дима: Поначалу ты можешь менять токены. У тебя есть ERC-20 и биткоин — WBTC, Wrapped BTC. Соответственно, ты можешь в сети эфира хранить биткоины. А раз можешь хранить, можешь поменять биткоин на эфир или на что-то другое. Этот обмен может быть транзакцией в сети эфира. Она будет довольно дорогой — сейчас биржи работают не так, — но сделать это можно. А когда ты начал менять, появляется желание дать в долг. Собственно, это и есть Decentralized Finance. Ты говоришь: у меня есть биткоин, я не хочу его отдавать, но готов заблокировать его в контракте, а взамен временно взять какое-то количество эфира под проценты. И так как это DeFi, тут всё честно, тут нет понятия «уйти в минус»: если курсы уехали не в ту сторону, ты просто потеряешь свой биткоин. Это называется collateral, залог. Зато ты можешь сейчас пользоваться эфиром, который, по сути, не купил, а взял в долг. И это открыло огромную индустрию финансов — просто наличие достаточно простого языка Solidity её заэнейблило. Как биткоин открыл индустрию передачи токенов друг другу, так смарт-контракты эфира открыли индустрию написания бизнес-логики, которая породила Decentralized Finance. Стало лучше?

[32:47] Александр: На примере стало чуть понятнее. Экономика в целом понятна. Но слушателям, которые куда-то в себя ушли, не помешал бы практический пример. Вот у тебя есть один биткоин, ты очень богатый человек. Что ты можешь с ним технически сделать, чтобы заиспользовать в сети эфира и получить бенефит?

[33:06] Дима: Важно уточнить, что значит «у тебя есть». У тебя есть приватный ключ от кошелька в сети биткоина.

[33:13] Александр: То есть мой биткоин хранится на леджере биткоина, и эфир про него пока не знает.

[33:16] Дима: Да. И если ты хочешь что-то с этим биткоином делать в сети эфира, тебе сначала нужно втащить его в эфир. Как это сделать? Насколько я знаю, тебе нужно сделать своп или бриджинг — это разные способы с разными степенями доверия к разным системам. Ты должен сделать так, чтобы на том кошельке в сети биткоина, где у тебя есть приватный ключ, этого биткоина больше не было — он переводится куда-то ещё, а у тебя появляется ключ уже в сети эфира. Эта транзакция проводится условно-атомарным образом, так что стороны не могут друг друга обмануть, и у тебя появляется доступ к чему-то эквивалентному биткоину, но уже в сети эфира. И там эфирские контракты могут им пользоваться.

[33:52] Александр: Мне интересно, как это происходит, потому что здесь как раз соединяются два мира. Где вот этот своп реально происходит? Какой-то конкретный человек сидит и меняет одно на другое, или есть утверждённый алгоритм? Ведь тут может быть множество атак: мы покидаем одну сеть с её инвариантами и входим в другую, и на этом моменте перехода всякое может случиться.

[34:14] Дима: Насколько я знаю современные способы делать этот бриджинг: бридж — это, по сути, компонент, задеплоенный где-то, который эту операцию выполняет гарантированно. Обычно есть волт, по сути казна, в которой хранится много токенов. И если эта казна хранится на сети эфира, прямо или косвенно — L2 на L2, L1 на L2, мы сейчас про это тоже поговорим, — то там лежат условно сотни миллионов долларов. А контракт, который позволяет какую-то часть этих миллионов собрать и распределить между участниками, если эта штука читит, — этот контракт публичный, аудируемый, все его прочитали. И тут мы потихонечку приходим к proof of stake с другой стороны. Есть Satoshi consensus, proof of work: он говорит «планета» — и работает. А второй философский подход к консенсусу — это когда участников меньше: не вся планета борется за то, кто первый из миллионов машин, а единичное количество машин спорят друг с другом. Но каждый из них сказал: я настолько гарантирую, что делаю всё правильно, что если вы меня уличили во лжи, то вот этот мой стейк достаётся вам. Я отвечаю своими деньгами, своими токенами. И даже важно, где именно захостен бридж. Ты можешь захостить бридж на Амазоне, там будет публичный endpoint — ради бога. Это не делает тебя нецентрализованным, не делает тебя не Web3-продуктом. До тех пор, пока гарантии того, что ты не можешь забрать токен и убежать, зафиксированы где-то в сети эфира или в другой сети со смарт-контрактами: есть правило, что если ты пропал, то средства вот таким образом распределяются между участниками. И дальше доверие переходит из технологической сферы в человеческую: люди этот контракт проводили, сказали «мы такие-то аудиторы, комьюнити доверяет, что этот контракт написан очень жёстко в пользу людей, а не платформы». Так это работает.

[35:52] Александр: И вот появился у меня на кошельке в сети эфир этот биткоин после бриджа. Дальше это уже монетка — аналог биткоина внутри сети эфир. Что я могу с ней делать?

[36:06] Дима: Ты можешь использовать её в любом контракте сети эфира — своём или чужом. Банальный пример — обменять её на что-то. Скажем, ты говоришь: хочу сегодня купить эфир. Идёшь к какому-то контракту, может быть, тоже бриджу, и говоришь: хочу купить это за это. Всё это можно сделать. Ты можешь поставить ордер: хочу купить, если в течение следующих 30 минут кто-то попадёт по такой-то цене. Это уже начинается биржа. И этот ордер будет тем самым Solidity-кодом — условия выражены алгоритмом на Solidity.

[36:36] Дима: Наверное, я перескочил два шага. Транзакции эфира всё-таки дорогие — не такие, как в биткоине, но дорогие. Расставлять ордера в сети эфира L1 — с этого, наверное, начинали, но сейчас так никто не делает. Логически — да, ты можешь написать ордер, где-то будет ордербук, умная структура данных, взаимный матчинг, какой-то код смарт-контракта, который транзакцию проведёт. С ордером я перескочил вперёд, к нему можем вернуться. Есть централизованные эксченджи, есть децентрализованные — у них разная степень доверия. Давай пока забудем про ордер и будем говорить просто про взятие займа. Ты говоришь: у меня есть биткоин, он стоит столько-то денег, я хочу его заложить и взять столько-то эфира. И тебе говорят: пожалуйста, пользуйся. Это легальный контракт в сети эфира, который много миллионов раз был заключён на этой планете. Ты можешь купить всякие NFT — к счастью, это закончилось. Можешь участвовать в ICO. Есть стейблкоины — какая-то централизованная организация в реальном мире говорит, что токен USDC, USDT (это совершенно разные вещи, называй как хочешь) чем-то обеспечен в реальном мире. Поэтому они дают достаточную гарантию: пока вы нам доверяете, мы всегда обменяем USDT, USDC на доллары и обратно, и вы можете пользоваться ими как долларами для оплаты. Это тоже полетело.

[37:47] Александр: И это всё внутри стандарта ERC-20, правильно? За счёт вот этого improvement от биткоина?

[37:52] Дима: Да, это всё в сети эфира, а ERC-20 — просто стандарт, как хранить ненативные эфирные монетки на леджере эфира в формате, доступном для смарт-контрактов. Но пару вещей я пропустил. Есть всякие индексеры, которые слушают все блокчейны, пишут, у кого что есть, — всякая аналитика. ERC-20 — это гораздо больше, чем просто контракт сети эфира: это куча экосистемы, накрученной поверх. Аналитика, аудит, анализ торговых стратегий — многие эти вещи заэнейблены ERC-20.

[38:17] Александр: В общем случае, да, такой получается improvement или RFC, который, по сути, заэнейблил целую экономику в рамках сети эфир.

[38:27] Дима: Да, именно так.

[38:31] Александр: Это круто. Теперь, мне кажется, мы подходим к proof of stake.

[38:33] Дима: Да, давай про него.

[38:35] Александр: Мы сейчас поговорим про proof of stake, а потом, наверное, пойдём к L2-сетям, если рассказывать аналогично. И про L1 проговорим, что это такое, а потом L2.

[38:43] Дима: Да, разговор про L2 не имеет смысла без разговора про L1. И, кстати, надо не забыть вернуться к CAP-теореме, потому что мы, суки, инженеры для инженеров — у нас подкаст вообще про базы данных.

[38:53] Александр: Тогда придётся точно вернуться к CAP и к L. Так, значит, сначала proof of stake. Что это за зверь?

[38:57] Дима: В сети биткоина, с тем, что сейчас принято называть consensus — proof of work, — за то, чтобы добавить следующий блок, соревнуются абсолютно все майнеры, играя «в планету». В этом весь смысл: раз требуется провести огромное количество работы, сжечь огромное количество джоулей, чтобы заминтить следующий блок и найти этот хэш, то incentive настроен так, что кто обогнал всех, тот получает максимальный бенефит. Идея proof of stake следующая: давайте соревноваться будут не все, а малое количество машин. Мы заранее псевдослучайно скажем, кто имеет право соревноваться за следующий блок, а остальные машины это проаудируют. То есть гарантии корректности присутствуют, но аудировать можно независимо и только то, что уже доказано, уже найдено. Идея one-way, как и с приватно-публичными ключами: в одну сторону очень дёшево, в другую очень дорого.

[39:54] Дима: У тебя, допустим, есть десятки тысяч валидаторов. По-моему, сегодня в сети эфира транзакцию подтверждают 128 — боюсь соврать, но это не так важно для обсуждения. Как это работает? Во-первых, у всех легальных валидаторов сети эфира есть «золочённый» стейк. Они сказали: вот я положил какую-то сумму денег — сегодня это, по-моему, тысяч 50 долларов — и готов её всю или часть потерять, если зачитерю. И это все видят. Через единицы секунд, если ты реально начнёшь подтверждать транзакции, которых не было, тебя очень быстро вычислят.

[40:17] Александр: А кто вычислит? Другие валидаторы?

[40:17] Дима: Именно. Там есть понятие баунти — очень красивая модель, я её очень люблю. С одной стороны, у тебя много-много валидаторов, у каждого золочённый стейк. Есть классное слово «токеномика»: на уровне токеномики сеть делает так, чтобы адекватный процент токенов было выгодно золотить в валидаторов — не много, но и не мало. Валидаторы получают, по сути, пассивный процент за то, что заложили деньги и готовы ими рисковать. Если золотить, скажем, 90% токенов, это уже невыгодно всей сети — замедляется движение токенов. Кажется, Виталик говорил, что должно быть больше четверти. Вроде такой сейчас консенсус — я могу отставать от реальности на год-полтора, но неважно. Итак, много валидаторов, у каждого золочённый стейк, который он готов потерять. Есть псевдослучайный, то есть детерминистический, алгоритм, который для следующего блока скажет, какие валидаторы — те самые 128 — имеют моральное право участвовать в подписании транзакции. Конкретно они получат reward за подписание, другие получат меньше. Но конкретно они и могут быть наказаны, если не сделают свою работу: они обязаны быть корректными и обязаны быть онлайн. Если в биткоине ты оказался офлайн на полгода — ничего не произошло, а в эфире тебя тоже накажут. Изволь заранее сказать: «сорри, у меня плохой интернет». Это довольно разумно, потому что люди хотят быстро и дёшево. Дальше эти машинки — которых не сотни тысяч, а всего 128 — между собой договариваются. Как в торренте, они совершенно не обязаны ходить каждая к каждой, но у них есть способ отправить сообщение, такой мини-бродкаст в этой маленькой сеточке. Они договариваются: вот наш консенсус, вот эти транзакции мы берём, вот хэш, вот подпись. Это гораздо более дешёвая операция минтинга: они ищут гораздо более дешёвый хэш, потому что нет необходимости подтверждать криптографический объём вычислений — есть необходимость подтвердить его только между собой. Есть первичный уровень — что они друг друга не обманули, — и вторичный, внешней большой сетью. Ты можешь выделить тысячу машин, и однажды majority из них попадёт в эти 128, и там ты будешь читерить. Тогда тебя накажут сначала другие эти машины, по чуть-чуть, а потом уже комьюнити — намного.

[42:17] Александр: Так, валидаторы, 128 штук. Что они делают конкретно, если мы говорим, например, про какую-то операцию — выполняем смарт-контракт? Какое отношение они имеют к процессу выполнения?

[42:27] Дима: Давай разделим бизнес-логику и консенсус. Что они делают — обладают ли контрактом или просто переводят транзакции а-ля биткоин, проверяют, что баланс не уходит ниже нуля, — на самом деле неважно. Важно, что они между собой порождают консенсус: вот эти операции в этом блоке выполнены. Они гарантируют: вот вам наша совместная подпись на 128, вот здесь 128 подписей, что этот блок будет следующим. Каждый из нас подписывается под тем, что эти транзакции корректны, не нарушают ни одного правила, каждый запрос подписан приватным ключом, ключи проверены, и все эти транзакции вместе в таком-то порядке можно выполнить — никто не ушёл в минус, все условия кода выполнены. Дальше виртуальные машины — это уже детали.

[43:09] Александр: То есть смарт-контракт выполняется условно где-то на большой сети, но за тем, чтобы выстроить эту цепочку, вместо того чтобы считать хэш и долго тратить время, я как пир иду к валидаторам и получаю следующую часть цепочки от них.

[43:25] Дима: Ты сказал три вещи, наверное, все правильные, но тут важна терминология, давай будем чепэшечки плясать. Само понятие физического консенсуса не существует в среде — только когда ты говоришь, что это есть где-то. А если это есть где-то на конкретной машине, эта машина может умереть. Когда ты говоришь, что транзакция есть, ты говоришь, что она есть в леджере, что она есть в сети эфира. Но нет понятия физической сети эфира — это распределённая, эфемерная сущность, на то она и эфир. Процедура логического добавления следующего блока в сеть эфира через proof of stake подразумевает, что есть математический процесс, по которому эти 128 кандидатов в валидаторы определяются и от них собираются совместные подписи. Говоря современным языком, это будет какая-то serial-цепочка, а остальные просто слушают. И когда в этой цепочке достаточное количество подписей — то есть мы доказали математически, что при таких подписях их уже не отозвать (они подписаны приватными ключами валидаторов, и если те зачитерят, нам есть кого наказывать большими деньгами), — они, наверное, не зачитерят. А даже если зачитерят, сеть от этого только выиграет: участники получат свои бонусы, транзакция не пройдёт, но ты получишь компенсацию. Логически: достаточное количество подписей собрано, оно забродкастилось, все его получили, как в торрент-сети, и это считается следующим блоком.

[44:36] Дима: Но раз ты спросил про это прямо, тут реально важно понимать: это всё ещё не финалити, это всё ещё может поменяться. Такие чекпоинты, когда вся сеть говорит «вот это жёстко зафиксированный набор транзакций», в эфире кажутся каждые полчаса. Это тоже важно. В биткоине всё вероятностно — можно и год назад что-то переписать, крайне-крайне маловероятно. В эфире тоже вероятностно, хоть и лучше, но далеко не каждый блок подтверждается всеми универсально. Формальная гарантия подтверждения — через какое-то количество минут, условно 15–30. То есть валидаторы, как в теории оптимизации, просто поставили кэш, но данные всё равно флашатся в основной сторидж когда-то потом. Они не являются основной сетью — они просто оптимизируют долгое время подтверждения транзакций всей сетью. В рамках этих получасов они быстрее отвечают, им доверяют, а потом вся сеть подтверждает.

[45:24] Александр: Когда этот чекпоинт происходит, в чём его суть, зачем он нужен?

[45:28] Дима: У него, скорее, символическая, ритуальная ценность: до этой точки мы историю точно не перепишем. Если хочешь написать систему, которая строит индекс леджера эфира и индексирует только то, что гарантированно не будет изменено, она будет отставать от хэда вплоть до получаса. Опять-таки, могу ошибаться в цифрах. Грубо говоря, если хочешь писать S3-файлики каждые полчаса, где этот Merkle-хэш точно не изменится. Я спрошу тебя: «Вот в сети эфира вчера в полночь какое было состояние?» Ты скажешь: вот снапшот, вот отсечка, вот все транзакции, вот база данных со всеми балансами, все контракты, все версии, все аудиты. Такая степень гарантии в эфире происходит, по-моему, каждые полчаса. В биткоине этого в принципе нет: если строишь биткоин-индексер, ты будешь делать некоторые ассампшены — скажем, что последние 20–25 блоков могут переписаться. Там несколько голов, на которые ты параллельно индексируешь, потом какие-то индексы схлопываются, какие-то выкидываются. В эфире ты можешь такое сделать, но полчаса — это много, поэтому считай, что для псевдо-реалтайма в последние полчаса тоже потенциально будет какое-то расхождение блоков и дерева коммитов. Это сильно менее вероятно, чем в биткоине, — я даже скажу, скорее невозможно. Но технически осуществимо: были ли такие случаи в истории человечества, честно не знаю, но алгоритмически сейчас сделано так.

[46:41] Александр: Окей. Что по L1, L2-уровням? Каждый раз, когда я это говорю, у меня сразу в голове L1, L2-кэш процессора.

[46:48] Дима: Кстати, у меня такая же проблема. К счастью, когда я погрузился в L3, я стал меньше работать с кэшами. Возможно, зря. Мне кажется, на уровне карьеры слишком мало инженеров работают с L1, L2-кэшами процессора — надо реально быть в оптимизации компиляторов и high-frequency-трейдинге, чтобы это имело смысл. Поэтому мне кажется довольно кармически справедливым, что L1, L2 — это слова, которые сейчас больше относятся к консенсус-сетям блокчейна, чем к CPU. Чтобы поговорить, что такое L1, L2, надо поговорить про CAP-теорему. В retro-aware мире мы знаем, что построить систему, которая всё и сразу, невозможно. Из трёх вещей надо выбрать любые две. Если она консистентна и доступна — не всегда переживёт разделение на кусочки. Если консистентна и переживает разделение — доступна не всегда. Если доступна всегда и переживает разделение — возможно, неконсистентна. Главная мораль для слушателя, который интересуется CAP: биткоин, в принципе, неконсистентен — как бы дико это ни звучало. Потому что нет гарантии, что вы видите актуальное состояние кошельков, что эти балансы корректны. То есть она есть, но вероятностная. Это способ, которым биткоин обходит эти ограничения.

[47:46] Дима: Дальше, если говорить языком академического computer science, есть понятие total и partial order. Есть полный total order, гарантированный порядок: для любых двух вещей из списка ты можешь сказать, какая была раньше. А есть partial order: если что-то было очень давно, а что-то недавно, ты знаешь, что давнее было раньше недавнего, но в рамках какого-то блока операций они плюс-минус рядышком, и мы by design не пытаемся понять, что из них раньше. Они как в одном блоке. Для стандартных архитекторов нашего времени, не Web3-шных: мы все знаем, как работает Kafka. В Kafka есть топики и партиции. Если у топика одна партиция, то у каждого сообщения в ней есть offset, конкретный индекс без пропусков — 1, 2, 3, и для любых двух сообщений ты знаешь, что было раньше. А если партиций несколько, то в рамках одной партиции порядок есть, а между партициями физически ты не можешь сказать, что раньше: было ли сообщение 25539 в первой партиции раньше или позже, чем сообщение 24787 в третьей. Ты это не можешь узнать — на уровне системы это не гарантируется. Будут какие-то снапшоты, внешние оркестраторы; если нужны гарантии, будет внешняя часть системы, которая хранит блоки offset’ов, — это всё можно обсуждать, но таких гарантий нет. При этом есть принятое мнение — которое я однажды собираюсь зачелленджить на этой планете, — что последовательная обработка, total order, достаточно медленная. Когда хочешь дикую-дикую масштабируемость, её гораздо проще получить, если запросы условно независимы друг от друга. Пример: у некоторых сервисов запросы вообще абсолютно независимы — скажем, коммерческая нейросеть: ты послал ей картинку, она обработала её какой-то моделькой. От того, что я послал запрос и ты послал запрос, системе ни жарко ни холодно: мой запрос влетел в один дата-центр, твой в другой, каждый что-то заплатил, система работает. А если мы с тобой чатимся — я послал сообщение тебе, а параллельно Вася отправил Пете, — то, опять-таки, эти вселенные могут не пересекаться. Проблемы начинаются, когда есть групповые чаты, когда люди чатятся между разными континентами, — вот там появляются вопросы порядка. Но в общем случае почти все большие системы разваливаются на кусочки, не связанные друг с другом. Какой-нибудь Google Doc: с одной стороны, важно, чтобы мы с тобой могли править его одновременно, с другой — почти всегда один док правит малое количество людей, плюс-минус в одной локации. Это дешевле и проще масштабировать, когда нет необходимости связывать кусочки.

[50:09] Дима: Собственно, я подхожу к идее L1/L2-сетей. L1-сеть подразумевает какой-то общий порядок. И proof of work Bitcoin, и proof of stake Ethereum — это L1-сети. Они медленные и дорогие, потому что, да, в рамках блока за транзакции можно переупорядочить, есть атаки на это, но это детали, — а блоки идут последовательно. Есть блок 1, блок 2. Блок 2 исполняется при условии, что блок 1 исполнен полностью, и с этим ты ничего не сделаешь. Люди быстро поняли, что для параллелизации, для throughput нужен какой-то шардинг. Вот L2 — это, собственно, идея добавить много шардов. Они все независимые, поэтому нагрузка на каждый сильно меньше, а потом между ними идёт settlement. По сути, любая большая система, работающая с одной большой Kafka, где в топике много партиций, а бизнес-логика как-то схлопывает их в единое целое, — вот эта схлопывающая логика и есть способ свести L2 к L1.

[51:00] Александр: Если очень грубо: если ты хочешь просто переводить токены друг другу, отправлять операции от меня к тебе, то ты шардируешь по кошельку отправителя, потому что гарантия на нём, правильно? Чтобы я не ушёл в минус. Берёшь условно 128 или 1024 партиции по последним N битам публичного ключа и получаешь логически независимые кластеры машин, каждый отвечает за свой маленький слайсик пространства кошельков. Они проводят свои транзакции быстро, там гораздо меньше консенсуса, гораздо меньше контеншена, меньше споров за то, кто был раньше. А потом раз в несколько секунд или минут они реконсилируются с большой L1-сетью. Там появляются все эти пресловутые zero-knowledge proof: можно просто Merkle-хэшом хэш залить туда, и он подтверждается всеми. Этого достаточно. Я много сказал, можно было уследить?

[51:44] Дима: Это хорошо. Стало сильно понятнее, когда ты взял конкретный пример с переводом.

[51:56] Александр: То есть у нас есть сеть из, допустим, тысячи машин для простоты. Мы берём хэш от кошелька отправителя, берём первые пять цифр, делим, не знаю, на тысячу, получаем индекс машины. Делаем так несколько раз и получаем десяток-другой машин, которые и у тебя, и у меня от твоего кошелька будут одни и те же. Мы их выбрали, сделали из них логическую подсеть. Они всё ещё в рамках общей сети, но мы их шардировали — взяли конкретные двадцать, сделали такую проекцию. По сути, это аналог партиции в Kafka. Мы попросили их выполнить наши транзакции; так как их меньше, они делают это быстрее, и, наверное, там может быть даже какой-то другой алгоритм. А потом они асинхронно, раз в полчаса или раз в минуту, добавляют факт исполнения этого смарт-контракта на этих машинах в общую последовательность транзакций, и это становится частью всеобщего хэша. И это интересно. Это похоже на Kafka, но только отчасти: в рамках партиции мы можем дать какие-то гарантии, и то, что мы делаем в рамках этой партиции, никак не аффектит остальные. Мы можем перегрузить диск конкретной машины, где партиция располагается, но система в целом работать будет и зааффектит только тех бедняг, кто в нашу партицию ходят. И это вся идея L2-сети?

[53:22] Дима: Всё так.

[53:24] Александр: Давай даже твои мысли обобщим. Я привёл пример Kafka, и ты его подхватил, потому что это более простой способ подсветить разницу между полным порядком, total order, и частичным, partial.

[53:34] Дима: Ну да. Но когда мы разрабатываем базу данных, у нас та же самая проблема. В мире сегодня нет одной реально полноценной распределённой базы данных, которая быстрая, дешёвая и гарантирует полный порядок всех транзакций. Исключение — Google Spanner, который, как мы знаем, использует физически атомарные спутниковые часы, чтобы максимально точно синхронизировать разные партиции. На практике у большинства баз данных, которые могут быть массивно распределёнными, транзакции обрабатываются долго, потому что для консенсуса надо обновить данные на разных континентах, а это сотни миллисекунд latency. И эти движки активно эксплуатируют тот факт, что транзакции очень часто независимы друг от друга. Земляной в Киеве дядька — это две разные транзакции, которые абсолютно не обязаны выполняться на одной машине. И у всех больших распределённых баз данных есть проблема как раз с контеншеном: внезапно появляется какой-то хотспот, один кусок данных, одно место, которое становится узким бутылочным горлышком для всего и замедляет всю систему. В базах данных мы обычно решаем это через CRDT, conflict-free replicated data types. Когда есть, скажем, тип атомарного счётчика, его можно преагрегировать на разных машинах, а потом просто суммировать суммы — это супербыстро. Но когда есть пример «Алиса отправляет Бобу токены, только если Алиса не ниже нуля», и начинается такой паттерн трафика, что Алиса отправляет 7, ей что-то приходит, и она постоянно около нуля, — это убьёт любую универсальную распределённую базу данных. Потому что хочешь не хочешь, при всех твоих тысячах машин есть какое-то одно ядро одного процессора, которое должно принять решение именно по этой транзакции: она больше нуля или меньше? Именно эту задачу решает эфир — это решение той же самой задачи распределённой базы данных, но с другой стороны, с другими гарантиями.

[55:15] Александр: И чем мы тут тогда жертвуем в CAP-теореме?

[55:19] Дима: Я не готов к этому вопросу, давай вместе думать. Availability вроде есть, факт?

[55:25] Александр: Получается, как и с консистентностью биткоина. Между точками этого финалити, которое каждые полчаса, технически сильно менее вероятно, но логически всё ещё возможно, что что-то откатят. То есть мы не можем на 100% сказать в текущий момент времени, произошло это или нет: есть вероятность, что сейчас произошло, а через две секунды не произойдёт. А что в такой ситуации делают приложения, которые эту логику запускают? Ретраят?

[55:45] Дима: Смотри, мы с тобой заранее договорились не идти в философию продуктовых и бизнесовых вещей, но это будет небольшое отступление, зато очень по делу. Я скажу две истории, обе по делу, а потом решим, как они связаны с реальностью. История номер один: как появилась амазоновская DynamoDB? Легенда, которая вроде как правда: однажды чуть ли не сам Безос сказал — ребята, у нас база данных, которая ошибается. Я нажал онлайн кнопку «добавить в корзину», и один раз на 10 тысяч операция почему-то не прошла. Когда Amazon был маленьким, было принято продуктовое решение: один из 10 тысяч — это 99,99%, всё получается, а если однажды предмет не добавится в корзину, и он реально важен, я добавлю его снова. Не такая большая проблема. Когда Amazon вырос до огромного размера, выяснилось, что просто починить это принесёт компании миллионы долларов в день. Потому что люди добавляют что-то в корзину, уже забыли, что им это было не очень нужно, и сами не добавят снова, — а компания на этом заработает. При маленьком размере это не имеет смысла, при большом — имеет огромный. И тогда становится обоснованным инвестировать человеко-годы разработки в то, чтобы система была консистентной, чтобы штука, добавленная в корзину, не терялась. Это первая история. Вторая — из Клеппмана, из «Кабанчика», моя любимая. Она очень хорошо иллюстрирует разницу между теорией и практикой. В теории есть люди — я к ним какое-то время относился, сейчас в меньшей степени, — которые считают, что код должен быть корректным, точка. Нельзя допустить некорректной работы кода, это самое главное. Например, у нас есть какая-то историческая ваза, осталась одна, её хотят купить два человека на Amazon. Логично, что мы должны одному отказать: сорри, она была одна, вы оба нажали одновременно, властью наших серверов считается, что Вася был первым, поэтому она уходит к Васе. И да, с точки зрения такого пуриста, система, которая один раз на миллиард, один раз в тысячу лет позволит одну и ту же вазу купить и Васе, и Пете, — неправильная. А с точки зрения бизнеса это полный нонсенс. Потому что хочешь не хочешь, рано или поздно в реальном физическом мире какой-то человек или робот эту вазу возьмёт и положит в посылку. Человек может её уронить. Я уверен, что в бизнесе есть процедура для такой ситуации: написать кастомеру, мол, извините, произошла чудовищная ошибка, вазу вы не получите, вот вам компенсация, гифткарта и всё такое. Поэтому, например, в утрированном случае с леджерами так работать не будет: одна транзакция на миллиард может сделать всю систему бесполезной. Но в реальном мире у тебя, как у бизнеса, есть трейд-офф. Ты либо инвестируешь всё больше ресурсов в систему, которая жёстко гарантирует всё быстро и эффективно, либо говоришь: меня устроит не стопроцентная гарантия, а 99,5 или шесть девяток — для самого кастомер-саппорта. Я пытаюсь сказать, что эта степень доверия не чёрно-белая: в какой-то момент ты как пользователь доверяешь какой-то гарантии, которая вероятностна. Твой вопрос был, как клиенты DeFi, блокчейна, Web3-сетей борются с тем, что где-то что-то может откатиться. Да никак не борются. Они считают, что этот риск их устраивает. В мире биткоина надо понимать, что хедблок может переписаться, это неизбежно. В мире эфира я уверен, что 99% продуктов, если история будет переписана, просто крашнутся, и потребуется помощь других людей, чтобы их перезапустить. И это всех устраивает, потому что это крайне маловероятно. Cloudflare упал позавчера, и весь мир оказался офлайн на какое-то время, — ну, нормально, планета из-за этого не остановилась. То же самое с блокчейном. В социальный контракт между Web3-миром и его пользователями не входит гарантия полной корректности всего и всегда. Все понимают, что иногда что-то по чуть-чуть может осыпаться. Но пока пользователей устраивает, что это происходит достаточно редко, — так и живём.

[59:26] Александр: Супер, крутой ответ. Мне кажется, мы тут прямо разобрались, можем идти дальше. Что у нас там по плану?

[59:33] Дима: Если мы близимся к завершению, я могу рассказать какие-то свои мысли про будущую компьютерную планету.

[59:38] Александр: Про DeFi мы нормально поговорили, упомянули царствие небесное NFT. Что-то ещё есть такое на слуху, что меня как конечного потребителя, а не инженера, может заинтересовать?

[59:49] Дима: Давай поговорим тогда про exchange, про DEX и CEX, потому что люди это смотрят, им интересно.

[59:58] Дима: Есть довольно глубокая мысль. Мы инженеры, мы дата-нёрды. Нёрдам свойственно решать интересные и сложные задачи — это, в принципе, и есть определение нёрда, гика: чем ты больше нёрд, тем интереснее решать абстрактно сложную задачу, и плевать, имеет ли она отношение к реальному миру. Из моего опыта, если ты хочешь заниматься высоконагруженными системами, где требуется реально глубоко понимать все эти гарантии порядка — по Клеппману, по «Кабанчику», — то с огромной вероятностью ты будешь работать с чем-то похожим на биллинг и аккаунтинг.

[1:00:03] Дима: Потому что если ты хочешь держать миллион транзакций в секунду, которые реально независимы, — это совершенно не проблема. Но когда появляется контеншен, какая-то связь между ними, когда что-то в одной части света может повлиять на другую и тебе нужно гарантированно это обрабатывать, — ты, скорее всего, окажешься связан с биллинговыми системами. То есть учёт каких-то микротранзакций, и эти транзакции обязательно финансовые. В TigerBeetle рассказывали про учёт трафика в мобильных сетях: ты звонишь кому-то, и у тебя капают секунды на балансе или мегабайты трафика. Сегодня почти все такие системы, что меня до сих пор удивляет, имеют задержку: почти все мобильные операторы позволят тебе немного уйти в минус. Кто-то простит, кто-то нет, но нет ни одной системы, которая прямо в ту же секунду — хотя бы в те же пять секунд — просто пропустит звонок. Потому что это оказалось сложно и никому не нужно на практике. Когда мы начинаем говорить про аккаунтинговые и биллинговые системы, следующий шаг — кому-то менее приятное осознание, но это правда: как только речь заходит про финансово аудируемые транзакции, очень быстро выясняется, что огромный процент трафика — в трейдинге. Люди хотят менять A на B и делать это алгоритмами. Алгоритмы могут быть даже тупые, необязательно писать супер-мощную стратегию, но львиная доля трафика, чтобы удовлетворять такие запросы, приходит из чего-то алгоритмического. И это обычно что-то типа ордербука: Вася хочет купить один доллар за какое-то количество евро, с точностью до шестого знака, вот такая цена его устраивает, а такая нет, в следующие пять секунд. Просто исторически так получается на планете, что компьютер идёт туда. Это не плохо, это факт. К чему я клоню: в мире до блокчейна это были биржи. Сначала — трейдерская яма, когда люди, как в старых фильмах, кричат «продаю столько-то акций того-то по столько-то денег», кто кого перекричит. Потом появились алгоритмические решения — всякие NASDAQ, NYSE, лондонская, токийская биржи. Московская тоже, кстати, одна из более продвинутых по тем временам, сейчас не знаю. И очевидно, что в мире блокчейна, как только появился ERC-20, разные токены и возможность обменивать одни на другие, появились желающие на этом заработать. Опять-таки, есть этически сложная тема, насколько это хорошо или плохо, — можно долго обсуждать. Я за десятилетия смог побороть в себе веру, что это плохо, — она была мне запрограммирована советским воспитанием. На самом деле трейдер получает малюсенький профит от всего процесса, поэтому они создают настолько много ликвидности, что с точки зрения рынка это хорошо. Сам факт, что мы знаем, какие цены «честные», даёт нам возможность нормально работать с капитализмом. Но это никого не обязывает, просто моё мнение. TL;DR: потребность менять разные токены друг на друга по разным курсам, с разными комиссиями, с разными временами исполнения ордера — «вот мой эфир, я хочу поменять его стопочкой, а ты живи пять секунд» — внезапно оказалась востребована.

[1:03:29] Александр: Переходим к делу. Как такие системы работают?

[1:03:30] Дима: В мире централизованных эксченджей — это конкретные алгоритмы. Наша аналогия «блокчейн versus Кассандра» в силе. Блокчейн даёт тебе гарантии распределённости и отсутствия необходимости доверять узлам: строить системы сложнее, зато эти гарантии есть. Если ты хочешь построить, допустим, Московскую биржу, очевидно, что поставишь какое-то количество машин — Primary, Replica, Leader, Follower, — и там будут храниться ордербуки. Всё понятно, как делается: форматы запросов известные, известная система, которая всё это обрабатывает. В мире Web3 появилась потребность сделать то же самое, но с гарантиями блокчейна: Merkle-хэши, zero-knowledge proof, что моя транзакция принята в ордербук, исполнена или не исполнена, что нет авторитета, который технически может украсть мои токены. И тут появляется дихотомия между централизованной и децентрализованной системой. Централизованная теоретически и практически даёт тебе меньше latency, работает быстрее, но ты ей доверяешь: там реально кто-то может просто взять кассу и сбежать, потому что, чтобы пользоваться токенами, ты, по сути, перевёл их на эту биржу. Мы, кстати, зря не коснулись понятия custodial и non-custodial кошельков. Либо ты хранишь ключи у себя — тогда только ты отвечаешь за то, чтобы не потерять их, и потерять их более вероятно, зато никто не знает, что это твоё, — либо ты хранишь свой токен где-то ещё, доверяешь кому-то хранить твой приватный ключ. Плюс — тяжелее потерять, минус — могут украсть, заблокировать, зарегулировать.

[1:04:53] Дима: Короче, TL;DR: децентрализованная биржа обрабатывает все ордербуки, все запросы в формате блокчейна. Нет единой точки — набора машин, кластера или единичных машин, — которым ты доверяешь и которые, сломавшись случайно или умышленно, могут украсть твои токены. Уровень доверия идёт к сети. Но при этом операция медленнее и, вероятно, дороже. А есть централизованные эксченджи — по сути, буквально тот же софт и хард, что у стандартной биржи, но ты доверяешь, что эти ребята твои токены не заберут, никуда не переотправят, не заблокируют твой аккаунт. То есть централизованные биржи — то же самое, что биржи были и раньше, просто они торгуют другими монетами, но никакого отношения к сети с точки зрения алгоритмов не имеют.

[1:05:39] Александр: А децентрализованные — это как раз те самые биржи, которые выполняются внутри сети. По сути, это исполняются смарт-контракты, или что?

[1:05:46] Дима: Да, всё так. Хотя слово «смарт-контракт» немного сложное, потому что изначально под ним понималась конкретно сеть эфира, конкретно Solidity, эфирская виртуальная машина, — а она довольно дорогая в исполнении. Технически сейчас есть смарт-контракты на L2-сетях, например в том же эфире, которые дешевле. Но термин «смарт-контракт» начинает терять смысл, потому что есть другие сети с более быстрым исполнением контрактов — всякие Polygon, Arbitrum (это L2), Solana, Avalanche. Я легко назову десяток, сделанных под более быстрое исполнение. Плюс есть очень важный момент, который для меня был новостью, когда я пару лет назад пошёл в Web3 серьёзно. Дело в том, что смарт-контракт по определению привязан к его автору, к кошельку. И, вообще говоря, ничто не мешает автору контракта его обновить. Есть некоторые правила, регламентирующие, что можно, что нельзя, но в принципе контракт можно сделать апгрейд-версией. Это бывает не в интересах того, кто в контракте участвует. Возможно, я сказал технически не очень корректную вещь, но смысл будет в силе: иногда ты хочешь, чтобы часть бизнес-логики была частью сети, а не контракта. Например, правило, как ордера матчатся в этом ордербуке, в этом стакане торговли, кто кому что продал. Выгодно построить так, чтобы, с одной стороны, это всё ещё была сеть, всё ещё блокчейн, доверие распределено, а с другой — чтобы эти ордера исполнялись не контрактом, который кто-то выложил, а контрактом, который, по сути, гарантирован самой сетью. Идея в том, что меры централизации немного сливаются. Даже у биткоина и эфира есть процесс, который меняет корневую логику сети. Биткоин это делает крайне редко, но тоже делает. Эфир — достаточно часто, есть какой-то комитет. Они понимают, что если начнут творить дичь, сеть форкнут, она опенсорсная, — поэтому дичь не творят. Это международный консолидированный способ, когда комьюнити гарантирует, что авторы не будут «себе на уме». Но это континуум, не чёрно-белое: чем меньше сеть, тем в большей степени её авторы могут творить дичь, её могут форкнуть или она может загнуться. Короче, максимально хорошо работающие сейчас децентрализованные биржи — это не смарт-контракты в общей сети. Это свои сети, заточенные под то, чтобы правила исполнения ордеров были закодированы логикой сети, а не логикой контракта. Поэтому это дешевле, быстрее, технического доверия чуть меньше, но реально достаточно.

[1:07:55] Александр: А какие-то примеры этих сетей уже существующих есть?

[1:07:59] Дима: Из централизованных все, наверное, слышали про Binance и Coinbase. Есть какой-нибудь Uniswap. Из децентрализованных — Hyperliquid, кажется, очень большая. Есть dYdX. У них, насколько я знаю, свои кастомные сети, свой proof of stake, свои валидаторы: ты можешь поднять ноду-валидатор, получать дивиденды, нужно будет заблокировать какой-то стейк, можешь его потерять, но при этом ты участвуешь в математике, в алгоритмическом сведении ордеров друг с другом, и участники этой децентрализованной биржи тебе за это благодарны.

[1:08:36] Александр: Хорошо. А вот мне интересно про эфир и про то, как там доставляются изменения — комитет, open source. Технически как это реализовано? У нас есть сеть, на которой установлены версии софта: у кого-то последняя, у кого-то предыдущая, у кого-то 10 версий назад. Как сделать процесс обновления таким, чтобы всё это обновлялось и жило? Обновления могут быть масштабными, а ты не контролируешь все машины. Мне кажется, тут есть челлендж.

[1:08:58] Дима: Я как-то делал эпизод митапа про блокчейн несколько лет назад, и тогда хотел сказать что-то нестандартное. Я ввёл понятие блокчейна как необычного способа деплоить код в продакшн.

[1:09:12] Александр: Да-да, хорошая мысль.

[1:09:14] Дима: По сути, да. Ключевая разница вот в чём. Либо ты управляешь своим железом — оно полностью твоё, физически у тебя в дата-центре, там твоя охрана, твоя администрация, или куплено на Amazon, — но ты управляешь точкой входа, можешь переписать DNS, когда Amazon упал, пересесть завтра на Google. А в мире Web3 нет того, кому ты платишь за железо, нет никаких гарантий — есть просто набор энтузиастов, и ты находишь разные способы их мотивировать. По этой логике, когда большая сеть с множеством узлов поддерживается энтузиастами… тут деликатный момент: почти все большие сети работают уже не на энтузиастах. Биткоин большие молодцы, что пытаются оставаться дружественными для энтузиастов, но все знают, что есть майнинговые фермы, и большая часть майнинга идёт через фермы. В других больших сетях типа эфира вопрос консолидации — кто занимается их мейнтенансом, их физическими машинами — довольно деликатный. Мы не такие децентрализованные, как хотелось бы. Я давно уже не крипто-энтузиаст, поэтому не так важно, но энтузиастам скажу: мир кажется от этого не таким уж децентрализованным, и видение Сатоши снова немного проваливается. Но идея в том, что неважно, энтузиасты это или хозяева майнинговых ферм. Ты как автор протокола — какой-то комьюнити, комитет, ключевые кор-контрибьюторы, Виталик в случае эфира всё-таки имеет довольно большой вес, — работаешь с комьюнити, общаешься с ними. Ты не можешь сказать «делайте вот так»: они могут обидеться и сделать форк, что однажды с эфиром и было. Это игра на взаимном доверии и уважении. Грубо говоря, если ты лично поднял ноду биткоина, ты можешь запустить какой-то бинарник, поднять его по крону, сделать системным демоном, чтобы он поднимался при ребуте, — и всё. А можешь сказать: я также запущу параллельный демон, который, когда версия кода обновится, запустит новую версию бинарника. Это твоё решение — как конкретного человека или как хозяина майнинговой фермы. Соответственно, как человек ты решаешь, откуда брать авторитетный источник знаний о том, что есть новая версия протокола. То есть ты заинтересован, замотивирован как человек обновляться.

[1:11:11] Александр: Да.

[1:11:13] Дима: Тут начинается очень прикольно, потому что децентрализация и централизация как-то переходят друг в друга. Если ты используешь Кассандру как свой бизнес на 100 машинах, кто решает, что пора обновиться на пятую версию, кто начинает этот процесс? Если у тебя большая компания — какой-то архитекторский, инженерный комитет: вы оцените косты, скажете «вот эти фичи требуют пятой версии, поэтому хорошо бы за полгодика обновиться», напишете план миграции, продумаете гарантии, что не сломаем и не потеряем данные. Это нормальный процесс: компания понимает, что если использует Кассандру, какое-то количество денег уйдёт на то, чтобы всё это не сломалось. То же самое здесь. Автор протокола — это, кстати, мой любимый механизм по жизни — работает так: там только пряники без кнутов. Тебе никто не запретит сидеть на старой версии. Просто рано или поздно, в какое-то адекватное время — месяц или годы — ты получишь меньше плюшек, и однажды, если выйдет мажорная версия, можешь остаться ни с чем. То есть тебя мотивируют обновляться, не запрещая что-то, а говоря, что early adopters получат чуть больше ревордов, потому что нам нужно это тело потестировать на кошках, обновить на маленькой сеточке. Это нормальный живой процесс, комьюнити реально живёт и взрастает. Я считаю, замечательно.

[1:12:18] Александр: Прикольно. А бывают такие апдейты, которые вносят несовместимость в протокол, и старый код в какой-то момент просто перестаёт работать? Или всегда поддерживается обратная совместимость?

[1:12:30] Дима: Бывают. Собственно, почему мир Web3 мне так близок к идее? Потому что такие вещи бывают, но их приходится заранее правильно оркестрировать. Ты находишься в частной огромной компании, Microsoft, Google, мейнтейнишь базу, которую использует весь Google. Если хочешь сделать большой апдейт версии, ты скажешь: ребята, я ещё шесть месяцев поддерживаю старую версию тоже. Давайте-ка я нашёл все 138 команд, которые мою базу используют, прошу их сделать изменения, кому-то помочь лично, где-то TikTok запишу, как сделать новую версию API, объясню, почему это хорошо. Всё это происходит и в мире больших сетей. Им репутация крайне важна. Люди — кор-мейнтейнеры, знатные комитеты — точно знают, что если они сильно облажаются, это и для планеты, и для экосистемы, и для них лично имеет огромную стоимость. Поэтому они стараются не лажать.

[1:13:20] Александр: Окей. Мне кажется, мы круто поговорили про эфир, особенно с каким-то вдохновением по поводу самой технологии. Я бы тут, наверное, сделал такой чекпоинт: мы же про минусы биткоина поговорили, а про минусы эфира — нет. Как будто бы это идеальная технология, или всё-таки есть что-то, что нас ограничивает?

[1:13:39] Дима: Это будет очень личное мнение. Я считаю, что биткоин очень ценен тем, что он такой легаси, который поддерживают энтузиасты, всё ещё верные миссии «мы должны быть децентрализованы», — такой антифрагильный, антихрупкий. Чем больше будет штормов в мире регуляции, государств, правил, не дай бог что-то серьёзное на планете, — тем больше шанс, что имя биткоина выживет. Эфир занимает промежуточную позицию: с одной стороны, планету он уже не греет — proof of stake и L2-сети, где вместо полного порядка мы работаем с частичным, сделали транзакции довольно дешёвыми. Примерно год назад транзакция биткоина стоила условно 50 долларов, транзакция эфира — условно 15, а транзакция L2 эфира (Arbitrum, Base, неважно чего) могла быть доллар или меньше. Насколько я знаю, сейчас это упало до десятков центов. Это уже вполне себе технология, которую можно использовать на планете. Если рассматривать лучший случай — не экзистенциальную угрозу и большие атаки против регуляторов всех стран, в чём я не очень разбираюсь и что оставим за скобками, — то с точки зрения перевода токенов туда-обратно и исполнения базовых контрактов технология эфир достаточно хороша, я так скажу. Как был условно Linux, BSD, Plan 9: Linux просто достаточно хорош, и за десятилетия стал серверной системой для всего. Я готов признать, что по модулю потенциальных больших атак эфир сегодня достаточно хорош. Я не знаю степени его децентрализованности, не знаю степени его снюханности с органами и кто реально может на него повлиять, — мы этого реально не знаем. В этом плане я рад, что есть биткоин. Если ты хардкорный Web3-девелопер, который строит свой протокол, свою биржу, ты, скорее всего, будешь писать какую-то свою сеть. Для этого есть всякие фреймворки типа Substrate, который я очень люблю, — это Polkadot’овский опенсорсный фреймворк. Я к тому, что если хочешь строить что-то своё, ты либо начнёшь совсем с нуля, либо возьмёшь фреймворк, явно не основанный на самом эфире. Но всё равно будешь использовать эфир как место, куда публикуешь регулярные хэши, просто чтобы комьюнити видело, что ты не жулик. Это довольно разумный ход: публиковать что-то каждые 10 минут дёшево, а если у тебя большая компания с миллионными бюджетами — можешь себе позволить. Это сразу даёт доверие, что человек не делает что-то непонятное на коленке, а реально хочет быть полноправным членом Web3-девелопер-комьюнити. Комьюнити пока скорее живое, мне кажется: есть понимание, что эти идеи должны жить и здравствовать.

[1:15:57] Александр: Окей, но, может быть, есть какие-то более светлые идеи будущего, в которые мы могли бы прийти? Я бы не сказал, что оно, знаешь, уже наступило, если мы говорим про Web3. Чего я не могу сказать про агентов, вайб-кодинг и программирование с помощью LLM — это уже наступило. А про Web3 так сказать не могу: где-то применимо, где-то работает, но повсеместно всё ещё не используется.

[1:16:19] Дима: Если не скатываться в глубокую философию, я скажу так. Да, вайб-кодинг с LLM, агентами, всякие курсоры очевидно полетели, это уже нельзя отрицать. Web3 с точки зрения простых смертных, наверное, целей, которые декларировались N лет назад, скорее не достиг. Но инженерно я всё ещё считаю, что это скорее успех. Вот аналогия, которую я приводил ещё до talks по Web3: как он появился, все эти шифропанки, PGP, шифрование туда-обратно, открытые ключи. Проиграли эти ребята? Очевидно, да. Они говорили в 90-е, даже в 80-е, что корпорации захватят интернет, а он должен быть децентрализованным. И сейчас всё идёт к тому, что его захватывают отдельные организации: Facebook, Google, Twitter, Instagram, Snapchat — это произошло, они скорее проиграли. Они предупреждали, что будет цифровое тоталитарное будущее, — оно наступило. Но при этом они и выиграли. Идеи end-to-end-шифрования сообщений прожали. Идея HTTPS — когда ты можешь на своём девайсе вводить пароль от банка в любой публичной сети и доверять, что, что бы эта сеть ни делала, твой пароль не утечёт, — полетела. То же самое с Web3. Web3-платежи в L2-сетях уже достаточно недорогие, и похоже, что с точки зрения адопшена на планете стейблкоины скорее перетянут, чем нет. Было много разговоров про то, что называется криптовалюта центральных банков, CBDC, — у меня очень смешанное чувство, не хочу сейчас про это говорить. Но идея, что клиринг может производиться через блокчейны как замена SWIFT, — технологически блокчейны железно работают. Административно — всякие санкции и прочее; в Web3 сейчас пытаются внести всякие KYC-протоколы, но это пока не очень летит. Пока SWIFT скорее живёт, а стейблкоины скорее только взлетают, потому что сильные мира сего в финансовых секторах не очень довольны, что есть что-то неподконтрольное. Но это абсолютно нормальный процесс, он никуда не денется. То есть я не считаю, что Web3 все свои обещания выполнил, но что технология живёт, здравствует и прекрасно работает — под этим я скорее готов подписаться.

[1:18:18] Александр: А с точки зрения технологий, которые интересные — мы можем про них поговорить, — но которые ещё не получили распространения, как упомянутый тобой HTTPS? Про что сейчас вообще, кроме LLM, можно поговорить?

[1:18:34] Дима: Давай аккуратненько закину две мысли, возможно, то, что хотят слушать твои слушатели. А может, мы, если время есть, ещё поговорим про них подробнее. Мне кажется, если уйти от чисто блокчейновых тем — стейблкоинов, платежей, — самое интересное, что происходит в мире Web3, — это как он влияет на мир Web2. Технологические идеи Web3 оказываются людям близки. Банальный пример. Мы говорили, что есть блокчейн, где публикуются всякие хэши — Merkle-хэш-руты, zero-knowledge proof, зекопруфы, старки, снарки. В мире Web3 это неизбежно: ты задеплоил контракт в любую большую сеть, и у тебя есть пруф того, что он исполнился. А когда ты пишешь что-нибудь в DynamoDB или S3, Amazon не даёт тебе гарантии, что этот файл никуда не денется, — ты просто ему доверяешь.

[1:18:54] Дима: Представь себе мир, в котором отправка файла на S3 и сообщение о подтверждении содержат в себе какой-то криптографический токен. И если файл потерялся, Amazon за это заплатит тебе 100 тысяч долларов, что резко перекрывает твои расходы. Гарантия Amazon настолько высокая, что они могут себе это позволить.

[1:19:39] Александр: Ты сейчас пытаешься подсветить мысль, что идеи Web3 влияют на Web2. Вот в Web2 здесь, например, влияния нет: в конкретной загрузке файла в файловый стор мы просто доверяем. Но есть идея, существующая внутри Web3, что мы, вообще говоря, можем доверять прямо на 100% — в виде подписанного криптографического ответа. И вот эта идея может перейти из Web3 в Web2.

[1:20:02] Дима: Идея может перейти давно, люди начинают этого хотеть. Когда ты посылаешь сообщение в Kafka — если ты принял решение ставить Kafka в своей компании, ты более-менее доверяешь её истории. Ты говоришь: Kafka обработала какие-то триллионы сообщений за 10 лет, наверное, они не потеряются; наверное, сделаю апдейт версии; наверное, атакеры не смогут украсть или подменить эти данные, потому что open-source-код — вряд ли туда впихнут эксплойт. Но это всё «наверное».

[1:20:30] Александр: Ну да.

[1:20:31] Дима: Благодаря влиянию блокчейн-комьюнити это, наверное, всё чаще становится чем-то более гарантированным. Если бы Kafka лет 10 назад сказала «мы также опубликуем zero-knowledge proof, что такие сообщения были добавлены в таком-то порядке», ей бы сказали: зачем вы это делаете? А сегодня это уже достаточно частый юзкейс, и может появиться как опция Kafka ещё в следующие пару лет. Правда, это плохой пример, потому что Kafka — это всё-таки on-premises, то, что ты деплоишь. А вот Amazon Kinesis, Amazon Lambda — отличная идея: давайте опубликуем какие-то категорические гарантии, чтобы вы, как клиент, могли заставить нас, сервис-провайдера, заплатить неустойку, если мы плохо держим какие-то вещи. Это, на самом деле, уже есть в больших B2B-контрактах. Я точно знаю, что когда ты пользуешься каким-нибудь Slack — большая компания, которая платит Slack миллион долларов в год, — ты можешь заключить дополнительную сделку: если Slack лежит больше 20 минут, у тебя значительная компенсация. Получить то же самое с Amazon пока нельзя, но становится всё более реально. И мне кажется, это чёткое влияние Web3 на реальный мир.

[1:21:42] Александр: Опять же, интересно, как, например, последний аутаж Amazon был отработан с его стороны к клиентам, которые потеряли деньги. Как оценивать масштаб ущерба и вообще выгодность — выгодно ли это Amazon, зачем это делать? Тут огромное количество вопросов возникает.

[1:21:45] Дима: Слушай, я глобально верю в рынок как философскую вещь, как совмещение предложения и спроса. Amazon, на самом деле, потеряет довольно мало, если заплатит всем компенсацию за такой инцидент, — инциденты редки. Более того, амазоновские экзеки, скорее всего, по секрету скажут тебе, что если задолбались требовать от своих команд гарантии durability, что ничего не сломается, — лучше пару раз заплатить большие штрафы, чтобы замотивировать менеджеров быть теми менеджерами, которые делают работающие решения. Это довольно грустная мысль: во всех конфликтах, на всех уровнях этого слова, симуляции работают хуже, чем тест реальности. Поэтому тесты реальности нужны. Но важно не то, как работает Amazon. Важно, что потребители всё больше этого хотят. Мы ещё живём в мире, когда вендор-локин клауд-провайдера реален: если компания плотно села на Amazon, она, скорее всего, в один клик не может пересесть на какой-нибудь Google — это слишком выгодно Amazon и невыгодно компании. Я думаю, мы потихонечку двигаемся в сторону параллельного мира. Идея «я пишу так, чтобы мог выбирать между Amazon и Google в своём бизнесе» не сработала. А идея «я пишу так, что мой код может работать так же в каком-то дезинтермедиированном облаке» — возможно, полетит на некоторых классах продуктов. То есть ты говоришь Amazon: смотрите, мы готовы вами пользоваться, но, чтобы, если клауд-провайдер снова накроется медным тазом, наши пользователи могли и дальше пользоваться сервисом, мы заплатим 3x за дезинтермедиированный хостинг, зато сервис будет доступен. Это появляется. И куча продуктов возле Web3 — всякие эксченджи, биржи, леджеры — вполне себе так и могут работать.

[1:23:57] Дима: Давай скажу другую важную штуку, потому что самое классное — это сочетание двух вещей. Первое я уже сказал: мы начинаем строить облака так, что они дают какие-то гарантии того, что произошло, и если облажались — это доказуемо, наказуемо, штрафуемо. Вторая большая штука: уже много лет в каждом компьютере, в каждом девайсе, в телефоне тоже есть secure chip. Это как-то многие забывают, но он есть.

[1:24:42] Александр: Да. Так, давай поподробнее.

[1:24:42] Дима: Используется он обычно в компах для апдейта BIOS. Если говорить языком Web3 пафосно — это, по сути, хардварный кошелёк в каждом компе, но это слишком круто сказано. Если приземлённее: так как хакеры становятся всё умнее, а пароли действуют всё проще, в любой большой компании у тебя будет такая физическая девайсина, в которую ты вставляешь комп и прикасаешься пальцем. Она генерирует код, который генерируется только при физическом нажатии пальца. Допустим, ты хочешь обновить продакшн: в большой системе ты просто физически не сможешь этого сделать, пока не прикоснёшься пальцем к этому токену. Даже если у хакера есть полный контроль над твоим компьютером, ему придётся ещё и заставить тебя нажать пальцем на эту штуку, что довольно сложно. В современных железках типа макбуков есть, например, понятие passkey. Думаю, все им пользовались, просто не очень понимали, как это работает. Когда ты хочешь залогиниться, допустим, в GitHub, ты должен приложить палец. Это не просто «приложить палец, и в коде браузера сказано: если приложен — continue». На уровне физического макбука есть маленький отдельный чип с отдельным сториджем для приватных ключей. По сути, для каждого нового сайта он генерирует отдельный публичный и приватный ключ: публичный отдаётся наружу, приватный хранится в этой штуке. И этот чип внутри макбука отрабатывает только тогда, когда ты прикасаешься пальцем к Touch ID. Эту гарантию даёт тебе Apple: ты доверяешь производителю, который жёстко-жёстко это тестирует. То же относится к телефону. Физически есть технология сделать такой чип, чтобы, даже если ты возьмёшь макбук и начнёшь напильничком, аккуратно, под микроскопом слой за слоем стачивать, ты не смог достать приватный ключ. Как хардварный кошелёк. Этих девайсов всё больше и больше. Максимально знаменит этими вещами последние пять лет Signal. Мессенджер Signal некоторые вещи — например, матчинг контактов — делает на секьюрном чипе, чтобы честно защитить: они твои контакты наружу не отдают. В протоколе Signal — да, он клоузсорсный, мне это не нравится, но в протоколе чётко сказано: мы твои контакты никуда наружу не посылаем. Но если кто-то из твоего списка контактов есть в Signal, мы тебе про это скажем. Алгоритмическое решение, которое хитрым образом хэширует, матчит на девайсе, и никто снаружи не узнаёт. Никто не мешает шифровать сообщения на секьюр-чипе твоего телефона. К чему я клоню: в больших компаниях он используется больше всего для апдейта BIOS — чтобы BIOS можно было обновить, только если он подписан приватным ключом производителя компьютера. Это довольно правильная штука. Многие не знают, но уже несколько лет на Amazon, Google, у кого угодно ты можешь брать машинку, чтобы делать вычисления на её секьюр-чипе. Ты платишь не сильно больше и говоришь: вот мой докер-образ, который я собрал из публичного гит-репозитория. И эта штука вычисляет что-то твоим докер-образом, а тебе, по сути, приходит буквально Merkle-хэш, который ты можешь опубликовать. Ты говоришь: смотрите, вот этот код отработал вашим запросом, мы, как авторы кода, не можем видеть ваши входные данные, а гарантия, что это был именно этот код, приходит подписанная приватным ключом — не амазоновским, а вендора этой железки, кто её произвёл. И вот это всё начинает резко расти. Внезапно люди поняли, что, с одной стороны, хочется меньше доверять тому же Amazon — строить систему, которая не требует полного доверия ни мне, ни Amazon, — а с другой стороны, полные гарантии, как в on-chain-мире, скорее не нужны: там latency больше, финалити позже, мы это обсудили. Зачем мне ждать десятки минут, если я могу получить сравнимые гарантии с точки зрения пользователя без всей on-chain-канители с этим византийским доверием? Вот это, мне кажется, круто.

[1:26:56] Александр: Да, хороший пример с этим чипом. Но тут, знаешь, главное — не спутать причины и следствия: кто на кого влияет и есть ли это влияние вообще, или какая-то более глобальная идея влияет и на Web3, и на Web2, просто Web3 — это более ультимативная, радикальная идея, а Web2 — более адаптированная. Может быть, влияет что-то другое: человеческая психология или общество.

[1:27:36] Дима: Мы обещали друг другу не выходить в философию, но какой-то эгрегор, который строит системы на меньшем уровне baseline-доверия друг другу, — он появляется, и это хорошо. Мир всё больше понимает, что базовое доверие платформе или облачному провайдеру может быть снижено, а система всё ещё надёжна. Я бы, на самом деле, сказал ту фразу немного жёстче. Сливая Web2 и Web3: я бы не сказал, что Web3 — это такая сложная фундаментальная дорогая штука. Я бы сказал, что это биткоин такая штука. А эфир уже сместился не на полшишечки, а процентов на 15–20 в сторону большей централизации. И с точки зрения инженерии это скорее хорошо: он быстрее и дешевле. Какая-нибудь Solana или NEAR ещё дешевле в транзакциях, они ближе к миру, когда ты почти работаешь с клаудом. Я бы тогда сказал, что это смещение уже происходит. Говорить, что Web3 напрямую повлиял на это, нельзя, но, думаю, дух меньшего доверия большим системам проникает в наше сознание на этой планете — частично благодаря тому, что Web3 скорее полетел, чем нет, хоть адопшена у него среди простых смертных пока не очень много.

[1:28:41] Александр: Да. Слушай, мы подходим к концу, и мне кажется, мы отлично поговорили. По крайней мере, я для себя структурировал вроде бы простые вещи, вокруг которых так много слов и терминологии, что, когда пытаешься сам разобраться, частенько хочется просто послушать человека, который может нормально объяснить. Думаю, слушателям тоже удалось что-то разложить по полочкам, узнать новое или вдохновиться поизучать что-то ещё. Вот если говорить о вдохновении, что бы ты сказал слушателям в последней рубрике — типа «я даю тебе микрофон, говори всё, что хочешь»?

[1:29:58] Дима: Наверное, две вещи. Вторая будет немножко ксенопиар, хоть я это слово не люблю. А первое: есть сфера программирования по фану. Люди приходят в 15–20, есть программирование индустриальное, карьера. Сейчас это всё, конечно, меняется — и LLM’ки, и AI, — но никуда не денутся фундаментальные знания. Фундаментальные знания алгоритмов из 90-х, даже, может, 80-х — всякой сортировки, структур данных — это всё полезно и важно знать. И, мне кажется, сегодня в полезное и важное знание входят не только такие абстрактные материи, но и Web2-штуки: браузеры, JSON, куки, базы данных, Kafka, Cassandra. В это потихонечку входит понимание, откуда берётся доверие к разным частям системы. И если вы хотите построить систему, которая какие-то вещи должна делать с большей степенью доверия — какой-то клиент скажет: «мы не доверяем хостингу в такой-то стране, мы бы хотели им пользоваться, но не доверяем», — то всё больше ценятся люди, которые могут об этом подумать заранее: вот эту штуку сделаем более децентрализованно, это выполняется в другом месте, а тут публикуются какие-то хэши, которые можно проверить, zero-knowledge proof. Это фундаментальное базовое знание. Базовое знание security всегда полезно. Если лет 10 назад надо было узнать, что такое приватные ключи в SSH — я вот узнал довольно поздно, мне было 20 с лишним, что можно ходить на продакшн-машину, не вводя пароль, что это в принципе secure, не менее, чем вводя пароль, — то такого рода знание постепенно появляется всё больше и переходит в сторону децентрализации, византийского консенсуса, проблемы двух генералов, proof of work, proof of stake. Это такая общая вещь. А на уровне самого PR — у меня же есть митап. Мы с друзьями по выходным пробуем, пытаемся думать, кодить, куда это всё пойдёт. И вот то, с чего я начал: хочется, чтобы облачный провайдер давал какие-то гарантии в форме того, что если он облажался, ты получаешь компенсацию. С точки зрения универсального вычисления я вижу, как эти два мира сходятся. Я вижу мир, в котором написание кода, работающего где-то в облаке, ведётся на таком языке, который позволяет, с одной стороны, получать дешёвое, быстрое исполнение — ты просто платишь за железо, условно, на Amazon, — а с другой стороны, этот же код даёт тебе полные гарантии в форме того, что никто его не подхачивал, не влез, за сравнимые деньги. Но выполняется он на централизованном облаке, на машинах-энтузиастах. И все гарантии у тебя есть, в форме подписей. С одной стороны, ты получаешь возможность, как в сети эфира, обновлять версии кода постепенно, интерактивно — best practices, GitHub Actions и всё такое, — а с другой стороны, ты реально не привязан ни к какому клауд-провайдеру, и пользователи понимают, что то, что ты делаешь с их данными, прямо полностью гарантированно — на уровне протокола, математики, алгоритмов, а не на уровне доверия. Мне кажется, в этом есть какое-то будущее, и мы пытаемся такое заберить как хобби-проект. Пока больше говорить не готов, но есть много блогпостов и хэштег #StatefulCompute. Ссылочки на блогпосты обязательно будут в описании к подкасту и в Telegram-канале подкаста «Тысяча фичей» — кстати, подписывайтесь, я там частенько публикую материалы, не только те, что в шоу-нотах. Так что, если вы не подписаны, заходите.

[1:32:22] Александр: А Диме большое спасибо, мне было очень интересно, надеюсь, слушателям тоже. Всем пока!

[1:32:25] Дима: Рад стараться!