Что такое хэш транзакции в блокчейн
Когда-нибудь задумывались, как работает майнинг в блокчейне, или как транзакции подтверждаются и добавляются в блокчейн? И я тоже. Но из-за того, что мне так и не попалось чёткое и доступное пошаговое объяснение этого процесса, я решил написать его сам. Итак, представляю вам результат моего исследования на тему, как обрабатываются транзакции в блокчейне. И всего за семь шагов.
Шаг 1: Пользователь, намереваясь переслать кому-то другому некую сумму в криптовалюте или токен, подтверждает транзакцию в своём приложении-кошельке.
Шаг 2: Транзакция затем транслируется приложением кошелька в сеть соответствующего блокчейна. Там она попадает в «пул неподтверждённых транзакций», где и будет находится до тех пор, пока её не подберёт какой-нибудь майнер (тот, кто занимается майнингом). Такой пул представляет собой скопление неподтверждённых транзакций, ожидающих обработки. Чаще всего неподтверждённые транзакции собираются не в одном гигантском пуле, а в небольших разделённых локальных пулах.
Шаг 3: Майнеры, находящиеся в сети (иногда называемые узлами или нодами, но это не совсем то же самое, что и майнеры!), выбирают транзакции из пулов и собирают из них новый «блок». Блок, по сути, это набор транзакций (на этот момент времени всё ещё неподтверждённых транзакций), плюс дополнительные метаданные. Каждый майнер собирает свой собственный блок транзакций. Одни и те же транзакции могут быть добавлены разными майнерами в свои блоки.
Пример: Рассмотрим двух майнеров, майнера А и майнера Б. Оба этих майнера могут решить включить некую транзакцию Х в свои блоки. В каждом блокчейне установлены свои ограничения максимального размера блока. В Биткойн-блокчейне максимальный размер блока составляет 1 мегабайт (Мб) данных. Прежде чем добавить транзакцию в блок, майнеру необходимо проверить отвечает ли транзакция требованиям к исполнению, в соответствии с историей транзакций в блокчейне. Если на балансе кошелька отправителя находится достаточно средств согласно существующей истории транзакций блокчейна, транзакция считается действительной и может быть добавлена в блок. Если владелец биткойнов захочет ускорить процесс обработки своей транзакции, он может предложить более высокую награду за майнинг. В этом случае, как правило, майнеры присвоят более высокий приоритет этой транзакции по сравнению с другими, в связи с возможностью получить большее вознаграждение за процесс майнинга.
Шаг 4: Выбирая транзакции и добавляя их в свой блок, майнеры тем самым создают блок транзакций. Для того, чтобы блок в последующем мог быть добавлен в блокчейн (что означает, что все узлы в блокчейне зарегистрируют транзакции, находящиеся в этом блоке), в первую очередь блоку необходима подпись, также называемая «доказательством выполнения работы» (англ. Proof-of-work или PoW). Эта подпись создаётся путём решения очень сложной математической задачи, которая является уникальной для каждого блока транзакций. Разным блокам соответствуют разные математические задачи, так что каждый майнер будет работать над решением своей задачи, уникальной для сформированного им блока. Все задачи одинаково трудны для решения. При решении такой математической проблемы затрачиваются большие вычислительные мощности (а, соответственно, и большое количество электроэнергии). Вы можете сравнить это с выполнением вычислений на калькуляторе, только в данном случае всё гораздо сложнее и делается на персональном компьютере. Этот процесс называется майнингом. Если вы хотите узнать более подробно о том, что за математические задачи приходится решать в процессе (на самом деле, это не так сложно), тогда, пожалуйста, продолжайте читать дальше. В противном случае, если нужен материал «полегче», сразу переходите к «шагу 5».
Пример хэша
Хэширование слова «Компьютер» будет той же длины, что и хеш фразы «Майнинг это круто». Функция, используемая для генерации хеша, является детерминированной, что означает, что она будет давать один и тот же результат каждый раз, когда используется один и тот же ввод.
Обработка хеш-функций, необходимых для шифрования новых блоков, требует значительной вычислительной мощности компьютера (майнинг фермы), что становится в наше время дорогостоящим занятием.
Чтобы привлечь как можно больше майнеров, сама сеть криптовалюты вознаграждает их как новыми токенами, так и монетами с комиссии за транзакцию.
Майнеры получают монеты только в том случае, если они первыми создали хэш, который отвечает требованиям, указанным в целевом хеше.
Вы только что сделали платеж, и получатель запрашивает "хэш транзакции" (“transaction hash”)? Транзакция могла быть в любой криптовалюте: Биткойне, Ethereum (Эфире), Litecoin или Dash; часто продавец попросит у Вас хэш или идентификатор транзакции в качестве доказательства оплаты.
Существуют и другие сценарии, в которых сторонняя служба кошельков или торговая платформа потребует от Вас отправки идентификатора хэша транзакции, чтобы устранить любые проблемы, которые у Вас есть.
Так как же найти эту (Tx Hash) Хэш-ТХ / TxID? Но прежде всего, безопасно ли делиться этой информацией и что такое идентификатор транзакции?
10-минутное решение
Сатоши предусмотрел механизм, сглаживающий эту проблему, и он также полагается на возможности хеш-функций. Вот как я предпочитаю смотреть на его решение:
Представьте, что ваша хеш-функция на выходе вместо цифр и букв даёт животных. Существует равная вероятность, что при вводе рандомных данных хеш-функция выдаст слона или обезьяну. Ваши случайно выбираемые данные могут быть переведены либо в одно, либо в другое животное с одинаковой вероятностью.
Но теперь представьте, что вы задаёте определённые критерии того, в какое животное должна перевести ваши данные хеш-функция, чтобы работать. Это влияет на вероятность хеширования тех или иных данных в животное, удовлетворяющее вашим критериям. Например, данные «abc123» с большей вероятностью выдадут любое животное (на самом деле в данном примере вероятность 100%), чем любое двуногое, потому что существует намного больше потенциальных догадок, подходящих под любое животное, чем под любое двуногое. Ещё меньше вероятность получить любую обезьяну.
Блокчейн Биткойна работает так, что игра на отгадывание самокорректируется, чтобы всегда быть достаточно сложной, чтобы все компьютеры сети могли угадывать только каждые 10 минут, независимо от мощности отгадывающих компьютеров. Это значит, что угадывание хеша и майнинг блока сегодня теоретически намного сложнее, чем при запуске Биткойна в 2009 г., потому что в сети очень много сверхмощных компьютеров. И в самом деле, сегодня невозможно майнить биткойны с помощью обычного ноутбука, тогда как в ранние дни Биткойна все участники сети использовали стандартные компьютеры.
Так как же протокол Биткойна гарантирует, что игра на отгадывание будет становиться достаточно сложной, чтобы даже чрезвычайно мощным майнинговым компьютерам на отгадывание требовалось примерно 10 минут? Вспомните пример с обезьяной. Чем более конкретные критерии заданы для выхода хеш-функции, тем больше догадок нужно сделать, чтобы получить этот более конкретный выход. Вместо того чтобы «правильным» ответом было животное (легко), двуногое (сложно) или обезьяна (сложнее), для «правильной» строки хеша, выигрывающей игру, задаются всё более конкретные критерии. В частности, игра усложняется посредством требования наличия у правильного хеша в начале определённого количества нулей.
Представьте себе это следующим образом. Если я попрошу вас отгадать рандомное трёхзначное число, чтобы получить шоколадку, у вас больше шансов угадать, если правильное число – любое трёхзначное число, чем если это любое трёхзначное число, начинающееся с 0. Это сложно понять, но в основе лежит математический закон, говорящий, что достаточно квадратного корня N рандомных событий, чтобы вероятность их совпадения составляла 50%. Та же самая математика поддерживает парадокс дней рождения – если в комнате всего 23 человека, существует 50% вероятность, что у двух из них день рождения в один и тот же день.
К сожалению, делая угадывание числа всё сложнее и сложнее, блокчейн Биткойна неизбежно пришел к исключению из майнинга обычных людей. Но это справедливая цена децентрализации. Без этого одна богатая компания могла бы теоретически создать чрезвычайно мощный компьютер, способный мгновенно добыть все оставшиеся биткойны.
Должен заметить, что я лишь (с трудом) понимаю, как работает блокчейн Биткойна.
Другие блокчейны могут использовать криптографию совершенно иначе, чем я здесь описал. Например, я не знаю, использует ли ту же систему доказательство доли владения (proof of stake) – как утверждается, более эффективное усовершенствование доказательства выполнения работы.
Но так как блокчейн Биткойна является моделью для всех других блокчейнов, его понимание – это важнейший шаг к постижению мира криптовалют. Хотя существенно также понимание многих других аспектов блокчейна, осмысление того, как он использует криптографию, – наверное, важнейшая часть пазла.
Хэш - это функция, которая реорганизует ввод букв и цифр в зашифрованный вывод фиксированной длины. Хэш создается с использованием алгоритма и необходим для управления цепочкой блоков в криптовалюте.
Блок Explorer
Все действия блокчейна находятся в открытом доступе. Таким образом, можно просмотреть не только баланс Биткойнов или адрес, но и проверить хэш транзакции конкретной транзакции. Вы можете использовать следующие block explorers для следующих криптовалют.
Эфириума – etherscan.io
Litecoin- insight.litecore.io
Чтобы узнать TxID или TxHash, найдите свой BTC-адрес или адрес получателя в block explorer. Если Вы видите множество транзакций в списке, просто найдите сумму Биткойнов, которую вы отправили. Таким образом, Вы сможете найти эту конкретную транзакцию. После того, как вы нашли свою транзакцию, вы также должны найти хэш-идентификатор транзакции. Вы можете просто поделиться идентификатором транзакции или найти его и поделиться URL-адресом страницы с получателем.
Криптография — это сердце блокчейна, которое обеспечивает работу системы. Архитектура блокчейна предполагает, что доверие между участниками сети базируется на принципах математики и экономики, то есть является формализованным. Криптография также гарантирует безопасность, причем основанную на прозрачности и проверяемости всех операций, а не на традиционном для индустрии ограничении видимости системы (perimeter security).
Различные криптографические техники гарантируют неизменность журнала транзакций блокчейна, решают задачу аутентификации и контролируют доступ к сети и данным в блокчейне в целом. В сегодняшнем материале мы поговорим о хеш-функциях, ключах и цифровых подписях.
/ изображение BTC Keychain CC
Как работает хэш
Основой любой криптовалюты является блокчейн, который представляет собой глобальную бухгалтерскую книгу, образованную объединением отдельных блоков данных транзакций.
Блокчейн содержит только надежные, проверенные транзакции и тем самым предотвращает мошеннические операции и двойные траты.
Зашифрованное значение представляет собой последовательность цифр и букв, которые совсем не похожи на исходные данные – это и называется хэшем. Майнинг криптовалюты проделывает работу с этим хэшем.
- Хэш - это функция, которая отвечает зашифрованным требованиям, необходимым для вычисления блокчейна.
- Хэши имеют фиксированную длину, однако практически невозможно угадать длину хэша, если злоумышленник пытается взломать блокчейн.
- Хэш разрабатывается на основе информации, содержащейся в заголовке блока.
Хеширование требует обработку данных из блока через математическую функцию, что и приводит к выводу фиксированной длины. Использование фиксированной длины повышает безопасность, так как любой, кто пытается взломать хэш, не сможет определить длину, увидив длину вывода.
Решение хэша – это решение сложной математической задачи, которое начинается с данных, доступных в заголовке блока. Каждый заголовок блока содержит номер версии, временную метку, хэш, использованный в предыдущем блоке, хэш Merkle, одноразовый номер и целевой хэш.
Майнер сосредотачивается на одноразовом числе, строке чисел. Этот номер добавляется к хэшированному содержимому предыдущего блока, который затем сам хэшируется. В случае если новый хэш меньше или равен целевому хэшу, то он становится решением и майнер получает свое вознаграждение, а сам блок добавляется в цепочку блоков.
Способ проверки транзакций блокчейна образован на шифровании данных с использованием алгоритмического хеширования.
Решение хэша требует от майнера определить, какую строку использовать в качестве одноразового номера, что само по себе требует значительного количества проб и ошибок.
Это связано с тем, что одноразовый номер является случайной строкой. Вряд ли майнер удачно придумает правильный одноразовый номер с первой попытки, а это значит, что он потенциально может протестировать большое количество вариантов одноразового номера, прежде чем получить его правильное значение.
Чем больше сложность - мера того, насколько сложно создать хэш, который удовлетворяет требованию целевого хэша, - тем больше времени потребуется для создания решения.
Blockchain кошелек
После того, как Вы сделаете платеж или, как только Вы получите платеж, нажмите на транзакцию, которая покажет Вам более подробную информацию о ней, в том числе Вы увидите статус вашей транзакции. Просто нажмите на него, и он откроет страницу Block explorer, отображающую все детали Вашей транзакции.
Использование TxHash и TxID
Все транзакции на блокчейне находятся в открытом доступе. После того, как вы сделаете платеж или переведете монеты на другой адрес, транзакция будет транслироваться, а также будет сгенерирован хэш-идентификатор Tx. С помощью ID статус транзакции можно легко отслеживать.
Тот, у кого есть TxID узнает все детали перевода, такие как: адрес отправителя, адрес получателя, общая сумма отправки, дата перевода, высота блока, комиссия и количество подтверждений.
Хэш транзакции и идентификаторы не содержат личной информации, поэтому делиться ею можно совершенно безопасно.
Чем эти хэш транзакции и идентификаторы полезны? Как мы уже говорили, это полезно во многих отношениях: например, вы можете поделиться этой информацией с поставщиком услуг, чтобы позволить им узнать о состоянии перевода. Вы можете поделиться своим идентификатором транзакции с продавцом, чтобы подтвердить, что транзакция прошла успешно, и есть много других сценариев, в которых Вам может потребоваться эта функция.
Как хеш-функции применяются в блокчейне
Чтобы блокчейн работал, он должен обновляться. Подобно банку, он должен вести актуальные записи всех транзакций и активов (например, биткойнов), имеющихся у каждого участника сети. Именно при обновлении транзакционной информации любая аутентифицирующая система уязвима для атаки. Банк сглаживает этот риск благодаря наличию строгой централизованной иерархии, гарантирующей подлинность на свой собственный риск. Так как блокчейну удаётся обновляться, оставаясь децентрализованным? Он использует криптографическую вероятностную хеш-игру, называемую «доказательство выполнения работы» (Proof of Work).
Coinbase
Чтобы просмотреть идентификатор транзакции в Coinbase: войдите в свою учетную запись, перейдите на вкладку "Учетные записи" и выберите кошелек (BTC, ETH, LTC, BCH, BAT, ZRX). Теперь нажмите на транзакцию, которую Вы только что отправили или для которой Вы хотите получить идентификатор. Появится всплывающее окно. Теперь нажмите на просмотр транзакции, чтобы узнать идентификатор транзакции.
Как найти hash ID транзакцию?
Если вы новичок в Bitcoin, то Вы можете задаться вопросом, как найти ID транзакции биткойн. Найти идентификатор хэша транзакции очень просто, и здесь мы покажем вам, как найти его на различных сервисах, таких как: Core wallet, Electrum Wallet, Blockchain wallet, биржа Coinbase и другие криптовалютные биржи, Block Explorer.
Пример
Это было самое прекрасное время, это было самое злосчастное время, – век мудрости, век безумия, дни веры, дни безверия, пора света, пора тьмы, весна надежд, стужа отчаяния, у нас было всё впереди, у нас впереди ничего не было, мы то витали в небесах, то вдруг обрушивались в преисподнюю, – словом, время это было очень похоже на нынешнее, и самые горластые его представители уже и тогда требовали, чтобы о нём – будь то в хорошем или в дурном смысле – говорили не иначе, как в превосходной степени:
Тогда как хеш слова «пёс»:
Цифровые подписи
Цифровые подписи в блокчейнах базируются на криптографии с открытым ключом. В ней используются два ключа. Первый — закрытый ключ — нужен для формирования цифровых подписей и хранится в секрете. Второй — открытый ключ — используется для проверки электронной подписи. Открытый ключ реально вычислить на основе закрытого ключа, а вот обратное преобразование требует невозможного на практике объема вычислений, сравнимого с брут-форсом.
Существует множество различных схем криптографии с открытым ключом. Две самые популярные из них — это схемы на основе разложения на множители (RSA) и схемы на основе эллиптических кривых. Последние более популярны в блокчейнах из-за меньшего размера ключей и подписей. Например, в биткойне используется стандарт эллиптической криптографии ECDSA вместе с эллиптической кривой secp256k1. В ней закрытый ключ имеет длину 32 байта, открытый — 33 байта, а подпись — около 70 байт.
Затем Алиса подписывает транзакцию, используя свой секретный ключ. Любой узел в биткойн-сети может проверить, что транзакция подписана определенным открытым ключом (аутентификация), с которым до выполнения транзакции был ассоциирован один биткойн (авторизация). Если эти условия выполнены, то переведенный биткойн начинает ассоциироваться с открытым ключом Боба.
Поскольку в блокчейне нет центрального узла, который может авторизовать произвольные транзакции, безопасность системы становится децентрализованной, а вероятность успешного вмешательства в работу блокчейна снижается практически до нуля.
Таким образом, блокчейн использует цифровые подписи для аутентификации и обеспечения целостности транзакций (и иногда блоков). В случае криптовалюты процесс аутентификации означает, что потратить средства может только тот человек, которому они были посланы другой, более ранней, транзакцией. Особенность блокчейна состоит в том, что информация об аутентификации «вшита» в каждую транзакцию, а не отделена от бизнес-логики, поэтому блокчейн считается более защищенным. В обычной системе можно взломать или административно обойти механизм аутентификации и провести манипуляции с бэкэндом, а в блокчейне сделать этого не получится по определению.
P.S. В наших следующих постах мы планируем затронуть такие моменты, как смарт-контракты и алгоритмы консенсуса, а также поговорить о том, что будет означать распространение квантовых компьютеров для блокчейна.
Очень краткая история цифровых денег
Биткойн – новый подход к предыдущим экспериментам с цифровыми деньгами. В 1990-х это была горячая, но спекулятивная тема. Даже Алан Гринспен в своей речи в 1996 г. сказал:
Мы предвидим в близком будущем предложения эмитентам электронных платёжных обязательств, таких как карты с хранимой стоимостью или «цифровые деньги», создать специализированные эмиссионные корпорации с сильными балансовыми отчетами и публичными кредитными рейтингами
Таким образом, использование цифровой валюты истеблишментом было на повестке дня задолго до Биткойна. Для того чтобы освободить цифровую валюту от истеблишмента, требовалось ещё одно новшество. Этим новшеством стала криптография.
Когда Гринспен произносил свою речь, шифропанки уже экспериментировали с цифровыми валютами с явным намерением дестабилизировать банки. В числе их экспериментов, существовавших до Биткойна, были Hashcash Адама Бэка, BitGold Ника Сабо, B-Money Вэй Дая и RPOW Хэла Финни. Все они использовали возможности криптографических хеш-функций, и вместе они образуют гигантские плечи, на которых сегодня стоит Биткойн.
Что такое криптографические хеш-функции?
Криптографическая хеш-функция берёт данные и, по сути, переводит их в строку букв и цифр. Вы когда-нибудь пользовались URL-сокращалками типа Bitly или TinyURL? Это нечто похожее. Вы вводите что-то длинное, а на выходе получается что-то короткое, олицетворяющее то длинное. Только в случае криптографических хеш-функций ввод не обязательно должен быть длинным. Это может быть что-то очень короткое (например, слово «пёс») или почти бесконечно длинное (например, весь текст «Повести о двух городах»), и на выходе вы получите уникальную строку установленной длины. Кроме того, в отличие от сокращателей ссылок, хеш-функции, применяемые в Биткойне, действуют только в одном направлении. Хотя одни и те же данные всегда дадут один и тот же хеш, воспроизвести изначальные данные по полученному из них хешу невозможно.
Итак, данные вводятся в хеш-функцию, функция выполняется и получается строка букв и цифр (можете попробовать самостоятельно здесь). Эта строка называется хешем. В блокчейне Биткойна хеши состоят из 256 бит или 64 символов.
Может показаться невозможным, чтобы почти бесконечное количество данных могло последовательно переводиться в уникальную строку всего из 64 символов, но именно таким чудесным образом действуют криптографические функции. С помощью этой невероятной технологии целые книги, заполненные текстом, могут быть переведены в одну строку из 64 цифр и букв. И каждый раз, когда вы вводите одни и те же данные, вы получите не только один и тот же хеш, но уникальный и отличный от любого другого хеша.
Кошельки Core и Electrum:
В обоих кошельках Core wallet и Electrum wallet перейдите на вкладку transactions и найдите транзакцию, для которой вы хотели бы знать txID. Как только вы найдете транзакцию, дважды щелкните ее, и откроется окно, в котором вы найдете идентификатор транзакции.
Как работают криптографические хеш-функции
Существуют разные виды криптографических хеш-функций, и каждая из них работает по-разному. Использовавшаяся выше хеш-функция – SHA-256, хеш-функция, применяемая в Биткойне, – работает на основе безумно сложной формулы, связанной с отражением света от эллипсов. Вам не стоит слишком из-за этого переживать. Суть в том, что криптографические хеш-функции – это чертова магия, и вы никогда их до конца не поймете, если только вы не математик.
Что такое хэш транзакции или ID (Tx Hash / TxID)?
Tx Hash – это хэш транзакции, он также известен как идентификатор транзакции (TxID). Он состоит из буквенно-цифровых символов и представляет собой идентификационный номер, указанный для транзакции Биткойнов. Каждая транзакция, которая проводится в блокчейне Bitcoin, имеет этот уникальный идентификатор. Точно так же транзакции на блокчейне Ethereum будут иметь уникальный Tx Hash, и каждая транзакция на блокчейне Litecoin также будет иметь TxID.
Например, Биткоин ID транзакции выглядит так:
Хэш транзакции Ethereum выглядит так:
Этот уникальный идентификатор представляет собой длинную строку букв и цифр, которая используется для идентификации конкретной транзакции в блокчейне.
Майнинг, также известный как хэширование (алгоритм консенсуса «доказательство выполнения работы»/Proof of Work)
Математическая задача, которую приходится решать каждому майнеру при попытке добавления блока в блокчейн, заключается в нахождении хэш-суммы (также называемой цифровой подписью) для данных в этом блоке. Причём подпись должна начинаться с определённого количества идущих подряд нулей. Выглядит весьма трудной задачей, не так ли? На самом деле всё не так сложно. Позвольте мне попытаться объяснить это в упрощённом виде.
Прежде чем мы продолжим, важно знать, что такое хэш-функция. Говоря простым языком, хэш-функция представляет из себя математическую задачу, которую очень сложно решить, но при этом полученный ответ очень просто проверить.
Хэш-функция берёт строку входных данных, состоящую из цифр и букв (любую, в прямом смысле этого слова, строку случайных букв, чисел и/или символов) и преобразовывает её в новую 32-символьную строку, состоящую из случайных букв и цифр. Эта 32-символьная строка и есть хэш-сумма. Если изменяется любая цифра или буква во входящей строке, то хэш-сумма также изменится случайным образом. Однако, одна и та же строка входных данных всегда на выходе будет иметь одну и ту же хэш-сумму.
Теперь примите во внимание, что данные внутри блока – это входные данные для хэширования (та самая строка данных). В результате обработки этих входных данных хэш-функцией мы получаем хэш-сумму (32-символьную строку). Правилами блокчейна Биткойна оговаривается, что только те блоки могут быть добавлены в блокчейн, чьи подписи (хэш-сумма) начинаются с определённого количества нулей. Однако, сгенерированная выходная строка является всегда случайной для разных строк данных на входе. А что если строка данных блока в результате обработки хэш-функцией не даёт на выходе подпись (хэш-сумму), начинающуюся с того определённого количества идущих подряд нулей? Так это и является причиной того, что майнерам приходится многократно изменять некий фрагмент данных своего блока, называемый «нонс» (англ. nonce). Каждый раз, когда майнер изменяет нонс, это влечёт за собой незначительное изменение компоновки данных блока. А когда меняется структура данных внутри блока (то есть, его входные данные), также изменяется и его подпись (или его выходные данные). Итак, каждый раз, когда меняется нонс блока, этот блок получает новую случайную подпись.
Такая процедура изменения нонса повторяется майнерами бесконечное число раз, пока в конечном итоге они случайно не наткнутся на выходную строку, удовлетворяющую требованиям к подписи блока (определённое количество нулей в самом её начале). Ниже приведён пример, иллюстрирующий этот процесс. В примере используется семь нулей, но количество нулей на самом деле зависит от сложности блока в блокчейне. Сложность блока – это несколько более продвинутая тема, поэтому предлагаю вам ознакомиться с ней позднее.
Именно таким образом майнерам приходится искать подходящую подпись для своего блока, и это также является причиной, по которой требуются так много вычислительных мощностей для решения этой математической проблемы. Перебор настолько огромного количества нонсов в попытке угадать правильный занимает много времени и больших вычислительных мощностей. Также следует учитывать то, что с ростом мощности хэширования (количества майнеров) в блокчейне увеличится и сложность математической задачи, что повлечёт за собой увеличение средних расходов на электричество, требуемого для решения блока (подробнее об этом можно прочитать здесь). Вы большие молодцы, если дочитали до этого момента! Давайте продолжим и перейдём к шагу 5.
Примечание: На самом деле этот процесс не определяется как математическая задача, но скорее является чем-то детерминированным – компьютеры выполняют предопределённые операции над числом, чтобы выяснить, является ли результат именно тем, что требуется.
Шаг 5: Майнер, первый нашедший для своего блока удовлетворяющую требованиям подпись, транслирует этот блок и его подпись всем остальным майнерам.
Шаг 6: Другие майнеры теперь проверяют легитимность подписи, беря строку данных транслируемого блока и хэшируя её, чтобы проверить, действительно ли полученная хэш-сумма в результате приводит к включённой в блок подписи с правильным количеством нулей (помните, да? – трудно решить, но легко проверить). Если подпись действительна, то все остальные майнеры подтвердят её достоверность и придут к согласию, что этот блок может быть добавлен в блокчейн (то есть они достигнут консенсуса, говоря другими словами – все согласятся друг с другом – отсюда и термин алгоритм консенсуса). Из этого же проистекает термин «доказательство выполнения работы/proof-of-work». Подпись как раз и является требуемым «доказательством», что работа была произведена (были израсходованы вычислительные мощности). Теперь блок может быть добавлен в блокчейн и разослан всем другим узлам в сети. Те, в свою очередь, примут блок и сохранят его, добавив к своим данным транзакций, при условии, что все транзакции внутри этого блока могут быть исполнены в соответствии с историей, записанной в блокчейне.
Шаг 7: После того, как блок был добавлен в цепочку, все другие блоки, которые будут добавлены после него, будут считаться «подтверждением» для этого блока. Например, если моя транзакция включена в блок 502, а длина блокчейна составляет 507 блоков, это означает, что моя транзакция имеет 5 подтверждений (507-502). Это называется подтверждением, потому что каждый раз, когда новый блок добавляется после вашего, блокчейн вновь достигает консенсуса по поводу всей истории совершённых транзакций, включая вашу транзакцию и ваш блок. Можно также сказать, что на данный момент блокчейн подтвердил вашу транзакцию 5 раз. На это же опирается и Etherscan, когда показывает вам подробные детали вашей транзакции. Чем больше подтверждений будет у вашей транзакции (другими словами – чем глубже в цепочке находится ваш блок), тем сложнее будет для злоумышленников подменить её (подробнее о том, как это работает, можно прочитать здесь). После того, как новый блок добавлен в блокчейн, всем майнерам нужно начинать заново с «шага 3» и сформировать новый блок транзакций. Майнеры не могут продолжать (на самом деле могут, но это несколько выходит за рамки темы, обсуждаемой в данной статье) майнить тот же самый блок, другими словами – решать задачу – того же самого блока, над которым они работали ранее по двум причинам:
Первая: он может содержать транзакции, которые были подтверждены последним блоком, уже добавленным в блокчейн (помните, что разные майнеры могут выбирать/включать одну и ту же транзакцию(ии) в блок, который они решают). Любые из тех транзакций в случае, если они будут запущены вновь, могут быть признаны недействительными, потому что на балансе кошелька отправителя уже может быть недостаточно средств.
И вторая: каждый блок должен добавить хэш-сумму (подпись) последнего добавленного в блокчейн блока в свои метаданные. Именно это и делает блокчейн блокчейном (цепочкой блоков). Если майнер вдруг продолжит майнить тот же самый блок, над которым он уже работал, другие майнеры заметят, что его хэш-сумма не соответствует той, что была в последнем добавленном в блокчейн блоке и, вследствие этого, отвергнут этот блок.
Для меня ключ к познанию блокчейна – это понимание криптографических хешей. Мне кажется, многие из нас, обычных людей, делают ошибку, представляя себе блокчейн как, в первую очередь, списки анонимных транзакций, распределённых по децентрализованным сетям. Хотя отдельный блокчейн действительно таков, иногда упускается из виду, что основой блокчейновой технологии является не децентрализация, анонимность или даже распредёленные реестры, а собственно криптография. Хотя это, наверное, очевидно для человека с базовым пониманием компьютерных наук, для большинства из нас это нечто совершенно новое.
Хеш-функции
Хеширование — это процесс преобразования массива входных данных произвольной длины в (выходную) битовую строку фиксированной длины. Например, хеш-функция может принимать строку с любым количеством знаков (одна буква или целое литературное произведение), а на выходе получать строку со строго определенным числом символов (дайджест).
Хеш-функции имеются практически в любом языке программирования. Например, они используются для реализации хеш-таблиц и множеств (HashMap/HashSet в Java, dict и set в Python, Map, Set и объекты в JavaScript и так далее). Отдельная категория хеш-функций — криптографические хеш-функции. К ним предъявляются существенно более строгие требования, чем к функциям, обычно используемым в хеш-таблицах. Поэтому и применяются они в более «серьезных» случаях, например для хранения паролей. Криптографические хеш-функции вырабатываются и тщательно проверяются исследователями по всему миру.
Поэкспериментировать с хеш-функциями можно, написав простую программу на Python:
Функция hash_hex() рассчитывает представление хеша в шестнадцатеричной записи для строки. В приведенном примере используется функция SHA-256 — та же, что и в биткойне.
Хорошая хеш-функция обеспечивает защиту от коллизий (невозможно получить два одинаковых хеша при разных начальных данных) и обладает так называемым эффектом лавины, когда малейшее изменение входных данных значительно преобразует выходное значение. Эффект лавины в хеш-функции SHA-256 выглядит следующим образом:
Хеш-функции в блокчейнах гарантируют «необратимость» всей цепочки транзакций. Дело в том, что каждый новый блок транзакций ссылается на хеш предыдущего блока в реестре. Хеш самого блока зависит от всех транзакций в блоке, но вместо того, чтобы последовательно передавать транзакции хеш-функции, они собираются в одно хеш-значение при помощи двоичного дерева с хешами (дерево Меркла). Таким образом, хеши используются как замена указателям в обычных структурах данных: связанных списках и двоичных деревьях.
За счет использования хешей общее состояние блокчейна — все когда-либо выполненные транзакции и их последовательность — можно выразить одним-единственным числом: хешем самого нового блока. Поэтому свойство неизменности хеша одного блока гарантирует неизменность всего блокчейна.
Ниже приведена рекурсивная реализация дерева Меркла, используемая в биткойне, на языке Python (по ссылке вы найдете примеры работы). На вход функции подается список хешей транзакций. На каждом этапе вычисления последовательные пары хешей склеиваются при помощи хеш-функции; если хешей нечетное число, то последний дублируется. В результате остается единственный хеш, который и является конечным хеш-значением для всего списка.
Хеш-деревья имеют много применений помимо блокчейнов. Они используются в файловых системах для проверки целостности файлов, распределенных БД для быстрой синхронизации копий и в управлении ключами для надежного журналирования выдачи сертификатов. Git использует обобщение хеш-деревьев — направленные ациклические графы на основе хешей. В блокчейне использование хеш-деревьев продиктовано соображениями производительности, так как они делают возможным существование «легких клиентов», которые обрабатывают лишь малую часть транзакций из блокчейна.
Криптография обеспечивает консенсус
Чтобы продолжать функционировать, блокчейн должен создавать новые блоки. Так как блокчейны – это децентрализованные системы, новые блоки должны создаваться не единственным аутентифицирующим субъектом, а сетью в целом. Чтобы решить, каким будет новый блок, сеть должна достичь консенсуса. Чтобы достичь консенсуса, майнеры предлагают определённые блоки, блоки верифицируются, и, наконец, сеть выбирает единственный блок, который будет следующей частью реестра. Однако очень много майнеров предлагают идентичные блоки, проходящие верификацию. Так каким образом конкретный блок выбирается, чтобы стать следующим в цепи?
Компьютеры соревнуются в хеш-игре. Всё очень просто. По сути, чтобы выиграть игру, майнящий компьютер должен угадать число, называемое «нонс» (nonce), которое в комбинации со всеми предыдущими данными блокчейна даёт при вводе в хеш-функцию SHA-256 определённый хеш.
Помните хакеров из фильмов, использующих программу, угадывающую миллион паролей в минуту, чтобы взломать компьютер? Это что-то вроде этого. Все майнеры мира одновременно используют похожую программу-угадайку, ищущую правильный нонс, который при добавлении к данным блокчейна и вводе в хеш-функцию SHA-256 даст рандомный хеш, который сам блокчейн «определил» как «решение» задачи. Компьютеры, в каком-то смысле, работают совместно, так как каждый предложенный хеш не может быть предложен снова. Компьютер, первым отгадавший правильное число, выигрывает право на создание следующего блока и получает 12,5 биткойна, что сейчас равно примерно $50 000.
Так обеспечивается консенсус, а также предотвращаются атаки, нацеленные на манипулирование системой. Так как результатом каждого ввода является совершенно уникальный хеш, только определенный нонс в комбинации с верными ранее верифицированными блокчейновыми данными даст хеш, решающий уравнение. При вводе неточных или мошеннических предшествующих записей не может быть угадан верный хеш. Таким образом, криптография делает блокчейны более безопасными, чем любой банк с человеческой верификацией.
Тем не менее, поскольку постепенно всё больше людей выделяли всё больше компьютерной мощности на майнинг биткойнов, возникла новая проблема. Новаторы разработали мощные компьютеры, предназначенные исключительно для майнинга биткойнов. Эти компьютеры способны предлагать хеши намного чаще, чем средний компьютер, что позволяет им прийти к верной догадке намного быстрее и, как следствие, намайнить больше биткойнов.
Проблема заключается в том, что когда всё меньше людей могут позволить себе майнинговые технологии, риск централизации возрастает. Блоки создаются и биткойны майнятся, как только находится решение следующего блока. Таким образом, имеющий ресурсы может просто собрать более мощную майнинговую машину, чем у всех других, и майнить огромный процент остающихся биткойнов быстрее всех других, просто предлагая больше догадок в более короткий срок.
Биржи
На большинстве криптовалютных торговых бирж независимо от того, вносите ли вы монеты или снимаете монеты, также будет предоставлен идентификатор транзакции. Обычно Вы можете найти хэш каждой транзакции в истории транзакций вашего счета или в истории платежей.
Читайте также: