left-back

Что такое дерево Меркла?

Уважаемые пользователи,

Дерево Меркла — это структура данных, также известная как хеш-дерево. Дерево Меркла хранит данные в листовых узлах древовидной структуры, и путем пошагового хэширования данных до верхнего корневого узла любые изменения в данных конечных узлов будут переданы узлам более высокого уровня и в конечном итоге отображены как изменения. в корне дерева.

1. Роли дерева Меркла

  • Доказательство с нулевым разглашением
  • Обеспечить неизменность данных
  • Обеспечивает конфиденциальность данных

2. Bitget Limited Определение дерева Меркла

2.1 Информация об узле

Информация, хранящаяся в каждом узле дерева, включает:
1. хеш-значение
2. количество монет, содержащихся в моментальном снимке актива пользователя (например, BTC, ETH, USDT)

hash value,{"BTC":"BTC amount","ETH":"ETH amount","USDT":"USDT amount"}
2070b6a5b12f4ea7,{"BTC":1.763,"ETH":362,"USDT":1077200.2274}


2.2 Правила хеширования

Узлы-листья (кроме узлов заполнения)

hash=sha256Function(encryptUid,nonce,balances).substring(0,16)
  • encryptUid: зашифрованный UID пользователя
  • nonce: уникальное значение, присвоенное каждому пользователю
  • balances: строка json, состоящая из количества монет в моментальном снимке актива пользователя (примечание: удалите недопустимый 0 в конце и сохраните точность 8 бит)
    • Например: {"BTC":1,763,"ETH":362,"USDT":1077200,2274}

Родительский узел

Parent node's hash = sha256Function(hash1+hash2,{"BTC":(hash1(BTC amount)+hash2(BTC amount)),"ETH":(hash1(ETH amount)+hash2(ETH amount)),"USDT":(hash1(USDT amount)+hash2(USDT amount))},parent node level).substring(0,16)
  • h1: хеш левого дочернего узла текущего узла,
  • h2: хеш правого дочернего узла текущего узла,
  • level: где находится родительский узел

Определение уровня узла дерева: полное дерево Меркла (полное двоичное дерево) требует 2 ^ n данных листового узла, уровень листового узла = n + 1, уровень родительского узла = уровень дочернего узла - 1, уровень корневого узла = 1, уровень конечного узла это максимум.

Правила узла заполнения
Полное дерево Меркла (полное двоичное дерево) требует 2 ^ n данных листового узла, но фактическое количество данных может не удовлетворять требованиям и может быть нечетным. В таком случае, если узел k не имеет родственного узла, то автоматическое заполнение генерирует родственный узел k', и хэш (k') = хеш (k), а количество монет узла k' устанавливается равным нулю.
Например:

Hash
балансы
hash1
{"BTC":1,"ETH": 6,"USDT":10}
hash2
{"BTC":2,"ETH":4,"USDT":8}
hash3
{"BTC":2,"ETH":1,"USDT":12}


Затем узел заполнения hash4 = hash3, сохраненные балансы равны {"BTC": 0, "ETH": 0, "USDT": 0}, как показано в выделенном узле на рисунке 1.
Рисунок 1

Parent node's hash = sha256Function(hash1+hash2,{"BTC":(hash1(BTC amount)+hash2(BTC amount)),"ETH":(hash1(ETH amount)+hash2(ETH amount)),"USDT":(hash1(USDT amount)+hash2(USDT amount))},parent node level).substring(0,16)


Следовательно, hash6 = SHA256 (hash3 + hash3, {BTC: (2+0), ETH:(1+0), USDT:(12+0)}, level)

Принцип проверки

1. Принцип проверки: в соответствии с определением дерева Меркла Bitget Limited значение хеш-функции родительского узла вычисляется от собственного листового узла пользователя до корневого узла, а хэш-значение корневого узла сравнивается со значением хеш-функции. дерева Меркла в «Шаг проверки - Шаг 1», если они равны, проверка проходит, если нет, проверка завершается неудачно.

2. Пример: Объединив рисунок один и следующий текст json и основываясь на собственном листовом узле h3 пользователя и информации, предоставленной соседним узлом h4, мы можем вычислить хэш родительского узла h6, а затем с предоставленной информацией по соседнему узлу h5 мы можем вычислить хэш родительского узла h7, а затем сравнить значение хеш-функции с корневым узлом h7, предоставленным в данных пути дерева Меркла, чтобы увидеть, равны ли значения хеш-функции для завершения проверки.
Текст json данных пути к дереву Меркла:

Этапы проверки

1. Войдите в свою учетную запись Bitget, нажмите «Обзор активов — Подтверждение активов» и перейдите к «Подтверждение активов», чтобы напрямую просмотреть последние аудиты. Данные во время вашего аудита будут расширены по умолчанию.

2. Если вы хотите дополнительно вручную проверить, включены ли ваши активы в дерево Merkle, вы можете сделать это, выполнив шаги проверки. Нажмите кнопку «Загрузить данные», чтобы получить данные, необходимые для ручной проверки, и будет загружен файл с именем по умолчанию: merkel_tree_bg.json.


3. Конкретные операции:
В нашем примере имя файла — merkel_tree_bg.json. Текст json данных пути дерева Меркеля показан ниже:


4. Загрузите инструмент проверки с открытым исходным кодом ProofOfReserves.zip, предоставленный Bitget Limited.
5. Разархивируйте файл ProofOfReserves.zip в текущий каталог и сохраните файл merkel_tree_bg.json, сохраненный на шаге 3, в ту же папку. В нашем случае файл хранится в Downloads, а имя папки — proof-of-reserves, а скриншот такой:

6. Откройте программу терминала (система Mac: приложение терминала. Система Windows: приложение cmd)
7. Введите команду cd ~/Downloads/proof-of-reserves в терминальной программе и введите каталог загруженного пакета.
8. Проверьте свои данные, введя следующую команду
Маc/Linux

sh start.sh

Windows
Нажмите start.bat

Примечание. Если вы используете систему Mac и на этом этапе у вас возникают проблемы с настройками безопасности, перейдите в «Системные настройки» -> «Безопасность и конфиденциальность» -> «Основные» -> «Нажмите кнопку блокировки, чтобы внести изменения» -> «Разрешить загрузку приложений из: App Store и утвержденные разработчики -> Дайте разрешение на инструменты.
Если возникает следующая проблема, zsh: разрешение отклонено: . /start.sh выполните следующую команду.

chmod a+x ./start.sh

9. Просмотр результатов

(1) Если ваши данные верны и проверка пройдена, то результатом будет «Консистентный хэш корня дерева Меркеля, проверка прошла успешно».

(2) Если ваши данные неверны и проверка не удалась, результатом будет «Несоответствие хэша корня дерева Меркла, проверка не удалась».


10. Вы также можете обратиться к коду инструмента проверки с открытым исходным кодом Bitget Limited и определению дерева Меркла (см. раздел «Что такое дерево Меркла») и написать свою собственную программу для проверки данных пути, полученных на шаге 2, или проверить убедитесь, что ваши активы включены в дерево Меркеля, созданное в результате этого аудита.

Команда Bitget