16 апреля, 2024

Как устроен биткоин?

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

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

Сеть

Как говорят нам многие источники, Bitcoin — это одноранговая платёжная система (сеть), расчетной единицей операций в которой является одноименная криптовалюта BTC.

Одноранговая сеть — это компьютерная сеть, принципом которой является равноправие всех участников. Каждый узел (peer) или нода, как их еще называют, выполняет функции как клиента, так и сервера. Такая организация позволяет сохранять работоспособность сети при любом количестве и любом сочетании доступных нод (от перестановки мест слагаемых сумма не меняется). Участниками сети являются все пиры, поэтому главной особенностью системы является полная децентрализация: нет какого-либо центрального администратора или сервера. Вместо термина «одноранговая» можно использовать такие определения, как: децентрализованная, пиринговая или p2p (peer-to-peer) сеть.

Blockchain

Основой биткоина, а попутно и «книгой» учета транзакций является упорядоченная последовательность (цепочка) набора данных (блоков), или просто — блокчейн. Каждый блок сети биткоина вмещает до 1 Мб данных, формируется в среднем 10 минут, содержит информацию обо всех транзакциях, помещенных в него и информацию, которая связывает его с предыдущим блоком.

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

Принцип работы

Для более наглядного понимания основ работы сети биткоина представим гипотетического криптоэнтузиаста Тони, у которого установлен биткоин-кошелек с 2-мя BTC на балансе. Что такое биткоин-кошелек мы уже рассматривали в статьях ранее.

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

Транзакции и нагрузка сети

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

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

По сути, транзакция — это набор информации, которая указывает участникам сети на какое значение уменьшился баланс отправителя, и на какое значение увеличился баланс получателя.

Майнеры

Чтобы транзакция была успешно осуществлена, ее должны подтвердить (валидировать) майнеры. Сейчас, это специализированные организации, которые с помощью мощного вычислительного оборудования (ASIC-фермы) проверяют транзакции на «правильность», собирают эти транзакции в блоки, а блоки последовательно присоединяют друг к другу. На формирование 1 блока алгоритмом сети отводится в среднем 10 минут, в течение которых майнеры ежесекундно выполняют однотипную вычислительную работу в поисках одного единственно правильного решения. Это не сложно, это не математическая проблема, но это очень большой объём работы, который тяжело сделать маленькими вычислительными мощностями быстро и эффективно.

За выполненную работу майнеры получают вознаграждение в виде BTC. Это вознаграждение состоит из тех комиссий, которые заплатили пользователи за транзакции и абсолютно новых биткоинов, которые сгенерировала сама сеть в момент, когда из транзакций был собран и подтвержден новый блок. Новые биткоины являются наградой для майнеров за выполненную работу. Каждые 210 000 блоков происходит уполовинивание награды для майнеров за найденный блок, это называется «халвинг«.

Комиссии

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

Для вас, читатели, мы расскажем, как сформируется вес и стоимость транзакции Тони.
Те 2 BTC, который он имеет на балансе, появились в кошельке не просто так. Тони их заработал: 1 BTC в 2017 году, 1 BTC — в 2018. Теперь он хочет отправить половину подруге. В его транзакцию, помимо сведений о количестве передаваемых монет, будет включена информация об адресах, с которых ему пришли монеты (их называют входы), информация об адресах получателей (их называют выходы) и информация о его собственном адресе.

  • Каждый вход, с которого были получены монеты весит ~148 байтов
  • Каждый выход, на который уходят монеты — ~34 байта
  • Сама транзакция весит ~10 байтов, независимо от количества адресов или суммы перевода.

Считаем: 148*2+34*2+10=374 байта. Теперь мы знаем, что наш «жадный» Тони заплатит за транзакцию 374 satoshi.

Сдача

Вы спросите, а почему мы 34 (вес адреса получателя) умножаем на 2, когда получатель всего один? Дело в том, что когда вы отправляете часть своего баланса кому-либо, то с вашего баланса уходит не часть, а вся сумма, и после валидации, т.е. включения транзакции в блок, остаток (за вычетом комиссия сети) возвращается обратно на ваш кошелек.

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

Mempool

