Доказательство резервов и обязательств: демонстрационная проверка BitMEX

Обзор

На днях мы предложили новую систему  на базе доказательства резервов (Proof-of-Reserves), которая позволяет сохранить конфиденциальность пользователей. В этой статье мы рассмотрим рабочий вариант такой системы на примере платформы BitMEX. В демонстрационных целях мы будем использовать однократное доказательство на уровне блока биткоина 693 062, созданное 28 июля 2021 года. Эта статья содержит пошаговое руководство, с помощью которого любой желающий может проверить резервы BitMEX в этот момент времени, а также проверить, включен ли баланс счета в список обязательств, используя указанные в примере данные счета.

Загрузка файлов данных подтверждения резервов и обязательств

В качестве однократной демонстрации BitMEX опубликовала подробные данные о своих резервах и обязательствах в биткоине по состоянию на 29 июля 2021 года. Файл резервов представляет собой полный список всех биткоинов, находящихся под контролем компании.  Готовность опубликовать этот список показывает высокую степень открытости и прозрачности нашей биржи. В дальнейшем мы планируем публиковать эти данные ежемесячно.

Полные файлы резервов и обязательств можно загрузить здесь: https://public.bitmex.com/?prefix=data/porl/

Доказательство резервов

Ниже показан скриншот файла резервов BitMEX. В верхней части текстового файла видим уровень фиксации данных (блок 693 062). Также указана общая сумма резервов в биткоине — 11 009 053 026 106 сатоши или 110 090 биткоинов (BitMEX всегда рассчитывает все суммы в сатоши, так как это гарантирует высокую точность, необходимую на торговой платформе). Учитывая то, что BitMEX использует персонализированные открытые адреса, аналитики всегда имели представление о резервах биткоина в BitMEX, но еще никогда эти данные не публиковались с такой степенью детализации.

Компания BitMEX всегда отличалась чрезвычайной прозрачностью деятельности. Мы используем для хранения всех биткоинов единую схему с несколькими подписями и тремя статическими открытыми ключами. Эти три ключа также указаны в верхней части файла. Файл размером 200 МБ содержит длинный список адресов и скриптов выполнения для каждого остатка UTXO, который у нас хранится; эти скрипты выполнения включают три открытых ключа BitMEX. Это доказывает, что компания имеет доступ ко всем средствам, при условии доступа к трем приватным ключам, связанным с тремя открытыми ключами (но это подтверждается каждый день, когда компания осуществляет вывод средств). Поэтому данный файл можно рассматривать как доказательство резервов компании и возможности их потратить.

Скриншот файла резервов BitMEX

Источник: BitMEX

База данных содержит около 300 000 UTXO. Используя эти данные, можно также отследить прогресс BitMEX с точки зрения перехода на адреса в формате SegWit: последние адреса используют новый формат bech32. Кроме того, BitMEX также предоставила инструмент для проверки этого списка резервов по копии блокчейна биткоина, полученной при запуске Bitcoin Core. Более подробная информация о том, как это сделать, представлена далее в этой статье.

Доказательство обязательств

Ниже приведено пошаговое руководство, которое объясняет, как проверить, включен ли ваш баланс в опубликованное дерево обязательств Меркла. BitMEX пока не предоставила своим клиентам данные счетов, необходимые для выполнения этого процесса, но данные счета страхового фонда BitMEX указаны. При выполнении этого процесса можно посмотреть, на каких листах указан баланс вашего счета, и проверить, включен ли он в общую сумму обязательств.

Доказательство обязательств: пошаговое руководство для проверки с использованием примерного счета

Шаг

Название

Описание

1

Загрузите файл обязательств

Полная ссылка на файл обязательств размером 142 МБ: https://s3-eu-west-1.amazonaws.com/public.bitmex.com/data/porl/liabilities-693062-20210728D100000.011463000-proof.dat

В будущем BitMEX планирует ежемесячно публиковать обновленную версию этого файла.

 

2

Загрузите код проекта

Для проверки резервов и обязательств используются инструменты с открытым исходным кодом, которые можно загрузить здесь: https://github.com/BitMEX/proof-of-reserves-liabilities

3

Откройте терминал

Если вы используете Mac или Linux, откройте приложение терминала и выполните необходимые команды.

4

Перейдите в нужную папку

Вам нужно перейти в папку, в которую вы загрузили пакет ПО с GitHub. Мы ввели следующую команду:

CD ~/Downloads/proof-of-reserves-liabilities

 

5

Проверьте системные требования

Чтобы убедиться в том, что в системе установлены нужные приложения, выполните следующую команду:


pip3 install -r requirements.txt

6

Выполните проверку обязательств 

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

