В 2022 году зарубежные банки ввели повышенные бюрократические барьеры при открытии счетов гражданам России, тем самым затруднив вывод личных средств из страны и эмиграцию в целом. Это вызвано тем, что банкам приходится соблюдать нормы комплаенса, зависящие от местных законов. В противном случае их могут заставить платить крупные штрафы, либо вообще отозвать банковскую лицензию. Банки обязаны следить, чтобы крупные денежные переводы проходили по определённым договорам с уплатой соответствующих налогов. Риски, связанные с недостаточной проверкой биографии и благонадёжности клиентов, могут включать преследование в связи с финансированием терроризма, отмыванием денег, государственной коррупцией и вторичными санкциями при обслуживании российских клиентов.

Популярным способом обхода этих ограничений стали криптовалюты. В этой статье я разберу принципы их работы на примере биткоина и эфира. Здесь вы узнаете:

  • Что такое блокчейн и почему он устроен именно как цепочка связанных блоков

  • Что такое майнинг и зачем он потребляет столько вычислительных ресурсов

  • Что представляет собой денежная транзакция и почему транзакции в блокчейнах такие медленные и дорогие

  • Как работают системы «второго уровня» в сетях блокчейн-протоколов, и как они позволяют сделать транзакции быстрыми и дешёвыми

  • Что такое смарт-контракт

  • Как работают стейблкоины, такие как USDT

  • Есть ли способ сделать свои денежные операции по-настоящему анонимными, и можно ли с помощью криптовалют выйти из-под контроля всесильных финансовых регуляторов

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

1. Как работает Bitcoin

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

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

Предположим, что сосед купил у вас банку огурцов за 1 биткоин, после чего отдельной транзакцией купил у вас банку премиальных огурцов за 2 биткоина. Прошло несколько лет, и вы решили потратить 2.5 биткоина на покупку 5 новеньких КамАЗов.

В 2010 состоялась первая коммерческая сделка с биткоинами — пользователь Ласло Ханеч купил две пиццы за 10 000 BTC.
В 2010 состоялась первая коммерческая сделка с биткоинами — пользователь Ласло Ханеч купил две пиццы за 10 000 BTC.

Вы создаёте новую транзакцию, подаёте на неё 2 входа (на 1 и на 2 биткоина), и выводите из неё 2 выхода — 2.5 биткоина продавцу КамАЗов и 0.4 биткоина самому себе, а 0.1 биткоина оставляете на (весьма щедрую) комиссию майнеру, который будет эту транзакцию обрабатывать. У любой транзакции может быть любое количество входов и любое количество выходов. Причём общая сумма биткоинов на входах должна быть равна количеству биткоинов на выходах. Помните, я говорил, что деньги для новых транзакций берутся из существующих транзакций? Говоря конкретнее, деньги берутся из выходов существующих транзакций, и если вы используете такой выход при создании новой транзакции, то этот выход будет потрачен полностью. Непотраченный выход называется UTXO (unspent transaction output). Рядом с блокчейном хранится такая структура данных, как список непотраченных выходов (UTXO pool или UTXO set). Выходы для создания новых транзакций берутся из этого пула, а при подтверждении транзакции удаляются из него.

Доступ к непотраченным выходам вам даёт закрытый ключ шифрования, хранящийся в вашем биткоин-кошельке. Чтобы понять, как это работает, нужно сперва ознакомиться с концепцией асимметричного шифрования. В отличие от симметричного шифрования, в котором сообщение шифруется одним криптографическим ключом и им же расшифровывается, в асимметричном используется два ключа. Сообщение, зашифрованное первым ключом, может быть расшифровано только вторым ключом. Один из этих ключей называют публичным — его можно беспрепятственно публиковать в открытых источниках и открыто распространять по сети. Второй ключ называют приватным, и его следует хранить в надёжном месте и никому не показывать. На этом принципе работает электронная цифровая подпись. Если некий сервер пришлёт вам зашифрованный документ, и вы сможете расшифровать его открытым ключом сервера, то вы можете быть уверены, что этот документ выпущен и подписан этим самым сервером, потому что никто другой не смог бы его так зашифровать. В транзакциях биткоина используется несколько другая математическая обработка ключей, но основана она на тех же самых криптографических алгоритмах.

Чтобы обзавестись биткоин-кошельком, нужно сгенерировать приватный ключ асимметричного шифрования и на основе этого приватного ключа сгенерировать публичный ключ. Если кто-то захочет перевести на ваш кошелёк биткоины, то (в грубом приближении) он будет переводить их на ваш публичный ключ.

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

Если посмотреть на структуру транзакции, то криптографическая задача для разблокирования UTXO хранится в одном разделе транзакции, а важные параметры (такие как сумма денежного перевода) — в другом. Представим ситуацию, что вы договорились отправить кому-то 5 биткоинов, и решили использовать для этого UTXO на сумму 10 биткоинов. Это значит, что вы создаёте транзакцию с 2 выходами - 5 биткоинов получателю и 5 себе (пока забудем про комиссию майнерам). Допустим, что получатель успел перехватить вашу транзакцию до того как она попала в сеть, и заменил значения в её разделах на 10 и 0 соответственно, таким образом обеспечив, чтобы 10 биткоинов отправились на его счёт, и 0 — на ваш. Чтобы такие атаки были невозможными, в криптографическую задачу, блокирующую выход транзакции, добавляется проверка цифровой подписи всех данных новой транзакции, включая суммы переводимых средств. Злоумышленник просто не сможет составить корректную транзакцию с другими суммами, потому что не сможет подписать её вашим секретным ключом.

Баланс вашего биткоин-кошелька — это совокупность всех UTXO в блокчейне, которые вы можете потратить, используя свой приватный ключ. Если кто-то украдёт этот ключ, то он получит доступ ко всем вашим биткоинам. Если вы потеряете свой секретный ключ без возможности восстановления, то все ваши биткоины окажутся потерянными для человечества — никто и никогда не сможет их потратить.

Теперь вернёмся к «абстрактному месту», в котором хранится блокчейн. Работу сети биткоина обеспечивают десятки тысяч компьютеров, которые называются фулл нодами (Full Node). Предположим, что каждый из них хранит копию всего блокчейна. То есть история всех транзакций в сети биткоина хранится распределённо на множестве компьютеров, что делает практически невозможным для какого-либо государства парализовать работу этой сети. Ноды постоянно обмениваются данными о новых подтверждённых транзакциях, и текущее состояние блокчейна постоянно синхронизируется между нодами. Это делает невозможным для владельца отдельной ноды подменить историю транзакций.

Блокчейн биткоина по состоянию на ноябрь 2024 весил 600 Гб. Это почти двухкратный рост за последние 4 года.
Блокчейн биткоина по состоянию на ноябрь 2024 весил 600 Гб. Это почти двухкратный рост за последние 4 года.

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

Ещё одна структура данных, с которой работают фулл ноды — это очередь неподтверждённых транзакций, которая называется Mempool. Неподтверждённые транзакции распространяются по сети между фулл нодами, но обязательная и полная синхронизация со всеми нодами здесь не требуется, в отличие от блокчейна.

На самом деле, не все фулл ноды хранят все 600 Гб истории блокчейна. Для поддержания работы сети и проверки транзакций, попадающих в Mempool, достаточно хранить какое-то количество последних блоков и актуальный пул UTXO. Кроме того, ноды не поддерживают связь и не синхронизируют данные напрямую с абсолютно всеми фул нодами в сети биткоина — но тем не менее, они образуют единую децентрализованную сеть, в которой актуальное состояние блокчейна из одной ноды всегда приходит во все остальные ноды.

