В этой статье мы рассмотрим фундаментальные технологии и механизмы, обеспечивающие работу Биткойна.
Будут рассмотрены такие темы, как корректировка сложности, кривая предложения биткойнов, механизм транзакций, UTXO, деревья Меркла, хард- и софт-форки и эксплорер блоков.
Содержание:
Как создаются новые биткойны?
Биткойны создаются посредством процесса, известного как майнинг. Майнеры должны решить сложную математическую задачу (называемую Proof-of-Work, или PoW, – доказательство выполнения работы), прежде чем смогут добавить новые транзакции в блокчейн. Взамен они получают вознаграждение в виде новых биткойнов.
Майнером может стать любой, у кого есть компьютер. Став майнером, вы можете участвовать в подтверждении и записи транзакций вместе с другими майнерами.
Время создания блоков и корректировка сложности
Сложно предсказать, сколько майнеров присоединится к сети. Если их будет слишком мало, система будет слишком медленной, что приведёт к плохому пользовательскому опыту. Если же их будет слишком много, система будет слишком быстрой, что приведёт к проблемам с безопасностью (например, будет проще осуществить двойное расходование). Поэтому важно, чтобы система поддерживала относительно постоянный темп независимо от того, сколько существует майнеров (другими словами, вычислительной мощности).
Биткойн использует механизм, известный как «корректировка сложности», чтобы поддерживать постоянную скорость майнинга – примерно 10 минут на блок. «Сложность» корректируется каждые две недели, принимая во внимание вычислительную мощность за это время. Если вычислительная мощность недостаточная (т. е. среднее время создания блока больше 10 минут), сложность понижается. И наоборот, если вычислительная мощность слишком высокая (т. е. блоки в среднем создаются чаще, чем каждые 10 минут), сложность повышается.
Как происходит корректировка сложности?
Протокол Биткойна требует от майнеров соревноваться друг с другом, кто быстрее решит криптографическую задачу (известную как доказательство выполнения работы), чтобы победитель смог предложить новый блок и добавить его в блокчейн.
Криптографическая задача решается посредством подбора так называемого нонса так, чтобы хеш блока не превышал целевое значение (размером меньше 256 битов).
Интересно почитать: Чтобы понять блокчейн, нужно понять, что такое хеш
Майнеры должны найти такое случайное 32-битное число, известное как нонс, чтобы хеш блока был меньшим или равным целевому значению, заданному сетью. Если ваш хеш меньше цели, то вы выигрываете и получаете вознаграждение за майнинг. Если нет, то вы меняете нонс и пробуете ещё раз, и т. д.
Чем больше вычислительной мощности в сети, тем меньше целевой хеш. Чем меньше целевой хеш, тем сложнее майнерам найти подходящий нонс, чтобы создать хеш блока, который будет меньше этого целевого хеша. (Представьте, что компьютер случайным образом выбирает число от 1 до 100. Вероятность получить число меньше 10 равна 0,1, тогда как вероятность получить число меньше 50 равна 0,5.)
Следовательно, так сеть Биткойна выполняет корректировку сложности.
Что такое хешрейт, вознаграждение за майнинг и транзакционные комиссии?
В предыдущем разделе мы увидели, почему вычислительная мощность важна и как она связана со временем создания блоков и корректировкой сложности. Вычислительную мощность можно измерить по хешрейту.
Хешрейт
Хешрейт – это число операций хеширования, выполняемых за единицу времени. Этот показатель варьируется в зависимости от используемого оборудования. Например, если устройство майнера способно генерировать хешрейт 30 МГц, то это равнозначно 30 млн хешей в секунду (хеш – это одно превращение из одного состояния в другое, или, если ещё упростить, одно вычисление).
Таким образом, графический процессор с хешрейтом 30 МГц совершает 30 млн вычислений в секунду.
Чем выше хешрейт, тем выше вероятность, что майнер решит задачу и получит вознаграждение за блок. Вероятность решения майнером задачи можно приблизительно оценить с помощью следующей формулы:
P = X / Y,
где:
Наверное, вы слышали о майнинговых фермах – огромных комплексах промышленных масштабов, укомплектованных оборудованием, чьё единственное назначение – майнить криптовалюту. Там могут быть тысячи соединённых GPU (графических процессоров) или ASIC (интегральных схем специального назначения), что значительно увеличивает общую вычислительную способность в сравнении с отдельной единицей оборудования. Цель всего этого – увеличить вероятность решения задачи и получения вознаграждения за майнинг.
Вознаграждение за майнинг
Вознаграждение за майнинг – это компенсация (в виде только что созданных монет), выплачиваемая системой майнерам, которые решили криптографическую задачу и получили право создать новый блок.
В настоящее время вознаграждение за каждый блок Биткойна составляет 6,25 монеты. Чтобы получить это вознаграждение, майнеры соревнуются, кто первым решит задачу. Следовательно, чем выше хешрейт, тем больше вероятность получить вознаграждение. Чтобы улучшить окупаемость инвестиций и повысить вероятность успешного майнинга, майнинговым компаниям и индивидам часто приходится сначала потратить немалую сумму на оборудование и электричество.
Однако из-за резкого роста общего хешрейта сети индивидуальным майнерам становится практически невозможно майнить биткойны, так как их ресурсы ограничены. Поэтому индивиды могут предоставить свои ресурсы общему пулу, который будет выполнять майнинг за них. Так пулы могут получить больше ресурсов, чтобы конкурировать друг с другом, а индивиды могут получить вознаграждение, пропорциональное предоставленному ими хешрейту, чтобы смягчить волатильность, с которой они могут встретиться при самостоятельном майнинге.
Каждые 210 000 блоков вознаграждение за майнинг уменьшается в два раза. Биткойн начинал с вознаграждения за блок 50 BTC, затем в 2012 г. оно уменьшилось до 25 BTC, а в 2016 г. – до 12,5 BTC. В 2020 г. вознаграждение за блок уменьшилось ещё в два раза – до 6,25 BTC, и так будет продолжаться, пока не будут намайнены все 21 млн BTC.
У разных криптовалют разные вознаграждения за майнинг и разное расписание эмиссии. Узнать их можно в уайтпейпере соответствующей криптовалюты.
Вознаграждение за блок выплачивается посредством coinbase-транзакции – первой транзакции в блоке. Помимо вознаграждения, она выплачивает майнерам транзакционные комиссии.
Транзакционные комиссии
Поскольку у Биткойна и других криптовалют, использующих PoW-механизм, вознаграждение за майнинг постепенно уменьшается, у майнеров есть также другой стимул, чтобы подтверждать транзакции: сетевые комиссии. Пользователи криптовалют, использующих PoW-консенсус, должны также платить майнерам сетевую комиссию за каждую транзакцию. Эта комиссия может варьироваться в зависимости от загрузки сети и конкретной криптовалюты. Транзакционные комиссии – это остаток входа транзакции, который остаётся неизрасходованным. Обычно они вычисляются в сатоши на байт.
Комиссии мотивируют майнеров подтверждать ваши транзакции. Можно платить низкие комиссии или не платить вообще, но это существенно снижает вероятность включения транзакции в ближайший блок.
Есть также монеты с низкими или нулевыми комиссиями, но они обычно используют другой тип консенсуса (например, DPoS, PBFT) или другую технологию (например, DAG). Самые известные примеры таких монет – XRP, EOS и IOTA.
Предложение биткойнов
Конечное предложение биткойнов – 21 000 000. На данный момент уже намайнено почти 19 000 000 монет. Изначально вознаграждение за блок было 50 BTC, но оно уменьшается в два раза каждые 210 000 блоков, что называется халвинг и случается примерно каждые 4 года. Следовательно, темп инфляции заметно падает. Текущее вознаграждение за блок 6,25 BTC (после трёх халвингов). Следующий халвинг Биткойна ожидается 3 июня 2024 г. Прогнозируется, что все биткойны будут намайнены вскоре после 2100 г.
Из-за потери приватных ключей или повреждения оборудования некоторые биткойны навсегда утеряны, так что фактическое предложение значительно меньше теоретического значения. Изобретатель Биткойна Сатоши Накамото также оставил свою значительную сумму монет нетронутой, после того как она была намайнена много лет назад.
Как работают транзакции Биткойна?
Представим процедуры транзакций Биткойна на примере следующего сценария:
Онлайн-продавец Боб решает принимать платежи в биткойнах. Алиса имеет биткойны и хочет что-то купить у Боба.
Кошельки и адреса
Кошельки – это файлы, предоставляющие доступ к нескольким адресам Биткойна.
Адрес – это строка букв и цифр, например 1HULMwZEPkjEPech43BeKJL1ybLCWrfDpN. Каждый адрес имеет собственный баланс биткойнов.
Адреса можно представить себе как банковские счета, но они работают несколько иначе. Пользователи Биткойна могут создавать сколько угодно адресов.
Создание нового адреса
Адреса для пользователей генерирует клиентское ПО Биткойна.
Когда Боб создаёт новый адрес, на самом деле он генерирует пару криптографических ключей, состоящую из закрытого, или приватного, ключа (известного только вам) и открытого, или публичного (известного всем). Если вы подпишете сообщение приватным ключом, его можно проверить с помощью публичного ключа. Новый адрес Боба представляет собой уникальный публичный ключ, а соответствующий приватный ключ хранится в его кошельке. Публичный ключ позволяет любому проверить подлинность сообщения, подписанного приватным ключом.
Отправка платежа
В кошельке Алисы содержатся приватные ключи для каждого из её адресов. Биткойн-клиент подписывает запрос о транзакции приватным ключом, соответствующим адресу, с которого отправляются монеты.
Любой участник сети теперь может с помощью публичного ключа удостовериться, что запрос о транзакции поступил от законного владельца счёта.
Для получения биткойнов используется публичный ключ.
Приватный ключ используется, чтобы подписать транзакцию, а также чтобы потратить биткойны.
Чтобы потратить биткойны, их текущий владелец предоставляет в соответствующей транзакции свой публичный ключ и цифровую подпись.
Цифровая подпись транзакции создаётся с помощью приватного ключа, что означает авторизацию расходования средств, на которые ссылается транзакция.
С помощью публичного ключа и цифровой подписи любой участник сети Биткойна может проверить транзакцию и принять её как действительную, подтвердив, что лицо, отправляющее монеты, владело ими на момент перевода.
Подтверждение транзакции
Криптографические хеши
Криптографические хеш-функции превращают набор данных в буквенно-цифровую строку фиксированной длины, называемую хеш-суммой. Даже минимальное изменение исходных данных существенно изменит результирующую хеш-сумму. И практически невозможно спрогнозировать, какие исходные данные дадут конкретную хеш-сумму.
Вход | Выход SHA256 |
BitNovosti | 491fd0ac791d6ef2229de5cab423ca6eb21dfe16e129e3a89a6893682a80e219 |
Bitnovosti | 950822b5e38e6c48e20add70a4593d7f4b66917c457d06ff929fe4e7e86d440a |
bitnovosti | 8b4cd5c3d8be54f7a19cae929f0e15b6de0bdda08ce929c327c90fa82611e2aa |
Нонсы
Чтобы получить разные хеш-суммы из одних и тех же данных, Биткойн использует нонсы. Нонс – это просто случайное число, которое добавляется к данным перед хешированием. Изменение нонса ведёт к совершенно другой хеш-сумме.
Компьютеры майнеров вычисляют хеш-суммы на основе комбинации предыдущей хеш-суммы, нового блока транзакций и нонса.
Хеширование само по себе несложная вычислительная задача, но система Биткойна требует, чтобы новая хеш-сумма имела определённый вид – в частности, она должна начинаться с определённого количества нулей.
Майнеры не могут спрогнозировать, какой нонс даст хеш-сумму с нужным количеством нулей в начале. Поэтому они вынуждены генерировать множество хешей с разными нонсами, пока не получат подходящее значение.
Каждый блок включает coinbase-транзакцию, выплачивающую майнеру-победителю – в нашем примере Гэри – вознаграждение. В кошельке Гэри создаётся новый адрес с балансом в виде только что намайненных биткойнов.
Изначально вознаграждение за каждый блок составляло 50 BTC. После каждых 210 000 блоков, или примерно каждые четыре года, вознаграждение сокращается в два раза. С мая 2020 г. вознаграждение за блок составляет 6,25 BTC. Кроме того, майнер получает комиссии, уплаченные отправителями транзакций. Комиссия мотивирует майнера включить транзакцию в свой блок.
Транзакция подтверждена
UTXO
Прежде чем представить UTXO, необходимо знать, что такое вход и выход транзакции Биткойна.
Вход
Вход – это ссылка на выход предыдущей транзакций. Все значения входов новой транзакции (то есть общая сумма предыдущих выходов, на которые ссылаются входы новой транзакции) слагаются, и сумма (за вычетом комиссии) полностью используется в выходе новой транзакции.
Часто транзакция включает несколько входов.
Выход
Выход содержит инструкции по отправке биткойнов. Выход транзакции включает сумму, которую этот выход будет стоить, когда будет затребован.
UTXO (неизрасходованный выход транзакции)
Поскольку выход каждой конкретной транзакции может быть расходован только один раз, выходы всех транзакций, включённых в блокчейн, можно разделить на неизрасходованные (UTXO) и израсходованные. Чтобы транзакция была действительной, её входами должны быть только UTXO.
Каждая транзакция имеет как минимум один вход и один выход. Каждый вход расходует сатоши, выплаченные в предыдущем выходе. Затем каждый выход ждёт в виде UTXO, пока его не израсходует последующий вход. Когда ваш кошелёк говорит вам, что у вас есть 10 000 сатоши, эти сатоши представляют собой один или несколько UTXO.
Представьте, что вы ранее использовали адрес 1HULMwZEPkjEPech43BeKJL1ybLCWrfDpN, чтобы дважды получить биткойны. Транзакция от 02/05/2019 содержит 4000 сатоши, а транзакция от 03/09/2019 – 6000 сатоши. Блокчейн Биткойна не поможет вам сложить баланс, чтобы существовала запись вида 1HULMwZEPkjEPech43BeKJL1ybLCWrfDpN: 10 000. Вместо этого каждый раз, когда вы хотите потратить свои биткойны, вы должны разблокировать каждую принадлежащую вам транзакцию (с биткойнами, отправленными по вашему публичному ключу) по отдельности.
Если вы хотите потратить 3000 сатоши, то вам нужно разблокировать либо транзакцию от 02/05/2019, либо транзакцию от 03/09/2019, так как каждая из них содержит больше, чем 3000 сатоши. Но если вы хотите отправить 8000 сатоши, вам нужно разблокировать обе транзакции и отправить все монеты в новой транзакции.
Частичное расходование не разрешено, поэтому вы должны использовать все разблокированные биткойны. Если вы намеревались отправить только 8000 сатоши, то вам всё равно надо расходовать 10 000 сатоши в новой транзакции, а затем расходовать 2000 сатоши обратно на принадлежащий вам адрес.
Дерево Меркла
В блоке Биткойна содержится много транзакций. Иногда нам нужно проверить, включена ли определённая транзакция в блок или нет.
Дерево Меркла суммирует все транзакции блока, создавая цифровой отпечаток всего множества транзакций, что позволяет пользователю проверить, включена ли транзакция в блок.
Технически дерево Меркла – древовидная структура, которая строится путём хеширования спаренных данных (листьев) и затем спаривания и хеширования результатов, пока не останется один хеш – корень Меркла. Дерево строится снизу вверх начиная с хешей отдельных транзакций (известных как ID транзакций, или TXID). В Биткойне дерево Меркла использует двойной SHA-256 – хеш SHA-256 хеша SHA-256 какого-то значения. Хеш-функцию для транзакции A можно представить как hash(hash(A)).
Каждый листовой узел – это хеш данных транзакций, а нелистовой – хеш предыдущих хешей. Деревья Меркла бинарны и поэтому требуют чётного количества листовых узлов. Если число транзакций нечётное, последний хеш будет продублирован один раз, чтобы создать чётное число листовых узлов.
Например, представьте блок из четырёх транзакций A, B, C и D. Дерево Меркла будет выглядеть следующим образом:
Простой способ, как создать уникальный отпечаток всех TXID, – это объединить их и хешировать. Но если мы хотим проверить, является ли какой-то TXID частью хеша, нам понадобится также знать все остальные TXID.
Простой хеш
Однако с деревом Меркла, если мы хотим проверить, является ли TXID частью корня Меркла, нам понадобится знать лишь некоторые хеши вдоль пути дерева. Как следствие, если использовать дерево Меркла как наш уникальный отпечаток в заголовке блока, мы сможем позже выяснить, присутствует ли транзакция в блоке, без необходимости знать все остальные TXID блока.
Хард- и софт-форки
Форком в программировании называют модификацию открытого кода. Как правило, код форка похож на оригинал, но с существенными изменениями, причём две версии могут спокойно сосуществовать.
Поскольку криптовалюты децентрализованы, все участники их сетей – известные как узлы – должны придерживаться одних и тех же правил, чтобы должным образом работать вместе. Такой набор правил известен как протокол. Типичные правила протокола включают размер блока в блокчейне, вознаграждения, получаемые майнерами за майнинг нового блока, и многое другое. Децентрализованный характер блокчейна означает, что узлы сети должны быть способны прийти к согласию касаемо общего состояния блокчейна. Единообразный протокол для всех сетевых узлов ведёт к единому блокчейну, содержащему проверенные данные (транзакции), которые сеть считает верными. Однако если в сети есть узлы, которые не могут прийти к согласию насчёт состояния блокчейна, то это ведёт к разделению на две ветви. В мире криптовалют форк чаще используется для реализации фундаментальных изменений или создания нового актива с похожими (но не идентичными) характеристиками, как у оригинала.
В криптовалютах есть два вида форков: софт-форки и хард-форки. Но оба типа форков фундаментально меняют работу протокола криптовалюты.
Хард-форк
Хард-форк – это радикальное изменение криптовалютного протокола, несовместимое с предыдущими версиями, что означает, что узлы с более старой версией протокола не смогут обрабатывать транзакции и добавлять новые блоки в блокчейн. Транзакции ответвившегося (нового) блокчейна будут недействительными в старом блокчейне. Все узлы и майнеры должны обновиться до последней версии протокола, если хотят быть на новом блокчейне.
Например, протокол увеличивает лимит размера блоков с 2 МБ до 4 МБ. Если обновившийся узел попытается добавить в блокчейн блок на 3 МБ, старые, не обновившиеся узлы не будут считать этот блок действительным и отклонят его. Таким образом, возникнет две версии когда-то единого блокчейна. В одной будут блоки и старой, и новой версии, а в другой – только старой. То, какой блокчейн будет расти быстрее, зависит от того, какие узлы будут подтверждать следующие блоки, и возможны также дальнейшие расколы. Не исключено, что два блокчейна (или больше) могут параллельно расти как угодно долго.
В зависимости от ситуации, хард-форки могут быть запланированными или противоречивыми.
В случае запланированного форка узлы добровольно обновляют своё ПО, чтобы следовать новым правилам, забрасывая старую версию. Те, кто не обновится, будут майнить в старом блокчейне, который будет использовать очень мало людей.
Но если форк противоречивый, это означает, что в сообществе возникли разногласия вокруг обновления. Обычно протокол разветвляется на два несовместимых блокчейна – и две разных криптовалюты. У каждого блокчейна будет своё сообщество, и разработчики выберут то, которое им кажется лучшим.
Поскольку новый форк основан на оригинальном блокчейне, все транзакции оригинального блокчейна также копируются в новый форк. Например, если у вас есть 100 монет криптовалюты А и хард-форк, основанный на этой криптовалюте, создаст новую криптовалюту Б, то у вас также будет 100 монет криптовалюты Б.
Софт-форк
Софт-форк – это изменение криптовалютного протокола, оставляющее его обратно совместимым. Это значит, что не обновившиеся узлы по-прежнему могут обрабатывать транзакции и добавлять новые блоки в блокчейн, если они не нарушают правила нового протокола. Такой форк требует только, чтобы большинство майнеров обновились в соответствии с новыми правилами, тогда как хард-форк требует, чтобы (почти) все узлы обновились и согласились с новой версией.
Например, принято новое правило, уменьшающее лимит размера блоков с 3 МБ до 2 МБ. Старые узлы по-прежнему смогут обрабатывать транзакции и добавлять новые блоки, не превышающие 2 МБ. Но если старый узел попытается добавить в сеть блок больше 2 МБ, обновившиеся узлы его отклонят, потому что он нарушает новые правила. Это побуждает старые узлы обновляться, потому что они не так эффективны, как обновившиеся.
Обозреватель блокчейна/блоков
Обозреватель (эксплорер) блоков – это онлайн-инструмент для просмотра блокчейна и проверки транзакций. Он предоставляет такую информацию, как содержимое отдельного блока, история транзакций и баланс адресов. Обозреватель блоков – это просто поисковый инструмент. Подобно тому как вы используете веб-браузеры для навигации в интернете, эксплорер блоков позволяет просматривать блокчейн.
Эксплореры блоков существуют как для Биткойна, так и для альткойнов. Чтобы найти транзакции в конкретной криптовалюте, нужно использовать соответствующий эксплорер. Для Биткойна есть такие популярные эксплореры блоков, как blockexplorer.com, blockchain.com, blockcypher.com и btc.com. Представим некоторые из наиболее распространённых функций эксплорера блоков на примере blockexplorer.com.
Последние блоки и последние неподтверждённые транзакции
Практически все эксплореры блоков содержат информацию о недавних блоках и транзакциях. Когда майнер решил задачу, он добавляет блок в блокчейн, и эксплореры затем обновляют эту информацию.
Поиск блоков и просмотр всех их транзакций
Возможно, вы хотите узнать более подробную информацию по каждому блоку. Можно либо кликнуть ссылку в списке блоков, либо ввести номер блока непосредственно в поисковую панель эксплорера.
Также можно найти информацию по каждой транзакции того или иного блока. Когда вы кликнете по транзакции, отобразятся её ID и соответствующие адреса. Вы можете легко узнать, сколько биткойнов было переведено, какой адрес их отправил и какой получил.
Дополнительные возможности
Данные, отображаемые в эксплорерах блоков, взаимосвязаны. Например, можно кликнуть по любой транзакции, чтобы увидеть больше подробностей о ней. Вы увидите номер блока, в котором случилась транзакция, общее число подтверждений и некоторые дополнительные данные. Далее можно кликнуть по адресу кошелька и проверить его историю транзакций и баланс.
Остальное читатель может изучить самостоятельно, исследуя блокчейны с помощью обозревателей блоков.
Вы всегда можете поблагодарить переводчика за проделанную работу: BTC: 3ECjCH5tPoyDCqHGCXfiiiLZQ3tVGzCSxB ETH: 0xf45a9988c71363b717E48645A412D1eDa0342e7E
Источник: bitnovosti.com