python3 validate_liabilities.py --proof ~/Downloads/liabilities-693187-20210729D070000.019585000-proof.dat --account 18446744073709551615 --nonce b1ce17e68502491e5cb611fb4a133efb6aa1f27aa7dd3b9930e53bb8b0c16980

В примере выше номер счета 18446744073709551615 принадлежит страховому фонду BitMEX. Если эта система заработает, то каждый клиент получит собственный идентификатор счета. Как показано в таблице ниже, в этом экземпляре доказательства баланс страхового фонда разбит на четыре листа. Общий баланс на всех четырех листах составляет 37 275 биткоинов. Именно такой результат вы должны увидеть, если выполните описанный выше процесс. 

Доказательство включения баланса страхового счета в обязательства

Сатоши

Биткоин

Лист 374,374

3,453,878,064

35

Лист 439,612

2,646,057,535,441

26,461

Лист 806,191

1,052,573,964,591

10,526

Лист 1,037,052

25,426,278,001

254

Итого

3,727,511,656,097

37,275

Источник: BitMEX

На видео ниже показана рабочая демонстрация процесса проверки обязательств. Вы можете наблюдать, как компьютер выполняет поиск баланса в дереве обязательств Меркла и находит четыре совпадающих с заданными параметрами листа. Это доказывает, что баланс страхового счета включен в общую сумму обязательств.

Рабочая демонстрация процесса проверки обязательств: видео

Сверка доказательства резервов с блокчейном

Как упоминалось выше, в некотором смысле доказать наличие резервов легко, ведь пользователю нужно только загрузить файл резервов и просмотреть его. Но BitMEX также предоставляет инструмент для сверки всех нерастраченных остатков (UTXO) с блокчейном, работающий с Bitcoin Core. Ниже приводится пошаговое руководство, объясняющее, как это сделать.

Сверка доказательства резервов с основным блокчейном: пошаговое руководство

Шаг Название Описание 
1

Загрузите файл резервов

Полная ссылка на файл резервов размером 200 МБ: https://s3-eu-west-1.amazonaws.com/public.bitmex.com/data/porl/reserves-693062-20210728D113027681725000.yaml

В будущем BitMEX планирует ежемесячно публиковать обновленную версию этого файла.

2

Загрузите и установите Bitcoin Core

Программное обеспечение можно скачать здесь:
 https://bitcoincore.org/en/download/

Используйте версию 0.21 или более позднюю.

3

Создайте аккаунт RPC 

Для получения доступа к RPC необходимо отредактировать файл конфигурации Bitcoin Core. Мы изменили наш файл bitcoin.conf следующим образом:
server=1
rpcuser=BitMEX
rpcpassword=BitMEXResearch

4

Синхронизируйте Bitcoin Core с концом цепочки

Далее вам нужно синхронизировать Bitcoin Core с текущим концом цепочки. Это может занять около 10 часов (но многие из тех, кто пытается выполнить это руководство, скорее всего, хорошо знакомы с этим процессом). 

5

Перейдите в нужную папку

Вам нужно перейти в папку, в которую вы загрузили пакет ПО с GitHub. Мы ввели следующую команду:


CD ~/Downloads/proof-of-reserves-liabilities

6

Выполните проверку резервов

Заключительный шаг — выполнение команды, которая подключается к Bitcoin Core и выполняет проверку. Для правильного выполнения этой команды необходимо указать, откуда вы загрузили файл резервов, а также данные вашего аккаунта RPC. Мы использовали следующую команду:
python3 validate_reserves.py --proof ~/Downloads/reserves-693062-20210728D113027681725000.yaml --rpcauth BitMEX:BitMEXResearch --rpcport 8332
Обратите внимание: загрузка файла резервов может занять некоторое время, предположительно около 10 минут.

7

Повторно синхронизируйте Bitcoin Core с концом цепочки

После завершения проверки нам нужно выполнить следующую команду, чтобы Bitcoin Core снова подключился к концу цепочки:
python3 validate_reserves.py --reconsider --rpcauth BitMEX:BitMEXResearch --rpcport 8332<

Скриншот процесса проверки резервов

Весь процесс занял около 20 минут. Самая сложная часть процесса — откат Bitcoin Core до уровня блока, на котором были зафиксированы резервы, для выполнения проверки. Именно поэтому на снимке выше показано, что Bitcoin Core находится в состоянии отката на два дня назад. Используя снимок выше, мы убедились, что на уровне блока 693 062 под контролем BitMEX находились 110 090 биткоинов.

Рабочая демонстрация проверки резервов: видео

Итак, BitMEX заявляет, что контролирует более 100 000 биткоинов, и теперь вы можете убедиться в этом сами, сверив баланс с блокчейном с помощью программного обеспечения с открытым исходным кодом.