Кроме хранения самого блокчейна, пула UTXO и Mempool-а, ноды обеспечивают проверку корректности новых транзакций перед их добавлением в Mempool и проверку корректности всех блоков перед их добавлением в блокчейн.

Блок — это особый контейнер, содержащий в среднем несколько тысяч транзакций. Блокчейн, как следует из названия, является цепочкой блоков. Перед тем, как объяснять, что такое блок, я должен объяснить, что такое хэш.

Хэш — это число, которое хэш-функция генерирует из произвольной последовательности входных данных. В биткоине используется алгоритм хэширования SHA256. На выходе из хэш-функции этого алгоритма получается 256-битное число. На вход хэш-функции подаются данные любой формы и любого размера. Это может быть собрание ваших любимых фильмов, комплект технической документации, рецепт чесночного варенья или просто число 2. В любом случае, на выходе вы получаете абракадабру из 256 битов. Причём разные данные дают на выходе разный хэш, и даже изменив во входных данных всего одну букву, при хэшировании вы получите совсем другой набор битов, ничем не напоминающий предыдущий. Поскольку количество вариаций произвольных входных данных равно бесконечности, а количество вариаций 256-битного хэша равно 2256, нельзя каждому возможному набору данных поставить в соответствие уникальный хэш, поэтому неизбежно будут встречаться разные наборы данных, для которых алгоритм хэширования будет выдавать одинаковый результат. Такое явление называется коллизией. Математически, хэш-функции составляются таким образом, чтобы вероятность коллизий была исчезающе мала, а поиск коллизий был практически невозможен.

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

Ещё одно полезное свойство хэша SHA256 (и многих других алгоритмов хэширования) — это то, что вычисление хэша от данных происходит за доли секунды, а нахождение таких данных, которые на выходе из хэш-функции дают заданный хэш, занимает миллионы и миллиарды лет. Упрощая сказанное, хэш-функция очень быстро вычисляется в одну сторону, и очень медленно — в другую. Это оказывается полезным, например, в системе авторизации клиентов, когда сервер хранит не пароли пользователей, а хэши от этих паролей. В памяти сервера обычно хранится таблица, которая для каждого клиента содержит логин, хэш пароля, емейл и некоторые другие данные. Во время аутентификации, клиент присылает серверу пароль, сервер вычисляет хэш этого пароля, и если он совпадает с хэшем, указанным в таблице для этого клиента, то сервер предоставляет ему токен доступа. Даже если злоумышленники украдут базу данных с таблицей аутентификации, они получат не сами пароли, а только их хэши. С помощью хэшей они не смогут авторизироваться на сервере и получить управление пользовательскими профилями, поскольку сначала им придётся для каждого пользователя восстановить пароль из хэша, потратив на это миллиарды лет.

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

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

Из чего состоит блок
Из чего состоит блок

Эти 2 параметра введены для того, чтобы превратить формирование блока в долгий и вычислительно сложный процесс. Посчитать хэш предыдущего блока, корень дерева Меркла от всех транзакций, записать список всех транзакций и добавить timestamp (дата и время формирования блока) — это быстрая операция, не требующая больших вычислительных ресурсов. Благодаря nonce и difficulty target, эта простая работа превращается в задачу для майнинговой фермы — специализированного суперкомпьютера, собранного либо из видеокарт, либо из процессоров ASIC, разработанных специально для целей майнинга. Эти предприятия по всему миру тратят неадекватное количество электроэнергии, приближают глобальное потепление и периодически устраивают взрывной рост цен на видеокарты, вызывая фрустрацию геймеров.

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

Задача майнера в том, чтобы взять нужное количество транзакций из Mempool-а, собрать из них блок, включить в него произвольное число (тот самый nonce), посчитать хэш от всех этих данных, посчитать хэш от полученного хэша и сравнить его с difficulty target. Если хэш получился больше, чем таргет, то берётся другой nonce, и операция повторяется. Майнер перебирает разные значения nonce до тех пор, пока хэш не станет меньше, чем difficulty target. Сколько у него на это уйдёт времени, зависит от везения и от располагаемых вычислительных мощностей. Вычислительная мощность устройства для майнинга измеряется таким параметром как хэшрейт — это количество хэшей, которое устройство вычисляет за 1 секунду. Общий хэшрейт всей сети биткоина на ноябрь 2024 года составляет 753.5 квинтиллиона. Для владельцев майнинговых ферм, независимый майнинг является не слишком перспективной идеей. Большинство из них предпочитают объединиться с другими майнерами в mining pool и вместе работать над вычислением одного и того же блока, а прибыль делить пропорционально вложенным вычислительным мощностям.

Может показаться, что скорость вычисления блока в сети биткоина должна определяться вычислительной мощностью самого крупного майнинг пула, поскольку он вычисляет блоки быстрее всех остальных участников сети. После того, как он опубликует очередной блок, работа остальных участников окажется напрасной, и они вынуждены будут её прекратить и начать вычисление следующего блока — который опять с наибольшей вероятностью будет вычислен крупнейшим майнинг пулом. На самом деле, внутри одного пула майнеры согласованно подбирают разные значения nonce, а разные пулы майнят блоки с разным содержимым, и вероятность, что два майнера будут вычислять один и тот же хэш, исчезающе мала. Таким образом, нельзя сказать, что два майнинг пула соревнуются в скорости выполнения одной и той же работы. Скорее, они выполняют общую работу по нахождению нужного nonce, и скорость выполнения этой работы определяется хэшрейтом всей сети биткоина, а не хэшрейтом самого крупного майнинг пула. Успех нахождения каждого конкретного блока определяется везением, но на большом промежутке времени, согласно законам статистики, блоки распределяются пропорционально долям в вычислительной сети биткоина. Можно сказать, что если Foundry USA принадлежит 30% всех мощностей, а AntPool — 25%, то Foundry USA находит 30% новых блоков, а AntPool — 25%.

Новый блок добавляется в блокчейн раз в 10 минут. Если вычислительные ресурсы майнеров увеличиваются, то алгоритмы биткоина понижают difficulty target, тем самым усложняя задачу майнинга, с тем чтобы скорость появления блоков сохранялась на уровне «1 раз в 10 минут». Пересмотр таргета происходит каждые 2016 блоков (примерно раз в две недели).

Вознаграждением за работу майнера, помимо комиссии пользователей, является эмиссия фиксированного количества биткоинов, которые буквально берутся из воздуха. Размер эмиссии называется наградой за блок (block reward) и уменьшается в 2 раза каждые 210 000 блоков. В апреле 2024 награда за блок снизилась до 3.125 BTC, а в 2028 она снизится до 1.5625 BTC. Благодаря регулярному снижению награды, заложенному в алгоритмы биткоина, общее количество биткоинов никогда не превысит предела в 21 млн. Дефляция биткоина была изначально заложена в его протокол на этапе проектирования.

Награду за блок и сумму всех комиссий майнер переводит себе, включая в блок транзакцию особого типа под названием «Coinbase». Она не тратит никаких выходов из UTXO pool и располагается в начале списка транзакций в каждом блоке.

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

Благодаря сложности вычисления блока, ветвление в сети блокчейна — это относительно редкое явление. Вероятность, что два майнера одновременно сформируют корректный блок, достаточно низка, а ещё ниже вероятность, что это случится два раза подряд, и в сети появятся две равноправные ветки длиной в два блока. Вероятность, что это повторится в третий раз — ещё ниже. В конце концов, неизбежно появление нового блока только в одной ветке с последующим вытеснением другой ветки как более короткой.