Выставив мизерную комиссию в 374 сатоши, Тони подтверждает отправку 1 BTC и ждет, когда майнеры подтвердят эту транзакцию.

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

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

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

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

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

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

Согласитесь, что скорость переводов в наше время — это одна из приоритетных характеристик в вопросе использования платежных систем, а такие вот очереди не очень приятны, мягко говоря.

Чтобы протолкнуть транзакцию в мемпуле существует много способов. Все они достаточно сложны понимании и осуществлении для рядового пользователя, а некоторые граничат с таким мошенническим способом как «double-spending» (двойная трата). Тем не менее, есть одна замечательная функция, которой может пользоваться любой, о ней и поговорим. Называется она «Замена комиссионных» (Replace-by-Fee или RBF).

Replace-by-fee (RBF)

В настоящий момент не каждый, а тем более мобильный биткоин-кошелек имеет подобные продвинутые функции.

RBF — это редактирование существующей транзакции, которая находится в мемпуле.

Редактирование означает, что в новой транзакции будут использованы те же входы что и в старой, но при этом будет изменена комиссия. Такая отредактированная транзакция не будет считаться «double-spending», так как использование опции Replace-by-Fee позволит этого избежать. Ноды сети bitcoin воспринимают отредактированную транзакцию как старую, и она переносится в очереди мемпула на более привлекательные для майнеров позиции.

Таким образом, если комиссия слишком мала, то увеличить ее — это нормальная практика в случае, если требуется ускорить операцию. Не пренебрегайте функцией RBF и включите ее перед совершением транзакций, это позволит подстраховаться на случай, если перевод задержится в очереди. О том, как ускорить транзакцию bitcoin в Trustee Wallet описано в этой короткой статье.

Подтверждение

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

Скорость транзакций

Говоря о скорости переводов, следует понять, что нет четкого значения, но давайте вычислим ее на основе транзакции Тони и имеющихся у нас данных.

Условие:

  • размер одного блока ~1 Мб (1’048’576 байтов);
  • каждый блок, заполненный транзакциями формируется раз в ~10 минут (600 секунд);
  • транзакция нашего Тони имеет вес 374 байта.

Решение:

  • 1’048’576 байтов / 374 байта = 2803,6 транзакций в одном десятиминутном блоке.
  • 2803,6 транзакций / 600 секунд = 4,6 транзакций в секунду.

Ответ: Каждую секунду майнеры добавляют в блок ~5 транзакций, подобных транзакции Тони.

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

Фактически, после включения транзакции в блок, получатель может не только видеть средства у себя на балансе, но и при определенном условии распоряжаться ими. Быстро, не так ли?

Да, но как же правило про 6 подтверждений? 6 блоков, по 10 минут на каждый, итого — 1 час…

Bitcoinклиенты

Все дело в программном обеспечении, которым пользуются держатели криптовалюты. Классические Bitcoin-кошельки будут отображать транзакцию как «неподтвержденную» до тех пор, пока она не получит 6 подтверждений (блоков).

Сервисы, которые принимают BTC в качестве оплаты, могут выставлять свои ограничения на количество блоков, нужных для подтверждения (7, 10, 45, 214 …).

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

Цифра «6» была выбрана не случайно. С каждым новым блоком, транзакция становится все менее уязвимой к подмене или изменению. Чтобы сделать что-то с уже подтвержденной транзакцией в блоке, нужно будет «переписать» все последующие блоки, а это требует очень огромных вычислительных мощностей и миллионных капиталовложений. И чем больше подтверждений получит транзакция, тем надежнее она будет защищена.

Но в таком мощном и устойчивом блокчейне, как у биткоина, это, скорее, требование получателя транзакции, а не правило протокола.

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

Связка «SegWit + RBF + использование неподтвержденных транзакций» позволяет выжать максимум скорости из блокчейна BTC, что немаловажно для некастодиальных сервисов.

Предвидя ваш вопрос, что за биткоин-кошелек используют Тони и Синди, ответим — Trustee Wallet.

Заключение

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

Устойчивая работа bitcoin одинаково зависит как от майнеров, так и от обычных пользователей, и чем больше участников будет в сети, тем более защищенной и децентрализованной она станет.

#BTC 2TheMoon!

Поделиться

2 Comments

    1. Асик Reply

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *