<?xml version='1.0'?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:atom="http://www.w3.org/2005/Atom"  xmlns:media="http://search.yahoo.com/mrss/">
<channel>
	<title><![CDATA[0xbt: Что такое дерево Меркла?]]></title>
	<link>https://0xbt.net/news/view/5575797/%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE-%D0%BC%D0%B5%D1%80%D0%BA%D0%BB%D0%B0</link>
	<atom:link href="https://0xbt.net/news/view/5575797/%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE-%D0%BC%D0%B5%D1%80%D0%BA%D0%BB%D0%B0" rel="self" type="application/rss+xml" />
	<description><![CDATA[]]></description>
	
	<item>
	<guid isPermaLink="true">https://0xbt.net/news/view/5575797/%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE-%D0%BC%D0%B5%D1%80%D0%BA%D0%BB%D0%B0</guid>
	<pubDate>Thu, 14 Jul 2022 14:19:00 +0000</pubDate>
	<link>https://0xbt.net/news/view/5575797/%D1%87%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5-%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%BE-%D0%BC%D0%B5%D1%80%D0%BA%D0%BB%D0%B0</link>
	<title><![CDATA[Что такое дерево Меркла?]]></title>
	<description><![CDATA[<p><img src="https://forklog.com/wp-content/uploads/merkle_expl-min.png" alt="image" width="100%" height="auto"></p><div><h2>Главное</h2><ul>
<li>Дерево Меркла (хеш-дерево) &mdash; это алгоритм, позволяющий получить один хеш для множества фрагментов данных. Метод используют для определения целостности файлов и верификации информации.</li>
</ul><ul>
<li>Хеш-дерево можно представить в виде структуры, от основания которой до промежуточных узлов расходятся ветви. На концах разветвлений размещены листья, представляющие фрагменты данных. В основании дерева находится корневой хеш (корень Меркла). Последний является обязательным элементом заголовка блока биткоина.</li>
</ul><ul>
<li>Корневой хеш позволяет верифицировать каждую транзакцию. Для проверки требуется скачать только заголовок блока и аутентификационный путь операции. Благодаря дереву Меркла снижается объем необходимых вычислений, что дает возможность реализовать упрощенную проверку платежей (SPV).</li>
</ul></div><p>&nbsp;</p><div><h2>Кто и когда изобрел концепцию дерева Меркла?</h2><p>Создателем концепции хеш-дерева является профессор Ральф Меркл. Он изобрел способ представления цифровых подписей в 1979 году. <a href="https://worldwide.espacenet.com/patent/search?q=pn%3DUS4309569A">Патентом на технологию</a> владеет Стэнфордский университет.</p><p>Ученый предложил использовать бинарное хеш-дерево.&nbsp;Меркл также внес значительный вклад в развитие криптографии. Он известен благодаря публикации 1987 года &laquo;<a href="https://link.springer.com/chapter/10.1007/3-540-48184-2_32">Цифровая подпись, основанная на обычной функции шифрования</a>&raquo;.</p></div><p>&nbsp;</p><div><h2>Для чего нужно дерево Меркла?</h2><p>Централизованная система предоставляет данные из одного источника, на который полагаются все пользователи. Последний гарантирует корректность полученной информации.</p><p><a href="https://forklog.com/cryptorium/chto-takoe-blokchejn/">Блокчейн</a> является распределенной базой данных. Информация в ней хранится на множестве независимых узлов (нод). Нода не может принять сообщения от других участников без их проверки. Узлу необходимо определить, содержит ли блок корректные транзакции.</p><p>Для снижения вычислительных затрат можно использовать деревья Меркла. Они позволяют уменьшить объем загружаемых данных и оптимизировать их проверку благодаря хешированию.</p><p>Метод используется в сетях биткоина, Ethereum и других криптовалютах. С его помощью получают строку данных, которая верифицирует группу транзакций. Алгоритм также применяется в файловых системах и базах данных. С помощью деревьев Меркла информацию проверяют на наличие ошибок и проводят синхронизацию.</p></div><p>&nbsp;</p><div><h2>Как работает дерево Меркла?</h2><p>Построение дерева Меркла выполняется снизу вверх. Значения в листовых вершинах получают хешированием фрагментов данных. Узлы следующего уровня содержат хеш от суммы двух дочерних. Для объединения данных применяется <a href="https://en.wikipedia.org/wiki/Concatenation">конкатенация</a>. Операция повторяется для узлов следующих уровней до получения одного хеша. Если число элементов нечетное, один из них дублируется или переносится на следующий уровень в неизменном виде.</p><p>При построении дерева получают единый хеш, который называется корнем Меркла. Последний представляет все фрагменты данных. Таким образом, дерево Меркла является однонаправленной хеш-функцией.</p><p>Алгоритм позволяет построить бинарную структуру, в которой узловые значения формируются из двух строк. Последнее свойство предоставляет возможность верифицировать большой объем данных без пересчета хешей для всех фрагментов. Вычислительные затраты при определении подлинности одного элемента в этом случае намного ниже.</p><p>Для проверки корректности массива и его целостности корневой хеш необходимо сравнить с эталонным значением. Фрагментами могут являться данные о транзакциях или части файлов.</p></div><p>&nbsp;</p><div><h2>Как дерево Меркла используется в биткоине?</h2><p>Блокчейн биткоина формируется из фрагментов, которые записываются в конец цепочки. Последние содержат данные о переводах между пользователями. Количество транзакций, а также объем информации изменчив, поэтому блок не обладает фиксированным размером.</p><p>Для оптимизации вычислений узлы биткоина формируют заголовки. Они включают следующие элементы:</p><ul>
<li><a href="https://developer.bitcoin.org/reference/block_chain.html">номер версии блока</a>;</li>
<li>хеш предыдущего блока;</li>
<li>корень дерева Меркла;</li>
<li>временную метку;</li>
<li>цель сложности майнинга;</li>
<li>одноразовый код (nonce), использованный при генерации блока.</li>
</ul>
<p><img src="https://forklog.com/wp-content/uploads/image1-522.png" alt=""> Данные: <a href="https://bitcoin.org/bitcoin.pdf">Bitcoin.org</a>.</p>
<p>Заголовок не включает транзакции и занимает 80 байт. Поскольку он формируется каждые десять минут, объем данных увеличивается на 4,2 мегабайта за год.</p><p>Информация о транзакциях хешируется, что позволяет получить их <a href="https://forklog.com/cryptorium/kak-otslezhivayutsya-tranzaktsii-v-seti-bitkoina/">идентификаторы</a>. Данные о переводах хранятся в шестнадцатеричном формате. Корневой хеш представляет все транзакции блока. Для нахождения последнего строится дерево Меркла. Данные обрабатываются согласно алгоритму:</p><ol>
<li>Находятся хеши (идентификаторы) транзакций, включенных в блок: hash(L1), hash(L2), hash(L3) и так далее. Они формируют листья дерева.</li>
<li>На следующий уровень помещаются хеши от суммы двух соседних идентификаторов: hash(hash(L1) + hash(L2)). В бинарном дереве число узлов на каждом уровне должно быть четным. В ином случае хеш из последней ячейки дублируется и помещается в дополнительный элемент.</li>
<li>Процесс хеширования суммы данных повторяется до получения корня Меркла.</li>
</ol>
<p><img src="https://forklog.com/wp-content/uploads/image3-180.png" alt=""> Данные: <a href="https://commons.wikimedia.org/wiki/File:Hash_Tree.svg?uselang=ru">Wikipedia</a>.</p>
<p>Результирующий хеш подтверждает валидность каждой транзакции. При формировании блокчейна ноды используют только заголовки предыдущих блоков.</p><p>В августе 2017 года реализовано обновление протокола <a href="https://forklog.com/tag/segwit/">Segregated Witness</a>. Последнее использует другое структурирование транзакционных данных, что позволяет уменьшить размер блока. Принятие обновления <a href="https://forklog.com/kak-segwit-lightning-i-batching-snizhayut-tranzaktsionnye-komissii-v-seti-bitkoina/">снизило нагрузку на блокчейн биткоина</a>.</p></div><p>&nbsp;</p><div><h2>Какие преимущества дает дерево Меркла?</h2><p>Хеш-деревья позволяют упростить проверку принадлежности транзакции определенному блоку и обеспечить целостность информации при ее передаче. Метод необходим для упрощенной верификации платежей. <a href="https://forklog.com/cryptorium/kto-takoj-satoshi-nakamoto/">Сатоши Накамото</a> предложил использовать SPV в <a href="https://bitcoin.org/files/bitcoin-paper/bitcoin_ru.pdf">white paper биткоина</a>.</p><p>Если нода обладает значительными вычислительными ресурсами, она может загрузить все блоки и найти хеш каждой транзакции. После чего формируются деревья Меркла. Последние позволяют проверить целостность данных и валидность каждой операции. Если ресурсы узла ограничены, он может запросить только заголовок блока и идентификаторы транзакций.</p><p><a href="https://www.coinbase.com/ru/cloud/discover/dev-foundations/blockchain-client-types#Light-clients">Легкие клиенты</a> загружают заголовок и аутентификационный путь (доказательство Меркла) для проверяемой транзакции. Они запрашивают информацию у полной ноды. Аутентификационный путь включает хеши из каждой пары узлов дерева, находящиеся на пути от вершины до транзакции.</p><p>Для верификации операции необходимо найти корень Меркла. Транзакция подтверждается, если полученный хеш соответствует строке, которая содержится в заголовке блока. Подобрать необходимый корень Меркла по другому набору данных практически невозможно, что гарантирует валидность операции.</p><p>Метод SPV позволяет легкому клиенту эффективно взаимодействовать с блокчейном и снижает объем загружаемой информации. Например, размер блока с пятью транзакциями может составлять 500 килобайт, а доказательство Меркла занимает всего 140 байт.</p></div><p>&nbsp;</p><div><h2>Какое дерево хешей используется в Ethereum?</h2><p>Бинарное дерево Меркла хорошо подходит для массива, представленного в виде списка. Его структура остается неизменной, что удобно для хеширования транзакций. В Ethereum применяется другой способ представления данных &mdash; префиксное дерево.</p><p>Последнее позволяет хранить информацию в ассоциативном массиве. Строки являются ключами, которые определяют положения его элементов. Для формирования структуры ветви дерева обозначаются различными символами так, чтобы ключ элемента однозначно его идентифицировал.</p>
<p><img src="https://forklog.com/wp-content/uploads/image2-336.png" alt=""> Данные: <a href="https://commons.wikimedia.org/wiki/File:Trie_example.svg?uselang=ru">Wikipedia</a>.</p>
<p>В отличие от биткоина, блокчейн Ethereum использует три хеш-дерева:</p><ul>
<li>транзакций;</li>
<li>состояний;</li>
<li>дерево, содержащее данные о результатах выполнения транзакций.</li>
</ul><p>В заголовок блока входят три корневых хеша. Ethereum позволяет создавать легкие клиенты, способные выполнять базовый набор операций:</p><ul>
<li>проверить наличие транзакции в блоке;</li>
<li>подтвердить существование определенного адреса;</li>
<li>определить баланс пользователя;</li>
<li>узнать результат выполнения операции или смарт-контракта.</li>
</ul>
<p><img src="https://forklog.com/wp-content/uploads/image4-116.png" alt=""> Данные: <a href="https://ethereum.stackexchange.com/questions/15288/ethereum-merkle-tree-explanation">Ethereum Stack Exchange</a>.</p>
<p>Указанные действия осуществляются без полной загрузки блоков. Хеш-деревья упрощают вычисления, что позволяет запускать легкие клиенты на персональных компьютерах, ноутбуках и смартфонах.</p><p>Алгоритм обработки транзакционных данных для Ethereum подобен таковому для биткоина. Взаимодействие с деревом состояний является более сложным. Ключ элемента массива определят адрес пользователя, а его значение представляет баланс счета.</p><p>Особенностью хеш-дерева является необходимость в частом обновлении данных и потребность в добавлении и удалении адресов. Для реализации алгоритма требуется изменяемая структура. Ее параметры ограничивают с целью предупреждения DDoS-атаки, позволяющей злоумышленнику создать слишком глубокое дерево. В ином случае обновление структуры и проведение операций будет занимать значительное время.</p><p>Корень дерева должен определяться исключительно данными и не зависеть от его параметров. Соответственно необходима возможность внесения обновлений в любом порядке.</p><p>Префиксное дерево позволяет решить указанные трудности. В Ethereum каждый элемент структуры имеет 16 дочерних. Этот подход оптимален для кодирования узлов в шестнадцатеричном формате.</p><p>В префиксном дереве для получения ключа необходимо указать подряд символы, соответствующие ветвям. Они определяют путь от корня до выбранного элемента. Значение ключа является динамическим, что позволяет добавлять или удалять новые узлы.</p></div><p>&nbsp;</p><div><h2>Что еще почитать?</h2><p><a href="https://forklog.com/cryptorium/chto-takoe-obernutyj-token/">Что такое обернутый токен?</a></p><p><a href="https://forklog.com/cryptorium/chto-takoe-blockchain-oracle/" target="_blank" rel="noreferrer noopener">Что такое блокчейн-оракул?</a></p><p><a href="https://forklog.com/cryptorium/chto-takoe-token-upravleniya/">Что такое токен управления?</a></p><p><a href="https://forklog.com/cryptorium/chto-takoe-fork/">Что такое хардфорк?</a></p></div><p><br /><br /></p><hr><p><br />Original: <a href="https://forklog.com/cryptorium/chto-takoe-derevo-merkla/">https://forklog.com/cryptorium/chto-takoe-derevo-merkla/</a> <br />By: ForkLog<br />Posted: July 14, 2022, 2:19 pm</p>]]></description>
	<dc:creator>0x</dc:creator>
</item>

</channel>
</rss>