Из-за ветвления, существует рекомендация считать свою транзакцию состоявшейся только после получения 6 подтверждений, т. е. после того как транзакция попадёт в блок, и за этим блоком будет добавлено ещё 5 блоков. Если вы назначите достаточно щедрую комиссию, и майнер соизволит включить её в очередной блок, то после этого вам останется подождать примерно 50 минут, и при определённом везении вы со спокойной совестью сможете считать, что ваша сделка прошла. В сфере обычных банковских переводов такая скорость операций не считается приемлемой, но такова плата за анонимность платежей. В сети биткоина действует технология «второго уровня» под названием Lightning Network, которая обеспечивает приемлемую скорость транзакций и низкие комиссии, но об этом будет рассказано позже.

Требование к майнерам затрачивать большие вычислительные ресурсы на формирование блоков — это механизм консенсуса, который называется «Proof of Work» (PoW). Консенсус — это процедура, с помощью которой все участники сети подтверждают корректность транзакций и приходят к соглашению о том, какую историю транзакций считать подлинной.

Теперь, когда у нас есть глобальное понимание системы, можно задаться вопросом, зачем вообще нужна связность блоков, и зачем нужен PoW.

Что будет, если отказаться от связности блоков, т. е. убрать из состава блока ссылку на предыдущий блок (в виде его хэша)? Тогда цепочка блоков превратится в обычный список несвязанных между собой объектов. Как в таком случае система будет обнаруживать повторную трату уже потраченных биткоинов? Имея 2 транзакции с одними теми же монетами на входе, нужно определить, какую из них считать корректной, а какую следует удалить. Естественно считать корректной транзакцию, которая произошла раньше, поэтому нужно просто отсортировать список блоков по времени их добавления, т. е. по указанному в блоке таймстампу. Но как вы будете проверять корректность таймстампа? Все фулл ноды в сети равноправны, и если одна нода считает, что сейчас 6 часов утра по UTC, а другая — что сейчас 10 вечера, то какое из этих времён считать за истину? Учитывая, что владелец ноды может попытаться обмануть систему учёта времени добавления блоков ради того чтобы провернуть какую-то мошенническую схему, такого рода разногласия по времени неизбежно будут возникать. Если же просто добавлять блоки с тем таймстампом, который указал создатель блока, соблюдая порядок блоков по возрастанию времени, то создатель просто сможет указать в таймстампе минус час от текущего времени и вставить свой блок куда-то в середину списка, перед множеством уже добавленных блоков. Таким образом, он сможет купить что-то за свои биткоины, получить товар, после чего добавить в середину списка блок с отправкой тех же биткоинов самому себе, что сделает недействительной транзакцию по оплате товара, и продавец потеряет деньги.

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

Имеет смысл всё же вернуться к простой цепочке блоков, связанных через хэш.

Теперь попробуем сэкономить электроэнергию и убрать из этой системы Proof of Work. В этом случае сеть потеряет возможность контролировать скорость выпуска новых блоков (раз в 10 минут) и тем самым контролировать эмиссию (те самые «награды за блок», которые берутся из воздуха). Время появления новых блоков станет слишком коротким по сравнению со временем синхронизации блокчейна между нодами, из-за чего ветвление будет возникать постоянно, и ветки будут гораздо длиннее, чем сейчас. Злоумышленник, владеющий большим количеством нод, сможет организовать «атаку 51%», т. е. оплатить и получить товар, после чего распространить по сети цепочку блоков, которая будет начинаться до совершённой им транзакции, и которая будет длиннее всех цепочек, содержащих эту транзакцию. Таким образом, товар будет получен, но его оплата будет отменена.

Майнеры тратят огромное количество электроэнергии на бессмысленные, на первый взгляд, вычисления, но для сети биткоина они являются необходимым злом. Поскольку транзакция считается подтверждённой после добавления 6 блоков, «атака 51%» предполагает вычисление параллельной ветки длиной в 6 блоков быстрее, чем такую же ветку рассчитает вся остальная сеть. Для этого требуется как минимум сконцентрировать в своих руках более половины хэшрейта сети биткоина, что практически невозможно и настолько дорого, что это мероприятие вряд ли окупится даже в случае успешной атаки. Благодаря тому, что «победитель» в гонке за добавление блока определяется случайно, «атака 51%» имеет шанс провалиться даже в том случае, если злоумышленник будет обладать нужными вычислительными мощностями. Атака предполагает, что злоумышленник потратит много биткоинов, после чего вернёт себе деньги, переписав историю блокчейна. Но он не будет знать, в какой момент ему следует потратить эти биткоины, поскольку он не знает, в какой момент его вычислительная сеть рассчитает 6 блоков быстрее остальной сети. Более того — если такие огромные мощности переключатся на вычисление параллельной ветки, это приведёт к падению хэшрейта сети биткоина более чем на половину, что станет сразу заметно всем остальным участникам. Чтобы сделать это скрытно, придётся создать отдельную майнинговую сеть, мощность которой должна превышать не половину, а всю мощность существующей сети.

В отличие от майнинга, поддержание фулл ноды не приносит прямой финансовой выгоды. В таком случае, что заставляет людей запускать эти ноды на своих машинах?

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

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

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

Чтобы подключиться к сети биткоина, вам нужно знать IP-адреса хотя бы нескольких нод. Информация о нодах хранится на серверах DNS-сидеров, таких как bitseed.xf2.org, dnsseed.bluematt.me, seed.bitcoin.sipa.be, dnsseed.bitcoin.dashjr.org, seed.bitcoinstats.com. Из-за ограниченного числа сидеров, биткоин-сеть нельзя назвать полностью децентрализованной, но такого рода централизация не создаёт дополнительной угрозы для атак.

Генезис-блок биткоина содержит одну coinbase-транзакцию, которая отправляет 50 BTC на неизвестный адрес. Эти 50 BTC принципиально никем не могут быть потрачены. Все остальные биткоины были получены в результате эмиссии при создании новых блоков, причём первые блоки вообще не содержали никаких транзакций, кроме coinbase, поскольку в генезис-блоке не содержится UTXO, которые можно было бы потратить. Загадочный создатель биткоина Сатоши Накамото после публикации генезис-блока предпочёл сохранить анонимность и исчезнуть, так что теперь никто не знает, где он и кто он. Возможно, сейчас он грустно вздыхает, глядя на современные котировки. Но с другой стороны, это мог быть какой-нибудь визионер от наркобизнеса, которому не пристало считать такие копейки, как 50 биткоинов.

2. Lightning Network

Блокчейн биткоина может обрабатывать только от 3 до 7 транзакций в секунду, в то время как традиционные платёжные системы, такие как VISA, обрабатывают тысячи транзакций в секунду. Запланированная дефляция биткоина означает, что награда за блок постепенно уменьшается, и майнеры вынуждены пренебрегать транзакциями с низкой комиссией. Из-за этого блокчейн биткоина не является хорошим выбором в качестве инструмента для микроплатежей. Его имеет смысл использовать только для крупных транзакций. Для решения этой проблемы в рамках сети биткоина появилась технология под названием Lightning Network.

В Lightning Network применяются мультисиг-кошельки (сокращение от Multi-Signature Wallets), т. е. кошельки, использующие изменённую технологию цифровой подписи, когда для создания подписи необходимо применить не один, а несколько приватных ключей, принадлежащих разным людям. Нетрудно догадаться, что такие кошельки используются для совместного владения денежным активом и осуществлять транзакции из них можно только с согласия владельцев нескольких (необязательно всех) приватных ключей — например, при определённых настройках может быть достаточно трёх ключей из пяти, т. е. решения о денежных переводах будут приниматься большинством голосов. Этот вариант будет называться «3-of-5» или «3-из-5». Впрочем, для Lightning Network используется только вариант «N-из-N», т. е. для создания транзакции будут требоваться все ключи.

