Вы только что сделали платеж, и получатель запрашивает «хэш транзакции» (“transaction hash”)? Транзакция могла быть в любой криптовалюте: Биткойне, Ethereum (Эфире), Litecoin или Dash; часто продавец попросит у Вас хэш или идентификатор транзакции в качестве доказательства оплаты.
Существуют и другие сценарии, в которых сторонняя служба кошельков или торговая платформа потребует от Вас отправки идентификатора хэша транзакции, чтобы устранить любые проблемы, которые у Вас есть.
Так как же найти эту (Tx Hash) Хэш-ТХ / TxID? Но прежде всего, безопасно ли делиться этой информацией и что такое идентификатор транзакции?
Что такое хэш транзакции или ID (Tx Hash / TxID)?
Tx Hash – это хэш транзакции, он также известен как идентификатор транзакции (TxID). Он состоит из буквенно-цифровых символов и представляет собой идентификационный номер, указанный для транзакции Биткойнов. Каждая транзакция, которая проводится в блокчейне Bitcoin, имеет этот уникальный идентификатор. Точно так же транзакции на блокчейне Ethereum будут иметь уникальный Tx Hash, и каждая транзакция на блокчейне Litecoin также будет иметь TxID.
Например, Биткоин ID транзакции выглядит так:
Хэш транзакции Ethereum выглядит так:
Этот уникальный идентификатор представляет собой длинную строку букв и цифр, которая используется для идентификации конкретной транзакции в блокчейне.
Использование TxHash и TxID
Все транзакции на блокчейне находятся в открытом доступе. После того, как вы сделаете платеж или переведете монеты на другой адрес, транзакция будет транслироваться, а также будет сгенерирован хэш-идентификатор Tx. С помощью ID статус транзакции можно легко отслеживать.
Тот, у кого есть TxID узнает все детали перевода, такие как: адрес отправителя, адрес получателя, общая сумма отправки, дата перевода, высота блока, комиссия и количество подтверждений.
Хэш транзакции и идентификаторы не содержат личной информации, поэтому делиться ею можно совершенно безопасно.
Чем эти хэш транзакции и идентификаторы полезны? Как мы уже говорили, это полезно во многих отношениях: например, вы можете поделиться этой информацией с поставщиком услуг, чтобы позволить им узнать о состоянии перевода. Вы можете поделиться своим идентификатором транзакции с продавцом, чтобы подтвердить, что транзакция прошла успешно, и есть много других сценариев, в которых Вам может потребоваться эта функция.
Как найти hash ID транзакцию?
Если вы новичок в Bitcoin, то Вы можете задаться вопросом, как найти ID транзакции биткойн. Найти идентификатор хэша транзакции очень просто, и здесь мы покажем вам, как найти его на различных сервисах, таких как: Core wallet, Electrum Wallet, Blockchain wallet, биржа Coinbase и другие криптовалютные биржи, Block Explorer.
Кошельки Core и Electrum:
В обоих кошельках Core wallet и Electrum wallet перейдите на вкладку transactions и найдите транзакцию, для которой вы хотели бы знать txID. Как только вы найдете транзакцию, дважды щелкните ее, и откроется окно, в котором вы найдете идентификатор транзакции.
Биржи
На большинстве криптовалютных торговых бирж независимо от того, вносите ли вы монеты или снимаете монеты, также будет предоставлен идентификатор транзакции. Обычно Вы можете найти хэш каждой транзакции в истории транзакций вашего счета или в истории платежей.
Coinbase
Чтобы просмотреть идентификатор транзакции в Coinbase: войдите в свою учетную запись, перейдите на вкладку «Учетные записи» и выберите кошелек (BTC, ETH, LTC, BCH, BAT, ZRX). Теперь нажмите на транзакцию, которую Вы только что отправили или для которой Вы хотите получить идентификатор. Появится всплывающее окно. Теперь нажмите на просмотр транзакции, чтобы узнать идентификатор транзакции.
Blockchain кошелек
После того, как Вы сделаете платеж или, как только Вы получите платеж, нажмите на транзакцию, которая покажет Вам более подробную информацию о ней, в том числе Вы увидите статус вашей транзакции. Просто нажмите на него, и он откроет страницу Block explorer, отображающую все детали Вашей транзакции.
Блок Explorer
Все действия блокчейна находятся в открытом доступе. Таким образом, можно просмотреть не только баланс Биткойнов или адрес, но и проверить хэш транзакции конкретной транзакции. Вы можете использовать следующие block explorers для следующих криптовалют.
Эфириума – etherscan.io
Litecoin— insight.litecore.io
Чтобы узнать TxID или TxHash, найдите свой BTC-адрес или адрес получателя в block explorer. Если Вы видите множество транзакций в списке, просто найдите сумму Биткойнов, которую вы отправили. Таким образом, Вы сможете найти эту конкретную транзакцию. После того, как вы нашли свою транзакцию, вы также должны найти хэш-идентификатор транзакции. Вы можете просто поделиться идентификатором транзакции или найти его и поделиться URL-адресом страницы с получателем.
Как отследить транзакцию биткоина?
Транзакция биткоина – что это?
Как работают биткоин транзакции
Отправители конкурируют друг с другом, чтобы их транзакцию подтвердили одной из первых.
Майнеры отдают приоритет пользователям, которые платят больше за комиссию. Поэтому во время высокой активности пользователей стоимость транзакций растет, а время подтверждения увеличивается. Транзакции имеют несколько параметров: комиссия сети, вес транзакции и статус. Коротко разберем их.
Вес транзакции
Любая биткоин-транзакция имеет вес, который исчисляется в байтах. Вес учитывает количество всех адресов, с которых была получена криптовалюта (входы) и количество адресов, куда отправляется транзакция (выходы). Чем больше адресов, тем, соответственно, будет больше вес транзакции.
Информация о весе каждой транзакции отображается в блокчейн-обозревателе, о чем мы детально поговорим.
Комиссия сети
Чем больше комиссия отправителя, тем выше будет его приоритет при обработке переводов. Если комиссия окажется слишком низкой, транзакция будет обрабатываться в течение длительного времени (от часа до нескольких дней), может надолго застрять в мемпуле или вовсе отмениться.
Как рассчитывается комиссия сети
Чтобы рассчитать актуальную комиссию, необходимо перемножить вес транзакции в байтах на рекомендуемую во время совершения транзакции комиссию сети (сатоши / байт) ее можно посмотреть в любом обозревателе, например, https://blockchair.com/ru/bitcoin
Детально о том, как рассчитывается комиссия сети мы писали в материале “ Как устроен биткоин ”.
Посчитаем комиссию сети
При размере транзакции 110 байтов и стоимости 99 Сат/байт средняя комиссия составит:
110 x 99 = 10 890 сатоши или 0.00010890 BTC
Обычно комиссию рассчитывают криптокошельки в автоматическом режиме, основываясь на данных из самой сети.
Как крипто кошельки решают вопрос с комиссиями
На практике большинство криптокошельков устанавливают фиксированную максимальную комиссию сети и не дают пользователям возможность регулирования размера комиссии самостоятельно.
Но если ажиотажа в сети нет, транзакция может быть подтверждена достаточно оперативно и при среднем размере комиссии. То есть в таком случае пользователь изначально несет неоправданно высокие расходы.
Как комиссию сети (майнерскую комиссию) устанавливает Trustee Wallet
Команда Trustee Wallet изначально заложила в функциональность кошелька работу с комиссиями сети. Поэтому, при отправке транзакции пользователь может самостоятельно:
Как установить размер комиссии в Trustee Wallet
Чтобы установить размер комиссии пользователю необходимо, следуя за указаниями сервиса, сформировать транзакцию и указать все ее параметры. Напомним, что размер комиссии напрямую влияет на скорость подтверждения транзакции.
К примеру, чтобы отправить биткоин на другой адрес и установить комиссию необходимо:
Статусы транзакции
У транзакции бывает три статуса:
Отслеживание биткоин-транзакций в блокчейне
Отследить перевод биткоина может любой пользователь при помощи специального сервиса – блокчейн-обозревателя. Теперь разберем что потребуется, чтобы отследить транзакцию биткоина по кошельку, как пользователю это сделать самому и какие инструменты для этого существуют.
Что нужно, чтобы отследить биткоин-транзакцию
Где отследить транзакцию биткоина
Отследить транзакцию онлайн можно с помощью любого блокчейн-обозревателя. Вот список популярных обозревателей:
Блокчейн-эксплорер и какая информация в нем есть
Рассмотрим по пунктам, какую информацию предоставляют блокчейн-обозреватели. Покажем их на примере эксплорера Blockchair.com и рандомно взятой транзакции
На картинке проиллюстрированы все ключевые параметры транзакции:
С помощью обозревателя можно отследить весь путь монет, поскольку каждая транзакция, содержит в себе адреса входов и выходов.
Посмотреть адреса можно внизу страницы. Там отобразятся адрес входа (адрес отправителя) и два адреса “выхода” (адрес получателя и адрес для сдачи). Иногда транзакция может включать в себя множество входов и множество выходов, это значит, что сумма отправки была взята с нескольких адресов и отправлена на несколько других адресов разными суммами. Такие транзакции зачастую имеют огромный вес и используются “миксерами” для запутывания следов движения средств.
Таким образом, можно отследить весь путь транзакции.
Вернемся к картинке. На ней отображается два адреса “выхода”, это не значит, что пользовател ь отправил монеты на оба адреса.
В сети Bitcoin транзакции проходят таким образом: при отправке все количество монет на адресе включается в блок. После подтверждения транзакции, количество монет, которые были отправлены переводится на адрес получателя, а непотраченная сумма (сдача) возвращается на адрес отправителя.
Итак, если отправитель использует не всю сумму, которая хранится в кошельке, то сдача отправляется на его же адрес.
В рассматриваемой операции мы видим, что 0.00153951 BTC были отправлены с адреса 1KtQG8vj9EbU6V3QpurDqftDYEzGtuSFWw на адрес 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa а 0.00002280 BTC вернулись на адрес 1KtQG8vj9EbU6V3QpurDqftDYEzGtuSFWw в качестве сдачи.
Все эти показатели мы детально рассмотрели выше.
Как отследить транзакцию биткоина в Trustee Wallet
Зачастую при формировании транзакции в кошельках остается краткая информацию о ней — ее хеш, адрес получателя, сумма отправки, комиссия сети и статус в блокчейне. Больше информации всегда можно посмотреть в эксплорере, попасть в который можно непосредственно из кошелька.
Покажем примеры разных состояний биткоин-переводов.
Пример успешной транзакции:
У транзакции 147 подтверждений при том, что достаточно одного подтверждения, чтобы она была успешной.
Пример неуспешной транзакции:
В этом примере транзакция попала в очередь, но майнеры отклонили ее из-за слишком низкой комиссии.
Пример неподтвержденной транзакции:
В этом случаес транзакцией не возникло проблем – ее просто еще не успели подтвердить майнеры. Как только появится первое подтверждение транзакция получит статус успешной, это будет значить, что отправленные средства находятся у получателя.
Варианты действий с биткоин-транзакцией в Trustee Wallet в зависимости от статуса
Разбираемся, что делать, если транзакция не прошла или долго не подтверждается. Также рассмотрим, как ускорить биткоин-транзакцию на примере криптокошелька Trustee Wallet.
Переотправить
Ожидание
В случае, если транзакция долго не подтверждается, но вы не хотите ее ускорять путем увеличения комиссии — необходимо просто ждать. В результате майнеры или подтвердят транзакцию, или она будет выброшена из мемпула.
Ожидание может занять от пары часов до нескольких суток.
При этом, если транзакция будет выброшена из мемпула, то есть не будет подтверждена, действуем как в пункте Переотправить.
Если вы не хотите долго ждать подтверждения, а на балансе есть часть биткоина для оплаты комиссии, Trustee Wallet сможет помочь вам в ускорении транзакции путем увеличения комиссии. Как это сделать читайте далее.
Ускорить
Возврат транзакции
Этот вариант применим, когда транзакция “застряла”, но вы передумали отправлять средства пользователю.
После нажатия кнопки Возврат адрес получателя автоматически поменяется на ваш адрес, то есть криптовалюта вернется на адрес отправителя. При этом, вам необходимо будет оплатить комиссию сети.
Заключение
«Криптография в блокчейнах»: о хеш-функциях, ключах и цифровых подписях
Криптография — это сердце блокчейна, которое обеспечивает работу системы. Архитектура блокчейна предполагает, что доверие между участниками сети базируется на принципах математики и экономики, то есть является формализованным. Криптография также гарантирует безопасность, причем основанную на прозрачности и проверяемости всех операций, а не на традиционном для индустрии ограничении видимости системы (perimeter security).
Различные криптографические техники гарантируют неизменность журнала транзакций блокчейна, решают задачу аутентификации и контролируют доступ к сети и данным в блокчейне в целом. В сегодняшнем материале мы поговорим о хеш-функциях, ключах и цифровых подписях.
Хеш-функции
Хеширование — это процесс преобразования массива входных данных произвольной длины в (выходную) битовую строку фиксированной длины. Например, хеш-функция может принимать строку с любым количеством знаков (одна буква или целое литературное произведение), а на выходе получать строку со строго определенным числом символов (дайджест).
Хеш-функции имеются практически в любом языке программирования. Например, они используются для реализации хеш-таблиц и множеств (HashMap/HashSet в Java, dict и set в Python, Map, Set и объекты в JavaScript и так далее). Отдельная категория хеш-функций — криптографические хеш-функции. К ним предъявляются существенно более строгие требования, чем к функциям, обычно используемым в хеш-таблицах. Поэтому и применяются они в более «серьезных» случаях, например для хранения паролей. Криптографические хеш-функции вырабатываются и тщательно проверяются исследователями по всему миру.
Поэкспериментировать с хеш-функциями можно, написав простую программу на Python:
Функция hash_hex() рассчитывает представление хеша в шестнадцатеричной записи для строки. В приведенном примере используется функция SHA-256 — та же, что и в биткойне.
Хорошая хеш-функция обеспечивает защиту от коллизий (невозможно получить два одинаковых хеша при разных начальных данных) и обладает так называемым эффектом лавины, когда малейшее изменение входных данных значительно преобразует выходное значение. Эффект лавины в хеш-функции SHA-256 выглядит следующим образом:
Хеш-функции в блокчейнах гарантируют «необратимость» всей цепочки транзакций. Дело в том, что каждый новый блок транзакций ссылается на хеш предыдущего блока в реестре. Хеш самого блока зависит от всех транзакций в блоке, но вместо того, чтобы последовательно передавать транзакции хеш-функции, они собираются в одно хеш-значение при помощи двоичного дерева с хешами (дерево Меркла). Таким образом, хеши используются как замена указателям в обычных структурах данных: связанных списках и двоичных деревьях.
За счет использования хешей общее состояние блокчейна — все когда-либо выполненные транзакции и их последовательность — можно выразить одним-единственным числом: хешем самого нового блока. Поэтому свойство неизменности хеша одного блока гарантирует неизменность всего блокчейна.
Ниже приведена рекурсивная реализация дерева Меркла, используемая в биткойне, на языке Python (по ссылке вы найдете примеры работы). На вход функции подается список хешей транзакций. На каждом этапе вычисления последовательные пары хешей склеиваются при помощи хеш-функции; если хешей нечетное число, то последний дублируется. В результате остается единственный хеш, который и является конечным хеш-значением для всего списка.
Хеш-деревья имеют много применений помимо блокчейнов. Они используются в файловых системах для проверки целостности файлов, распределенных БД для быстрой синхронизации копий и в управлении ключами для надежного журналирования выдачи сертификатов. Git использует обобщение хеш-деревьев — направленные ациклические графы на основе хешей. В блокчейне использование хеш-деревьев продиктовано соображениями производительности, так как они делают возможным существование «легких клиентов», которые обрабатывают лишь малую часть транзакций из блокчейна.
Цифровые подписи
Цифровые подписи в блокчейнах базируются на криптографии с открытым ключом. В ней используются два ключа. Первый — закрытый ключ — нужен для формирования цифровых подписей и хранится в секрете. Второй — открытый ключ — используется для проверки электронной подписи. Открытый ключ реально вычислить на основе закрытого ключа, а вот обратное преобразование требует невозможного на практике объема вычислений, сравнимого с брут-форсом.
Существует множество различных схем криптографии с открытым ключом. Две самые популярные из них — это схемы на основе разложения на множители (RSA) и схемы на основе эллиптических кривых. Последние более популярны в блокчейнах из-за меньшего размера ключей и подписей. Например, в биткойне используется стандарт эллиптической криптографии ECDSA вместе с эллиптической кривой secp256k1. В ней закрытый ключ имеет длину 32 байта, открытый — 33 байта, а подпись — около 70 байт.
Общая идея подписей с открытым ключом выглядит следующим образом. Предположим, что Алиса хочет перевести Бобу один биткойн. Для этого она формирует транзакцию, где записывает, откуда его следует брать (указание на предыдущую транзакцию, в которой Алиса получила биткойн от кого-то еще) и кому отправить (открытый ключ Боба). Алиса знает открытый ключ Боба из сторонних источников — Боб может послать его Алисе через мессенджер или даже опубликовать его на сайте.
Затем Алиса подписывает транзакцию, используя свой секретный ключ. Любой узел в биткойн-сети может проверить, что транзакция подписана определенным открытым ключом (аутентификация), с которым до выполнения транзакции был ассоциирован один биткойн (авторизация). Если эти условия выполнены, то переведенный биткойн начинает ассоциироваться с открытым ключом Боба.
Поскольку в блокчейне нет центрального узла, который может авторизовать произвольные транзакции, безопасность системы становится децентрализованной, а вероятность успешного вмешательства в работу блокчейна снижается практически до нуля.
Таким образом, блокчейн использует цифровые подписи для аутентификации и обеспечения целостности транзакций (и иногда блоков). В случае криптовалюты процесс аутентификации означает, что потратить средства может только тот человек, которому они были посланы другой, более ранней, транзакцией. Особенность блокчейна состоит в том, что информация об аутентификации «вшита» в каждую транзакцию, а не отделена от бизнес-логики, поэтому блокчейн считается более защищенным. В обычной системе можно взломать или административно обойти механизм аутентификации и провести манипуляции с бэкэндом, а в блокчейне сделать этого не получится по определению.
Хеширование биткоина: основа функционирования блокчейна
Если вы интересуетесь технической стороной криптовалют и тем, как работает блокчейн, то хеширование биткоина — это одна из основных тем, которая даст вам ключ к пониманию того, как устроены эти новые peer-to-peer технологии.
Что такое хеширование биткоина
Хеширование биткоина — это преобразование массива данных любого объема в исходную строку фиксированной длины. Для более легкого понимания назовем их Input (входящий массив данных) и Output (полученный хеш, т.е. уже упомянутая выше строка фиксированной длины). В отношении криптовалют, таких как, например, Bitcoin.
Транзакции биткоина, которые являются основным массивом данных, проходят через алгоритм криптовалют (в основу работы Bitcoin положен алгоритм хеширования SHA-256), который в результате дает исходную строку фиксированной длины. В этом и заключается принцип работы хеширования биткоина.
Давайте на небольшом примере посмотрим, как устроен процесс хеширования биткоина. Для преобразования массива информации в хеш мы применим уже упомянутый выше алгоритм хеширования SHA-256 (Secure Hashing Algorithm):
Как видите, вне зависимости от длины и объема Input на выходе всегда получается одинаковый Output, который имеет фиксированную длину в 256 бит. Это имеет решающее значение, особенно когда нужно преобразовать в хеш большие и очень большие массивы информации, как например, множество транзакций в сети Bitcoin или Ethereum.
Успешное применение хеширования в блокчейне и криптовалютах объясняется уникальными свойствами криптографической хеш-функции, о которой мы и поговорим в следующем разделе.
Значение криптографической хеш-функции в хешировании и ее свойства
Криптографические хеш-функции — это особый вид хеш-функций, которые обладают свойствами, позволяющими сделать использование хеш-функций в криптовалютах безопасным и надежным. Ниже мы подробно рассмотрим все эти свойства.
Свойство 1: Детерминированность
Это означает, что независимо от того, сколько раз вы будете преобразовывать Input в Output, на выходе всегда получится один и тот же хеш. Данное свойство хеш-функции играет очень важную роль, поскольку в противном случае было бы невозможно отслеживать исходные данные.
Свойство 2: Быстрое вычисление
Хеш-функция должна быстро возвращать исходные данные. В противном случае система просто не будет эффективной. Особенно это актуально для популярных криптовалют, в блок которых входит большое количество транзакций.
Свойство 3: Стойкость к атаке поиска прообраза
Суть свойства стойкости к атаке поиска прообраза состоит в следующем: если мы знаем значение H (A), в котором A — Input, а H (A) — Output, т.е. хеш, то нахождение значения A является практически неосуществимой задачей. Здесь стоит сделать акцент именно на слове «неосуществимо», а не на «невозможно». Ведь работа майнеров доказывает, что при определенных обстоятельствах эта задача становится выполнимой. Давайте рассмотрим небольшой пример.
Вы используете телефон, который отображает не номера, а их хеши, созданные в системе алгоритма хеширования SHA-256. Вы знаете, что ваш номер известен только 7 людям, номера которых вы также знаете. Чтобы узнать, от какого абонента вы пропустили звонок, вам нужно просто узнать хеши этих семи номеров, а потом каждый из них сравнить с хешем номера, который отобразился в списке пропущенных звонков.
Однако такой метод поиска Input актуален лишь при работе с небольшими массивами данных, но когда у нас просто огромный объем информации, получить Input путем применения данного метода (он называется «brute force» — метод «грубой силы») становится очень сложной задачей. Данный математический метод заключается в переборе всех допустимых вариантов Input, их преобразование в Output и сравнение с имеющимся хешем. Сложность нахождения правильного решения напрямую зависит от объема исходной информации.
В случае применения метода brute force есть три варианта развития событий:
Однако в случае с криптовалютами даже реализация самого реалистичного варианта очень маловероятна, поскольку здесь речь идет об очень большом количестве возможных вариантов Input.
Свойство 4: Стойкость к коллизии
Вероятность нахождения двух Input, которые бы имели один и тот же Output после прохождения процесса хеширования биткоина, должна быть максимально приближенной к нулю. Теоретически это может быть возможным, однако время, которое было бы затрачено на поиск двух одинаковых прообразов должно измеряться десятками лет. Данное свойство имеет очень важное значение, когда мы говорим о вопросе цифровой безопасности в криптовалютах. В криптографии способность противостоять возможности поиска второго прообраза называется стойкостью к коллизии.
В этом контексте, чтобы понять как работает хеширование биткоина, стоит упомянуть такое явление как «парадокс дня рождения». В чем его суть?
Прежде всего, нужно сказать, что шанс встретить двух незнакомых людей, которые бы родились в один и тот же день, равен 0,27%. Однако если в одном помещении одновременно находятся 366 людей, то шанс, что как минимум двое из них родились в один и тот же день, возрастают до 100%. Очевидно, что чем большее количество людей находится в одной группе, тем более высока вероятность того, что два человека будут иметь день рождения в один день.
«Парадокс дня рождения» используется в криптографической атаке, которая называется атакой «дней рождения» и в которой метод brute force применяется для поиска двух Input с одинаковым Output. «Парадокс дня рождения» помогает создать коллизию, потому что метод «грубой силы» при применении «парадокса дня рождения» становится более эффективным, чем без него. Однако несмотря на это в системе хеширования Bitcoin данный вид атаки малоприменим, поскольку шанс создать коллизию — примерно один к триллиону.
Свойство 5: Лавинный эффект
Данное свойство в процессе хеширования биткоина означает, что внесение даже незначительных изменений в Input приводит кардинальному изменению Output, т.е. хеша. Посмотрим на простой пример:
Как видите, хеши одной и той же фразы кардинально отличаются. И при этом все, что мы сделали — просто изменили регистр двух символов.
Данное свойство криптографических хеш-функций играет одну из самых главных (если не самую главную) ролей в обеспечении безопасности и надежности блокчейна. Каждый блок содержит в себе хеш предыдущего, и чтобы изменить данные одного блока, придется изменить данные предыдущего — и так по цепочке вплоть до самого первого. Как можно догадаться, это практически нереализуемо.
Свойство 6: Высокий показатель энтропии
Данное свойство означает, что хеши массивов данных должны быть максимально распределены в системе в процессе хеширования, т.е. обладать высоким показателем энтропии (энтропия — в информатике это мера неопределенности ситуации).
Рассмотрим небольшой пример. Так, у нас есть уравнение Y = H (k | x). Так, если Y является Output, а значение k обладает высоким показателем энтропии, то найти такое значение x (Input), которое бы удовлетворяло уравнению, будет практически невозможно.
«Высокая энтропия» означает состояние, при котором значение выбрано из такого широкого круга всевозможных вариантов, что попытки угадывания методом рандомного подбора не имеет никаких шансов на успех. Например, число, которое находится в рамках от 1 до 10, обладает низким показателем энтропии, в то время как число, которое находится между 1 и 2^256 имеет высокий показатель энтропии.
Если принять во внимание описанное выше, то можно сказать, что криптографическая хеш-функция превращает процесс подбора исходных данных для злоумышленников в игру в рулетку, т.е. шанс найти правильный Input должен быть очень низким, однако при этом каждый Input должен всегда иметь неизменный Output.
Хеширование биткоина: структура данных
Структура данных — это способ хранения данных. В блокчейне структура данных, задействованных в процессе хеширования, представлена двумя видами элементов: указателями и связанными списками.
Указатели
Указатели в программировании — это переменные, которые ссылаются на другие переменные, вне зависимости от вида языка программирования. Вместо того чтобы хранить числовые значения переменных, указатели содержать лишь своего рода «ссылку» на них. Как можно понять из названия, указатели «показывают путь» к расположению других переменных.
Например, выражение int b = 100 означает, что есть некая переменная b, которая содержит в себе целое числовое значение 100.
Связанные списки
Связанные списки имеют общие черты со структурой блокчейна, в которой каждый блок включает в себя данные предыдущего. В хешировании биткоина связанные списки функционируют по такой схеме:
Указатели — это часть структуры данных, они знают адрес следующего блока, входящего в общую цепочку. Стоит сказать, что последний блок имеет нулевой указатель, которому не присваивается никакой значение до того момента, пока не будет создан следующий блок в цепочке.
Блокчейн состоит из связанных между собой блоков, каждый из которых имеет хеш-указатель — это особый вид указателей, которые содержат ссылку на предыдущий блок. Хеш-указатели добавляют адрес предыдущего блока только после прохождения исходного массива данных через алгоритм хеширования биткоина — это позволяет сделать связь надежной и защищенной.
Однако генезис-блок не содержит этот указатель. В его состав входит только указатель, который связывает его со вторым блоком цепи. Этот особый хеш-указатель содержит хеш-данные genesis-блока.
Такая система неуязвима перед атаками злоумышленников, которые могут попытаться изменить данные в блокчейне, потому что любое изменение в Input неизбежно приводит к изменениям в Output. Если была совершена попытка атаки на конкретный блок, участники сети (ноды) сразу же получают оповещение об этом и отклоняют запрос на внесение изменений. Это гарантирует неизменность блокчейна и безопасность системы. Однако если бы каждый блок не имел свой уникальный хеш, его отслеживание было бы невозможным.
Информация, которая содержится в заголовке каждого блока, отвечает за его идентификацию. Каждый заголовок включает в себя следующие элементы:
Каждый из этих элементов играет очень важную роль в создании блока. Например, nonce очень важен, потому что майнеры перебирают множество вариантов, прежде чем один из участников сети найдет правильное значение и создаст правильную строку блока. В частности, факт нахождения nonce раньше других гарантирует майнеру получение вознаграждения в виде криптовалюты.
Дерево Меркла отвечает за упорядочивание и хранение транзакций внутри блока. Дерево Меркла выглядит так:
В самом низу древовидной структуры дерева Меркла находятся листовые узла (на приведенной выше картинке это L1, L2, L3 и L4). Выше них расположены несколько уровней дочерних узлов — это все узлы, которые находятся ниже корневого узла. На картинке это узлы Hash 0-0, Hash 0-1, Hash 1-0, Hash 1-1 и Hash 0, Hash 1. В самом верху находится корневой хеш дерева Меркла (в нашем случае он называется Top Hash).
Древовидная структура корня Меркла помогает отследить расположение определенной транзакции и получить доступ к ее данным, как, например, время создания, объём, адрес отправителя и получателя и т.д.
Хеширование в сети биткоин
Майнеры используют вычислительные ресурсы для решения загадки, зашифрованной в строке, которая представляет собой набор цифр, который всегда начинается с множества нулей (чем больше нулей, тем выше сложность сети). Они должны найти правильное число nonce, добавление которого сформирует правильную строку блока. Процесс подстановки nonce в строку длится до тех пор, пока не будет найдено верное решение. Иногда количество попыток может доходить до миллионов раз. Тот майнер, который первым найдет верное решение, добавляет блок в блокчейн и получает за это вознаграждение.
С математической точки зрения данный процесс описывается следующей формулой: H (k | x) = Y, в которой K — это nonce, x — хеш блока, а Y — текущая сложность сети. Процесс подбора nonce рандомный и основан на применении метода brute force. Поэтому майнинговое оборудование непрерывно генерирует рандомные сроки до тех пор, пока не будет найдено верное значение nonce. На данный момент майнеры имеют 10 минут на добавление каждого нового блока, что обеспечивает низкую вероятность возникновения коллизий и создания блоков-орфанов (потерянных блоков, которые не были добавлены в блокчейн, например, в том случае, когда nonce был найден почти одновременно несколькими майнерами или при попытке хакеров внести изменения в транзакции).
Хеширование биткоина играет решающую роль в майнинге, поскольку оно лежит в основе работы алгоритма Proof-of-Work, который используется в сети Bitcoin, Ethereum и многих других криптовалют. Хеширование биткоина обеспечивает безопасность и надежность системы, предохраняет ее от создания коллизий и возможного взлома. Без хеширования не существовало бы блокчейна, по крайней мере, в том виде, в котором мы его имеем сегодня.



























