Ты отправляешь монеты. Кошелёк вспыхивает зелёным. «Подтверждено». Ты откидываешься назад. Готово.
Нет. Не готово. Даже близко нет.
Эта зелёная галочка — ложь умолчанием. Она говорит тебе, что транзакция попала в блок. И ничего не говорит о том, будет ли этот блок существовать через пять минут. А зазор между «попала» и «необратима» — это ровно то место, где наивные теряют деньги. Продавцы, отгрузившие товар слишком рано. Трейдеры, поверившие балансу, который ещё не рассчитан. DAO, пометившие перевод финальным, когда сеть ещё не договорилась.
Финальность — вот настоящая вещь. Подтверждение — всего лишь слух, который пока не опровергли.
Два вида финальности, и не путай их
Есть два вида финальности, и путаница между ними — это способ быть обворованным.
Вероятностная финальность — это Bitcoin и ранняя история Ethereum. Твоя транзакция попадает в блок. Потом сверху строится ещё один блок. Потом ещё. Каждый блок сверху делает экспоненциально труднее переписать историю и вернуть твои монеты. Математической уверенности здесь не бывает — просто откат становится настолько невероятным, что мы перестаём беспокоиться. Одно подтверждение в Bitcoin — слабо. Шесть подтверждений (около часа) — старое отраслевое правило «достаточно безопасно» для крупных сумм. Не потому что шесть — магическое число. Потому что переписать шесть блоков стоит атакующему дороже, чем он украдёт.
Абсолютная (детерминированная) финальность — то, к чему тянутся proof-of-stake сети. В сегодняшнем Ethereum, когда блок финализирован аттестациями валидаторов — примерно каждые 12–15 минут, две эпохи — откатить его можно, только сжёгши не меньше трети всего застейканного ETH. Миллиарды долларов, сознательно преданные огню, чтобы отменить твою покупку кофе. Это не «наверное, безопасно». Это «атакующему пришлось бы совершить экономическое самоубийство».
Знай, в какой сети ты. Знай, какую финальность она даёт. Продавец, принимающий одно подтверждение Bitcoin за живые деньги, — это продавец, ждущий двойной траты.
Реорг — где «подтверждённое» стирается
Вот механика, которую не кладут в обучающий туториал: реорганизация, реорг.
Два майнера находят валидный блок почти в один и тот же миг. На мгновение сеть расходится — две конкурирующие версии «последнего». Обе легитимны. Сеть разрешает конфликт, следуя за цепью с наибольшей накопленной работой (или наибольшим числом аттестаций). Проигравший блок становится сиротой. Каждая транзакция в нём, которой нет в победившей цепи? Откачена. Разотворена. Твоя зелёная галочка — отменена.
Большинство реоргов — глубиной в один блок и скучны. Но случаются они постоянно, на кромке. А намеренный глубокий реорг — атака 51% — это ровно то, как работают двойные траты: отправь монеты, получи одно подтверждение, потом втайне построй более длинную цепь, где ты их не отправлял. Маленькие сети с дешёвой хэшрейт-мощностью ловят это по-настоящему. Это не теория.
Вот зачем существует «подожди подтверждений». Каждый блок сверху — ещё один блок, который атакующему придётся обогнать. Глубина — твоя броня.
Наша запись
На Весах Маат одно подтверждение — слово, произнесённое наполовину. Хека — творящее слово — связывает реальность лишь тогда, когда закончено. Нефинализированная транзакция — это Ба, ещё не осевшее в теле: присутствует, но ещё не реально, всё ещё способно раствориться. Исфет живёт в этом зазоре — реорг это Апоп, глотающий миг, казавшийся твёрдым, и выплёвывающий реестр на пару секунд назад. Финальность — перо, коснувшееся чаши и оставшееся. Приговор записан. Не обещание приговора. Приговор.
Не отгружай товар на обещание. Отгружай на записанный вес.
Чего это стоит в реальном мире
Хватит считать это мелочью для эрудитов. У этого есть ценник.
- Продавцы: прими платёж, дождись подтверждений, которых требуют твоя сеть и сумма, а потом отдавай товар. Zero-conf (действие по неподтверждённой транзакции) годится для кофе, безумен для машины.
- Биржи: именно поэтому твой депозит не зачисляется мгновенно. Они пережидают риск реорга с твоими деньгами. Этот «медленный» депозит — то, как их не обворовывают за твой счёт.
- Мосты и L2: кросс-чейн мосты ждут финальности в исходной сети, прежде чем чеканить в целевой. Мосты, срезающие этот угол ради ощущения «быстро», — те самые, которые вычищают досуха. Часть крупнейших взломов в крипте восходит к доверию транзакции, которая не была финальной.
- Казна DAO: не помечай выплату «рассчитанной» в учёте в тот миг, когда она уходит в сеть. Рассчитана — значит финализирована.
Суверенный ход: читай глубину сам
Тебе не обязательно доверять зелёной галочке. В этом весь смысл технологии — ты можешь проверить.
Открой блок-эксплорер. Вставь хэш транзакции. Найди счётчик подтверждений и найди, помечен ли блок финализированным. В сетях типа Ethereum лови метку «finalized», а не просто «включён». В proof-of-work сетях считай блоки, стоящие сверху, и сопоставь их с ценностью, которую двигаешь. Большие деньги — больше глубины. Просто.
Это мышца, которой никто не учит и которая нужна всем. UI кошелька — слой удобства, построенный, чтобы тебе было комфортно. Комфорт — не то же, что расчёт. Под дружелюбной зелёной галочкой лежит реальное, публичное, проверяемое состояние — и у тебя есть право и инструменты прочитать его напрямую.
Думай о финальности как о коммите в базе данных. Транзакция появляется в логе в тот же миг, как записана, — но пока она не закоммичена, откат сотрёт её. Любой, кто катил код в прод, знает: не верь записи, верь коммиту. Зелёная галочка — это запись. Финальность — это коммит.
Рычаг
Финальность — не паранойя. Это просто знание о том, когда высохли чернила.
Выучи модель финальности своей сети — вероятностная или абсолютная, и примерно сколько времени. Масштабируй терпение под ценность: кофе проходит за миг; перевод казны ждёт флага «finalized». Никогда не отдавай необратимую ценность против обратимого подтверждения. А когда сомневаешься — открой эксплорер и прочитай глубину собственными глазами, вместо того чтобы верить цвету.
Систему построили так, чтобы тебе больше не пришлось верить на слово посреднику. Не отдавай это доверие обратно — анимации в интерфейсе.
Дождись, пока вес осядет. Потом действуй.