У вас может возникнуть вопрос — если в блокчейн заложен принцип создания транзакций, на выходе из которых стоит криптографическая задача, решить которую может только владелец приватного ключа получателя, то как можно создать выход транзакции, требующий несколько ключей? Ведь это будет отклонением от алгоритма?

На самом деле, в алгоритмах биткоина не прописана какая-то стандартная криптографическая задача, которую участники обязаны использовать при создании всех транзакций. На выходе транзакции стоит запирающий скрипт (locking script), который может содержать любую логику, а на входе транзакции, соответственно, необходимо прописать отпирающий скрипт (unlocking script), который в комбинации с запирающим скриптом будет возвращать положительный результат (значение true). Специально для скриптов биткоина был создан целый язык программирования — правда, предельно примитивный и содержащий всего порядка 80 инструкций.

Bitcoin Script
Bitcoin Script

В 99% случаев Bitcoin Script используется стандартным образом — в locking script пишется задача, которую можно решить только приватным ключом получателя, а в unlocking script пишется её решение. Но вообще эти скрипты дают широкие возможности для определения условия, при выполнении которого выход транзакции может быть использован. В частности, существуют скрипты, обеспечивающие работу multisig-кошельков.

Ещё одна вещь, которую нужно знать для понимания Lightning Network — это параметр nLockTime. Он обозначает отдельное поле в структуре данных транзакции, в котором может быть записан минимальный номер блока, либо дата, начиная с которой транзакция может быть включена в блокчейн. Если попытаться включить такую транзакцию в более ранний блок, то система отклонит её как некорректную.

Это рабочее решение, например, для создания завещания, которое будет доступно ребёнку только по достижении совершеннолетия. Напомню, что в криптографическую задачу по разблокировке выхода транзакции включается цифровая подпись всех данных новой транзакции, в том числе суммы переводов и nLockTime, так что после создания транзакции она может храниться в виде файла на каком-нибудь устройстве сколь угодно долго, дожидаясь своего часа, и никто не сможет изменить nLockTime и получить доступ к средствам раньше указанного срока. Чтобы родитель не смог потратить UTXO, использующийся в этом завещании, этот UTXO должен находиться на балансе multisig-кошелька «2-из-2», созданного с помощью приватных ключей родителя и ребёнка. Если ребёнок получит подписанную родителем транзакцию, перечисляющую ему эти деньги, в поле nLockTime которой указан момент его совершеннолетия, то вывести деньги из этого UTXO сможет только сам ребёнок, но не раньше, чем наступит указанный срок.

Lightning Network — это распределённая сеть платёжных каналов. Суть платёжного канала в том, чтобы два пользователя обменивались биткоинами вне блокчейна, без регистрации транзакций в блоках, без уплаты комиссии майнерам и без необходимости ждать целый час, пока транзакция будет одобрена. Сперва они создают в блокчейне стандартную транзакцию, открывающую канал, какое-то время обмениваются друг с другом (в обход блокчейна) подписанными или частично подписанными транзакциями, после чего публикуют в блокчейне закрывающую транзакцию, которая фиксирует финальное распределение биткоинов между сторонами, получившееся по итогам всех этих микрообменов. Рассмотрим устройство простейшего однонаправленного платёжного канала.

Допустим, Алиса и Боб договорились, что Боб будет отправлять Алисе регулярные платежи по 0.00001 биткоина в сутки за предоставление какого-то сервиса в течение 100 дней, т. е. предполагается, что всего через канал пройдёт 0.001 биткоина. Они создают мультисиг кошелёк «2-of-2», на балансе которого в начале находится 0 биткоинов.

Боб создаёт транзакцию №1, переводящую 0.001 биткоина с его личного счёта на их совместный multisig-кошелёк. Эту транзакцию он подписывает и сохраняет у себя, не отправляя её ни в блокчейн, ни на компьютер Алисы. Далее он создаёт и подписывает транзакцию №2, которая переводит 0.001 биткоина с выхода транзакции №1 (т. е. с мультисиг-кошелька) на его личный счёт, но только через 100 дней — в поле nLockTime указывается соответствующий номер блока. Поскольку идентификатором транзакции в блокчейне является её хэш, Боб может сослаться на транзакцию №1, просто указав её хэш, даже если этой транзакции ещё нет в блокчейне. Поскольку транзакция №2 требует двух подписей, Боб отправляет её Алисе, Алиса её подписывает и отправляет обратно Бобу. Тем самым Алиса подтверждает, что она не против, если ровно через 100 дней Боб переведёт себе 0.001 биткоина с их общего кошелька. Получив подписанную транзакцию №2, Боб отправляет Алисе транзакцию №1. Алиса её подписывает и отправляет в блокчейн, затем они оба ждут, когда транзакция пройдёт 6 подтверждений. С этого момента считается, что канал открыт. Транзакция №1 является открывающей транзакцией этого канала.

Любой из участников в этот момент может выйти из сделки, почти ничего не потеряв и не получив никакой выгоды (за исключением того, что Боб потратит какую-то сумму на комиссии, и ему придётся ждать 100 дней, чтобы получить назад свои деньги).

Далее Боб должен произвести оплату услуг за первый день, в размере 0.00001 биткоина. Эта оплата делается в рамках открытого канала и без участия блокчейна. Боб создаёт и подписывает транзакцию №3, переводящую 0.00001 биткоина с мультисиг-кошелька на кошелёк Алисы и 0.00099 биткоина на кошелёк Боба, после чего отправляет эту транзакцию Алисе. Транзакция не имеет ограничений по времени.

В этот момент любой из участников точно так же может выйти из сделки, практически ничего не потеряв. Если Алиса подпишет и отправит транзакцию №3 в блокчейн, то эта транзакция будет считаться закрывающей транзакцией, а канал будет считаться закрытым. Боб потеряет 0.00001 биткоина, не получив за него оговорённую услугу, но это нормальный риск, когда идёт работа по предоплате. Сам Боб не может отправить эту транзакцию в блокчейн, поскольку его копия транзакции не имеет подписи Алисы.

Через день ситуация повторяется. Боб создаёт транзакцию №4 с выходами на 0.00002 и 0.00098 биткоина. У Алисы уже есть 2 подписанные транзакции, которые она может отправить в блокчейн — транзакция №3 и транзакция №4. Поскольку транзакция №4 для неё более выгодна, 3-ю она смело может удалить. У Боба есть только одна подписанная транзакция, переводящая ему все деньги, но использовать её можно только через 98 дней. Стоит ли упоминать, что любой участник в этот момент может выйти из сделки, не нанеся никакого значимого ущерба ни одной из сторон?

На 100-й день у Алисы оказывается подписанная транзакция, переводящая ей все 0.001 биткоина. Она должна закрыть канал, отправив эту транзакцию в блокчейн, причём это надо сделать раньше, чем придёт срок транзакции №1, иначе Боб сможет присвоить себе все деньги.

Общим недостатком любых платёжных каналов является необходимость заморозки какого-то количества монет. Более сложные алгоритмы позволяют создавать двусторонние каналы, по которым средства могут двигаться в двух направлениях. Ещё более сложные алгоритмы позволяют объединять каналы в сеть и доставлять биткоины через посредников, не записывая транзакции в блокчейн, но при этом обеспечивая честность участников с помощью криптографии. Эта сеть называется Lightning Network. В ней используются алгоритмы маршрутизации, направленные на то, чтобы доставлять платежи с минимальной задержкой и минимальной комиссией.

Несмотря на наличие Lightning Network, биткоин в основном воспринимается как «цифровое золото», т. е. как средство сбережения, а не как инструмент для повседневных платежей.

3. Как работает Ethereum

Другая цифровая валюта — эфир — демонстрирует совсем иной подход к реализации и использованию блокчейна. Биткоин прост как пень и настолько же удобен. Понять его основные принципы сможет любой новичок, прочитавший эту статью. Я не смогу дать такое же подробное объяснение эфира, поскольку он строится на гораздо более сложных протоколах.

Каждая нода в децентрализованной сети эфириума обеспечивает работу Ethereum Virtual Machine (EVM), и пользователи могут запускать на этой машине полноценные децентрализованные приложения (DApps), работающие на смарт-контрактах. Эти приложения могут предоставлять услуги по анонимизации денежных переводов, заниматься выдачей кредитов, использоваться как децентрализованные криптобиржи, и т. п. Смарт-контракты Ethereum пишутся на одном из четырёх языков программирования (Solidity, Serpent, LLL и Mutan), предназначенных для трансляции в байт-код EVM. Эти языки гораздо сложнее, чем Bitcoin Script, и обладают полнотой по Тьюрингу, что и позволяет с их помощью создавать самые разные децентрализованные приложения. Одним из эксцессов этого подхода стала игра CryptoKitties, запущенная на блокчейне эфириума. Её игровой процесс состоит в выращивании и продаже виртуальных нарисованных котов. В 2017 популярность этой игры привела к перегрузке сети эфириума и её значительному замедлению.

Смарт-контракт — это программа, которая хранится в блокчейне и состоит из байт-кода EVM и данных, необходимых для её выполнения. Каждый смарт-контракт привязан к аккаунту (счёту) в Ethereum, т. е. каждый контракт имеет адрес в блокчейне и свой баланс эфира. Такие счета называются «счетами контрактов». Смарт-контракт — это программа, которая живёт в среде исполнения Ethereum, имеет прямой контроль над денежным балансом своего счёта и в ответ на сообщение или транзакцию всегда выполняет определенный фрагмент кода.

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

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

Состояние EVM — это совокупность состояний аккаунтов, на которых хранится какой-то баланс эфира. Аккаунты в Ethereum бывают 2 видов — внешние счета (externally owned accounts, EOA) и счета контрактов (contract accounts, CA). Внешний счёт является счётом обычного пользователя и контролируется его закрытым ключом. Счёт смарт-контракта контролируется кодом контракта.

Внешний счёт представлен такими данными как целое число nonce и текущий баланс (располагаемое количество эфира). Счёт контракта вдобавок к этому содержит код контракта и хранилище данных, к которым может обращаться этот код.

Nonce во внешнем счёте используется как порядковый номер последней отправленной транзакции, а в счёте контракта — как порядковый номер последнего созданного им контракта.

Nonce в EOA нужен, чтобы злоумышленник не мог повторить чужую транзакцию, списав с отправителя дополнительные средства без его согласия (replay attack). Все транзакции подписаны электронной подписью отправителя, так что злоумышленник не может создать валидную транзакцию от вашего имени, а повторно регистрировать созданные вами транзакции он не может из-за nonce. В CA nonce нужен, чтобы каждый вновь создаваемый контракт имел уникальный адрес. Адрес нового контракта получается как комбинация адреса создавшего его контракта и его текущего nonce.

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

Простой пример, как транзакция меняет состояние EVM. В данном случае происходит перевод с внешнего счёта на счёт контракта.
Простой пример, как транзакция меняет состояние EVM. В данном случае происходит перевод с внешнего счёта на счёт контракта.

Транзакция содержит следующие данные:

  • nonce, который должен совпадать с текущим nonce счёта отправителя

  • Получатель транзакции

  • Подпись отправителя

  • Количество переводимого эфира

  • Необязательное поле данных (в примере выше видно, как код контракта обращается к этим данным)

  • Значения gasLimit, maxPriorityFeePerGas и maxFeePerGas, определяющие размер комиссии валидатора.

Валидатор в эфириуме — это аналог майнера в биткоине. В сети эфириума вместо Proof of Work (PoW) с сентября 2022 года используется Proof of Stake (PoS). Валидаторы в PoS работают по иным принципам, но их роль примерно та же, что и у майнеров в PoW. Подробнее о PoS я расскажу чуть позже.

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

Стоимость операций в единицах газа (источник — The Yellow Paper).
Стоимость операций в единицах газа (источник — The Yellow Paper).

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

Кроме комиссии за вычислительную нагрузку, пользователь платит Base Fee (базовую комиссию), которая не достаётся валидатору, а «сжигается» при выполнении транзакции, т. е. потраченный на неё эфир навсегда изымается из оборота. Она существует для того, чтобы размер каждого блока не был слишком большим, и чтобы людям было невыгодно создавать множество микротранзакций и провоцировать неконтролируемый рост блокчейна (который уже составляет чуть менее 1200 Гб). Ещё одна причина ограничивать размер блока заключается в том, что недостаточно производительные ноды не могут обрабатывать слишком большие блоки в 12-секундный временной слот, поэтому они будут вынуждены отключаться от сети. В интересах децентрализации, этого нельзя допускать.

Базовая комиссия сжигается, вместо того чтобы начисляться на счёт валидатора, потому что в противном случае валидаторы смогут в обход блокчейна заключать соглашения с пользователями об обработке микротранзакций, и в результате цель базовой комиссии не будет выполняться — из-за множества мелких транзакций размер блока и сам блокчейн продолжат неконтролируемо расти. Кроме того, «сжигание» эфира замедляет его инфляцию. Это важно, поскольку эфир не ограничен максимальным объёмом монет, как биткоин. Базовая комиссия зависит от объёма предыдущего блока. Если он превышает некий целевой объём, то Base Fee увеличивается, а если он оказывается меньше, то Base Fee уменьшается. Объём блока измеряется в единицах газа, затраченных на все его транзакции. Целевой объём равен 15 млн единиц. Таким образом, базовая комиссия в следующем блоке точно предсказывается по состоянию сети.

Параметр gasLimit обозначает максимальное количество газа, которое пользователь готов потратить на операцию. Если количество потреблённого газа доходит до значения, указанного в gasLimit, то происходит отмена операции, но плата за израсходованный газ отправителю не возвращается. Неудачная транзакция всё равно попадает в блокчейн, но на состояние EVM она почти не влияет — за исключением денег, потраченных на газ, которые частично сжигаются и частично достаются валидатору.

Цена на газ обычно указывается в Gwei («Гвэй»), т. е. «Гига-wei». Wei — это минимальная единица деноминации эфира, равная 10-18 ETH (одна квинтиллионная часть эфира), названная в честь китайского инженера и одного из пионеров криптографии Вэй Дая. Соответственно, Гвэй равен 10-9 ETH. «Минимальная деноминация» означает минимальную сумму эфира, которая может существовать в природе. У биткоина тоже есть минимальная деноминация, называемая «Сат» или «Сатоши», в честь создателя биткоина — человека (или группы людей), скрывающегося за псевдонимом Сатоши Накамото.

Контракты не могут создавать транзакции, но им всё же нужен способ запрашивать выполнение других контрактов и пересылать им данные и эфир. Для этого используются сообщения (messages). В отличие от транзакций, сообщения не хранятся в блокчейне и существуют только в среде выполнения EVM. Весь газ, потребляемый контрактами, берётся из запустившей их транзакции. Например, пользователь посылает транзакцию контракту-1 с 1000 газа, контракт-1 потребляет 600 газа и отправляет сообщение контракту-2, который потребляет 300 газа перед возвратом ответного сообщения контракту-1. После этого контракт-1 может потратить ещё 100 газа перед завершением, иначе система его принудительно остановит.

Так же, как и в биткоине, для хранения неподтверждённых транзакций используется mempool. Узлы (ноды) эфириума играют ту же роль, что и фулл ноды биткоина. Получив транзакцию и проверив её корректность, узел включает её в свой мемпул и начинает распространять её по сети, чтобы она попала в мемпулы других узлов. Причины запускать узел на своей машине и поддерживать его работу — точно такие же, как и для нод биткоина.

15 сентября 2022 Эфир перешёл на технологию Beacon Chain, основанную на Proof of Stake. Как и в биткоине, каждый блок в Beacon Chain хранит хэш предыдущего блока. Блок формируется случайно выбранным валидатором, после чего распространяется по сети. Это должно происходить в каждый 12-секундный временной слот, если сеть функционирует оптимально — в противном случае слот проходит без добавления блока. Каждые 32 слота образуют эпоху.

Если вы хотите стать валидатором, вам нужно заморозить сумму не более чем в 32 эфира в специальном контракте. В случае вашего нечестного поведения система накажет вас, полностью или частично отобрав у вас внесённый депозит. Меньшая сумма депозита будет означать меньшую вероятность быть выбранным для составления блока. Вы даже можете заморозить несколько раз по 32 эфира и получить в своё распоряжение несколько валидаторов, чтобы повысить свои шансы стать тем, кто сформирует следующий блок. Алгоритм псевдослучайного выбора RANDAO определяет, какой из валидаторов должен сформировать блок в следующем временном слоте. Для каждого блока назначается уникальное случайное зерно, полученное путём смешивания случайного зерна предыдущего блока и номера эпохи, подписанного приватным ключом валидатора текущего блока. С помощью публичного ключа валидатора каждый участник может проверить, что валидатор действует строго по алгоритму и не пытается манипулировать системой.

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

Помимо комиссий, валидатор получает награду в виде вновь выпущенного эфира, которая вычисляется по сложному алгоритму. В отличие от биткоина, эмиссия эфира не имеет теоретического предела.

Аналогом майнинг-пулов в сетях PoS являются стейкинг-пулы. Идея та же самая: объединение депозитов повышает вероятность стать валидатором и позволяет получать более стабильный доход.

Из-за задержек доставки информации через Интернет и из-за нечестного поведения отдельных валидаторов в блокчейне эфира может возникать ветвление. Консенсус о выборе нужной ветки достигается с помощью алгоритма LMD-GHOST. На самом деле, механизмы Beacon Chain намного сложнее описанной здесь упрощённой схемы, но я не буду глубоко погружаться в детали. Скажу только, что разные источники советуют получить от 12 до 30 подтверждений, прежде чем считать свою транзакцию исполненной. При длительности слота в 12 секунд это означает от 2,5 до 6 минут ожидания. Напомню, что в сети биткоина рекомендуется дождаться шести подтверждений, что занимает около часа.

Если сравнивать PoW и PoS, то самое очевидное отличие — это энергоэффективность. По оценкам Crypto Carbon Ratings Institute, переход на PoS уменьшил энергопотребление сети Эфириума на 99.988%. PoS допускает более быстрые транзакции, а из-за низкого энергопотребления снижаются расходы валидаторов, поэтому они готовы работать за меньшее вознаграждение. Им требуются меньшие комиссии и меньшие объёмы выпуска новых монет.

Из-за сжигания Base Fee и из-за относительно медленных транзакций, эфириум (так же, как и биткоин) не имеет смысла напрямую использовать для микроплатежей. В сети биткоина для решения этой проблемы есть Lightning Network. В сети эфириума тоже есть несколько типов решений второго уровня, позволяющих проводить платежи в обход блокчейна. К ним относятся optimistic rollups, zero-knowledge rollups, state channels и sidechains.

Для уточнения терминологии: решение первого уровня (L1) — это сама сеть эфириума — её ещё называют Mainnet. Решения второго уровня (L2) — это механизмы проведения транзакций вне Mainnet-а, которые сохраняют надёжность и безопасность платежей благодаря какой-то связи с L1.

Optimistic rollups основаны на агрегаторах, работающих вне сети эфириума, которым пользователи напрямую присылают свои подписанные транзакции, чтобы агрегатор их обработал и перераспределил эфир между участниками. Существуют протоколы для отправки токенов из одного роллапа в другой, так что пользователи могут переводить деньги между разными роллапами. Периодически агрегатор собирает множество переданных ему транзакций в единый блоб и в сжатом виде отправляет его в блокчейн. Агрегатор выполняет всего одну транзакцию, один раз платит базовую комиссию и не тратит газ на выполнение пользовательского байт-кода — только на сохранение сжатого пакета транзакций в специальном контракте. В результате получается довольно скромная комиссия, которая распределяется между всеми пользователями, пропорционально объёму их транзакций. Опубликованные таким образом данные выполняют роль публичной отчётности, которая позволяет пользователям доказать своё право на средства, хранящиеся в системе роллапа. Чтобы получить возможность переводить деньги через rollup, пользователь должен внести какое-то количество эфира на депозит в bridge-контракте агрегатора. В дальнейшем весь эфир для переводов в системе агрегатора пользователь будет брать из этого депозита. Чтобы изъять свои средства из роллапа, пользователь должен инициировать транзакцию из системы агрегатора в основной блокчейн (обычно этот процесс растягивается на неделю), либо продать свои средства в роллапе третьей стороне. Для изъятия средств требуется только решение пользователя, и агрегатор никак не может на это повлиять. Технология optimistic rollups предусматривает для пользователей возможность проверки пакетов транзакций, отправляемых агрегатором в блокчейн. Для этого после публикации пакета в блокчейне существует временное окно, в течение которого пользователи могут провести верификацию. При обнаружении некорректных транзакций они могут воспользоваться системой разрешения конфликтов, исправить ошибочные транзакции в блокчейне и наказать штрафами те стороны, по вине которых это случилось. Такие инциденты приводят к замедлению обработки транзакций, но в оптимистичном сценарии, когда все стороны действуют по правилам, транзакции проходят очень быстро — поэтому данная технология и называется optimistic rollups.

Zero-knowledge rollups (ZK Rollups) очень похожи на optimistic rollups, за исключением того, что им не требуется время для верификации и механизм разрешения конфликтов. Корректность данных, публикуемых в блокчейне, проверяется автоматически с использованием продвинутых криптографических техник, которые называются «zero-knowledge proofs». Дополнительным плюсом для пользователя является возможность быстро вывести свои средства из депозита. Минусом является сложность реализации и сложность вычисления zero knowledge proofs, из-за чего машины агрегаторов требуют относительно мощного «железа».

State channels — это аналог платёжных каналов в Биткоине, только вместо multisig кошельков используются multisig контракты, поскольку в Эфириуме не предусмотрена возможность совместного владения одним аккаунтом. Создание и закрытие канала требует уплаты комиссий, но во время существования канала все платежи проходят мгновенно и бесплатно. Чтобы закрыть канал, нужно предоставить контракту корректное (валидное) обновление состояния, подписанное обоими участниками. При наличии нескольких таких обновлений, контракт исполняет самое новое. Если оба участника соглашаются закрыть канал, то он закрывается мгновенно. Если любой из них закрывает канал единолично, то запускается период ожидания, достаточный, чтобы другая сторона успела предоставить более позднее обновление, если такое имеется. Эта задержка существует на случай, если одна из сторон решит предоставить более выгодное ей обновление, не отражающее актуальное состояние канала. Чтобы платить ещё меньше комиссий, каналы можно создавать в системе роллапа, а не в системе Mainnet-а. Существуют надёжные алгоритмы транзакций по цепочке через несколько платёжных каналов, не требующие доверия между участниками.

Sidechain — это второстепенный блокчейн, существующий отдельно от Mainnet-а Эфириума, но соединённый с ним через двусторонний мост. В этом блокчейне могут использоваться другие параметры и другой алгоритм консенсуса. Обычно такой блокчейн строится на принципах, которые повышают пропускную способность и скорость транзакций в ущерб децентрлизации и безопасности. Двусторонний мост — это система контрактов, которая позволяет переводить деньги из одного блокчейна в другой, используя механизмы блокировки, сжигания и эмиссии валюты. Обычно сайдчейны поддерживают EVM Эфириума, поэтому на них можно запускать те же DApps (децентрализованные приложения), что и в Mainnet-е.

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

В отличие от биткоина, генезис-блок эфира содержит 8893 транзакции, в которых на разные адреса переводится в сумме 60 102 216 единиц эфира. Это стало результатом Initial Coin Offering (ICO), проведённого летом 2014 года, когда все желающие могли перед запуском Mainnet-а купить себе какое-то количество новых монет за биткоины. В то время эта сумма была эквивалентом 18,3 млн долларов, благодаря чему ICO эфириума было признано весьма успешным. Сегодня такая сумма в эфириуме эквивалентна 200 млрд долларов и составляет примерно половину от всего выпущенного на данный момент эфира.

И в эфириуме, и в биткоине используется алгоритм цифровой подписи ECDSA, который не является постквантовым и уязвим к взлому с помощью гипотетического квантового компьютера. Это значит, что обладая гипотетическим квантовым компьютером, можно вычислять приватные ключи по открытым адресам кошельков и свободно пользоваться чужими деньгами. Маловероятно, что такой компьютер появится в ближайшем будущем, но всё же остаётся загадкой, зачем использовать ECDSA, когда существуют постквантовые алгоритмы шифрования, защищённые от этой угрозы.

4. Как работают стейблкоины.

Stablecoins — это криптовалюты, курс которых стабилизируется благодаря привязке к стоимости реальных активов. Самый известный пример — это токен USDT, стоимость которого равна 1$. Эти токены удобны для взаимных расчётов, поскольку стоимость других криптовалют имеет свойство непредсказуемо и очень сильно меняться со временем. Кроме долларов, такие токены могут быть обеспечены драгоценными металлами, нефтью или другими криптовалютами. Иногда они не обеспечены ничем, но увеличение и уменьшение денежной массы в обороте управляется алгоритмами смарт-контрактов, что обеспечивает им относительно стабильный курс.

Возникает вопрос, зачем выпускать какие-то новые токены стоимостью в 1$, вместо того, чтобы использовать сам доллар? Дело в том, что доллар не совместим c децентрализованными приложениями, работающими на блокчейнах. Перевод в долларах нельзя записать в блокчейн-транзакцию, поскольку в системе блокчейна доллара не существует. Это означает невозможность через смарт-контракты сформулировать какие-либо обязательства в долларах. К тому же, криптовалютные операции пока ещё не так плотно контролируются государствами, как операции в фиатных валютах, и иногда вам просто не доступна оплата в долларах, но зато доступна оплата в USDT.

Давайте для начала представим, что какое-то государство решило выпустить национальную валюту, курс которой всегда равен одному доллару. Для примера назовём эту валюту монгольским тугриком. Как это технически осуществить? Для того, чтобы люди считали тугрик эквивалентом доллара и в своих платёжных операциях исходили из стоимости тугрика в 1 доллар, они должны знать, что в любое время тугрики можно обменять на доллары по курсу 1:1. Для этого государству придётся создать орган, в который в любое время можно принести какое-то количество тугриков и без сложных бюрократических проволочек получить за них такое же количество долларов. Удержание стоимости тугрика будет работать следующим образом. В случае падения курса до 99 центов, биржевые трейдеры будут покупать подешевевший тугрик за 99 центов и продавать его государству за 1 доллар, получая 1% прибыли. Поскольку эту операцию будет автоматически осуществлять трейдерское ПО, происходить это будет мгновенно, избыток тугриков на рынке будет быстро ликвидирован, и курс вернётся к отметке в 1$. В случае поднятия курса до 1 доллара и 1 цента будет происходить обратный процесс: государство будет закупать дополнительные резервы долларов, продавая имеющиеся у него тугрики (либо тугрики, выпущенные путём эмиссии), точно так же получая 1% прибыли.

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

Примерно так же поступила компания Tether, выпустившая токен USDT, который торгуется по цене 1$ за штуку. Чтобы получить USDT, пользователь может внести доллары на банковский счёт компании Tether, после чего Tether произведёт эмиссию эквивалентного количества USDT и выдаст их пользователю. Если пользователь захочет от них избавиться, он вернёт эти токены компании, а Tether вернёт ему его долларовый депозит. Прибыль компания получает за счёт того, что хранит полученные от пользователей доллары в разных активах, которые приносят доход.

Согласно утверждениям компании, стоимость выпущенных токенов на 100% обеспечена запасами реальных активов. При этом ничего не известно о случаях независимого аудита резервов компании Tether. Звучат обвинения, что достаточного долларового обеспечения у них нет. Я не возьмусь утверждать, что компания просто печатает деньги, но нежелание раскрывать полноценную финансовую отчётность может указывать на то, что её резервы хранятся в высокодоходных, но ненадёжных активах, в которых традиционные банки хранить свои резервы не имеют права. После разбирательства с Комиссией по торговле товарными фьючерсами США (CFTC), компания выплатила 41 млн долларов штрафов за нарушение некоторых регуляций — в частности, из-за неполного фиатного обеспечения токенов USDT и из-за отсутствия реального независимого аудита резервов компании.

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

USDT — это взаимозаменяемый токен (fungible token). Вы наверняка слышали о невзаимозаменяемых токенах (non-fungible tokens, или NFT). В отличие от них, fungible tokens эквивалентны между собой, так же как, например, одна единица эфира полностью эквивалентна любой другой единице эфира. Взаимозаменяемость этих токенов делает их подходящим решением для реализации цифровых валют, таких как USDT. В сети эфириума работа с USDT обеспечивается смарт-контрактом, написанным и размещённым компанией Tether. Контракт хранит в своей памяти баланс USDT для каждого пользователя и позволяет пользователям обмениваться токенами USDT, вызывая методы контракта. Если один пользователь отправляет в контракт транзакцию с вызовом метода Transfer, чтобы перевести 5 USDT на счёт другого пользователя, то во внутренней памяти контракта баланс первого пользователя просто уменьшается на 5, а баланс второго увеличивается на 5.

В коде этого контракта используется такая сущность, как чёрный список (BlackList), которая позволяет компании Tether заморозить все USDT для любого пользователя без объяснения причин. Это позволяет утверждать, что USDT является даже более централизованной валютой, чем доллар, что противоречит самой идее криптовалют. USDT можно использовать как платёжное средство для каких-то краткосрочных целей, но будет очень неразумно хранить в нём свои сбережения.

Кроме эфириума, смарт-контракты USDT работают в сетях Omni (система смарт-контрактов, построенная поверх сети биткоина), Tron, Solana, EOS и Algorand.

Второй по популярности стейблкоин — USDC — считается более надёжным, чем USDT, поскольку выпустившая его компания Circle считается более прозрачной. К тому же, если вы захотите обменять свои USDT на доллары у компании Tether, то сумма такого погашения должна быть не менее 100000$. Для USDC минимальная сумма составляет всего 100$.

DAI — третий по капитализации стейблкоин — построен на других технических принципах и заслуживает отдельного упоминания. В отличие от USDT и USDC, он управляется децентрализовано, не контролируется ни одним юрлицом, и обеспечивается множеством маленьких резервов в криптовалюте, распределённых по разным аккаунтам. Протокол MakerDAO работает в сети эфириума и определяет стоимость эфира в долларах с помощью оракулов — специальных смарт-контрактов, в которых игроки финансового рынка публикуют текущий курс эфира, полученный из информационных источников вне сети эфириума. Для нейтрализации недобросовестных оракулов используются методы фильтрации аномальных значений (например, может браться медиана от значений, предоставленных множеством оракулов). Из-за участия оракулов систему нельзя назвать полностью децентрализованной.

4. Спасение от государственного контроля?

Давайте разберёмся, действительно ли криптовалюты являются средством свободных платежей, до которых не могут дотянуться государственные регуляторы. После рассказа о биткоине и эфире должно быть понятно, что государство не может вмешиваться во внутренние процессы в этих сетях — отменять транзакции и блокировать счета. В сфере криптовалют государство не сможет привычным образом ограбить всю экономику, просто напечатав деньги. В теории, государство может заработать немного биткоинов, успешно проведя «атаку 51%», но не факт, что прибыль от этого мероприятия действительно покроет затраты.

Государство не может помешать вам сделать перевод в блокчейне, но оно может увидеть ваш перевод, поскольку информация в блокчейне открыта. И ещё оно может поймать вас за руку, когда вы попытаетесь конвертировать крипту в фиатные деньги или фиатные деньги обратно в крипту. В эти моменты государство может спросить вас, по какому договору вы получили эти деньги, не пытаетесь ли вы уйти от налогов, не участвуете ли вы в финансировании терроризма или в торговле запрещёнными веществами, и не пытаетесь ли вы обойти какие-нибудь санкции. Ваши фиатные счета могут быть заморожены до выяснения всех этих обстоятельств. Очевидный практический вывод состоит в том, что следует проявлять осторожность с peer-to-peer переводами, когда незнакомые люди предлагают вам обмен крипты на фиат. Они могут перечислить вам «грязные» деньги, замешанные в налоговых махинациях, взамен получив «чистую» криптовалюту.

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

Это не было бы проблемой, если бы в повседневной жизни можно было все расчёты вести в криптовалютах — вплоть до покупки пельменей в ближайшем магазине. Но это невозможно. Во-первых, потому что государство собирает налоги в конкретной фиатной валюте и тем самым заставляет налоговых резидентов иметь дело именно с этой валютой. Во-вторых, в мире блокчейна невозможно зарегистрировать договор, который обяжет одну из сторон предоставить товар или услугу. В случае, если вы заплатили деньги, но не получили товар, вы не можете обратиться в суд и рассчитывать, что гарантом честного завершения сделки станет то самое государство, для борьбы с которым вы и перешли на блокчейн. Криптовалюты в этом плане не слишком удобны.

Все переводы на первом уровне блокчейна (в отличие, например, от роллапов) хранятся в открытом виде, и их история легко может быть отслежена. В блокчейн-сетях есть сервисы, через которые можно анонимизировать криптовалюту, сделав недоказуемым преступное происхождение монет. В них может использоваться всё тот же zero-knowledge proof для того, чтобы доказать право владения долей средств в анонимизаторе, без возможности отследить, какой именно денежный перевод вы осуществили, чтобы получить это право. К сожалению, государство может легко разрубить этот «Гордиев узел», приняв постановление, что все монеты, вышедшие из этого сервиса, имеют преступное происхождение.

Помните, что любые методы обхода санкций с помощью криптовалют существуют только потому, что у государств ещё не дошли руки до того чтобы их прикрыть. Либо потому, что существуют лоббистские группировки, которым это выгодно.

В 2022 российский программист Алексей Перцев, один из разработчиков Tornado Cash (популярного инструмента для анонимизации криптовалютных транзакций), был арестован нидерландскими правоохранителями. В мае 2024 он был осуждён на 5 лет тюрьмы. Против двух других разработчиков сервиса — Романа Шторма и Романа Семёнова — в августе 2023 были выдвинуты обвинения в содействии отмыванию денег на сумму 1 млрд долларов.

Tornado Cash — это проект децентрализованного анонимизирующего инструмента с открытым исходным кодом, который не приносил своим создателям никаких доходов. Его разработка являлась актом чистого альтруизма. Алексей Перцев не занимался отмыванием денег с помощью этого или каких-либо других инструментов. Он был осуждён только за то, что разрабатывал опен-сорс проект. Минфин США внес Tornado Cash в санкционный список и объявил преступными доходами 91% всех денег, прошедших через этот сервис. Гражданам США было запрещено взаимодействие со смарт-контрактами Tornado Cash, Google отключил Tornado Cash от своей инфраструктуры, сайт tornado.cash перестал работать, а из гитхаба был удалён весь код этого проекта. Компания Circle (оператор USDC) заморозила токены на сумму в 75000$, оказавшиеся в санкционных криптокошельках, тем самым ещё раз продемонстрировав ненадёжность централизованных стейблкоинов.

Это был первый случай, когда под санкции попали адреса смарт-контрактов. До этого США уже активно применяли санкции к адресам криптовалютных кошельков. Взаимодействие с такими кошельками для граждан США также является незаконным.

Сегодня существуют другие децентрализованные анонимизирующие протоколы, основанные на исходном коде Tornado Cash, такие как Cyclone Protocol и Messier 87.

Если есть способ анонимизировать транзакции, то возникает идея создать криптовалюту с таким блокчейн-протоколом, чтобы все транзакции в этой валюте были анонимными. К таким валютам относятся Monero, Zcash, PIVX, Navcoin и другие. Крупные криптобиржи уже начали выводить эти монеты из оборота в связи с усилением давления со стороны финансовых регуляторов.

Мечты криптоанархистов о свободных деньгах так и не осуществились. Государство — это мощная система, обладающая аппаратом насилия и монополией на применение насилия. Глупо мечтать одолеть такую систему с помощью какой-то хитрой криптографии. Победить государство может только другое государство, поэтому всем либертарианцам я бы предложил перейти на философию этатизма.

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

Необходимым условием для анонимного владения криптовалютой является анонимный криптокошелёк с открытым исходным кодом. Криптокошелёк — это компьютерная программа, с помощью которой можно относительно легко осуществлять транзакции и отслеживать свой баланс в блокчейне. Она хранит информацию о ваших приватных ключах и доступных вам средствах. Из разделов про биткоин и эфириум уже должно быть понятно, что для пользования криптовалютами нужен только закрытый ключ шифрования, и никаких личных данных блокчейн от вас не требует. Однако многие современные криптокошельки заставляют пользователей проходить процедуру верификации, отвечающую требованиям KYC. Если вы хотите сохранить анонимность, то такой кошелёк вам явно не нужен. Кроме того, не следует доверять кошелькам с закрытым исходным кодом, поскольку непонятно, какую информацию они о вас собирают и в интересах каких структур они это делают.

В некоторых странах (в частности, в России), действуют обменники, позволяющие покупать и продавать криптовалюту за наличные. Использование таких обменников не является гарантией анонимности, поскольку эти организации могут контролироваться спецслужбами и использовать автоматическое распознавание лиц для привязки ваших криптокошельков к вашей личности. Для максимальной анонимизации, помимо покупки монет за наличные, рекомендуется использовать анонимизирующие сервисы либо анонимные криптовалюты вроде Zcash и Monero. Кроме того, при оформлении любых транзакций имеет смысл использовать VPN.

Комментарии (6)