Ускорение валидации блоков в блокчейне с помощью аккумуляторов Utreexo

Достижения Utreexo: ускорение загрузки Bitcoin на 62% благодаря аккумуляторам.

Аннотация:В этой статье получатель гранта 100x Group Келвин Ким сообщает об успехах в повышении скорости начальной загрузки блоков биткоина (IBD) с помощью клиентского приложения Utreexo. Величина повышения скорости варьируется в зависимости от используемого оборудования и проблем конкретного пользователя, но в целом начальную загрузку и проверку блоков можно ускорить на 62% по сравнению с Bitcoin Core. Поскольку многие средства оптимизации еще не реализованы, ожидается, что в дальнейшем скорость загрузки еще вырастет. Келвин также рассказывает о том, как IBD можно разделить на несколько задач, которые могут выполняться несколькими компьютерами параллельно. В конечном итоге планируется реализовать Utreexo на C++ и включить его в Bitcoin Core. Хотя до этого еще далеко, реализация на C++ уже началась.

This image has an empty alt attribute; its file name is 1-1024x726.png

Я рад сообщить, что проект Utreexo готов поделиться своими успехами в повышении скорости полного процесса проверки блокчейна биткоина – начальной загрузки блоков (Initial Block Download, IBD). Мы завершили реализацию альфа-версии узла проверки блоков в произвольном порядке (Out of Order Block Validating Node) на базе utcd, нашего форка btcd (узла биткоина, написанного на Go), и провели сравнительное тестирование этого узла с BItcoin Core 21.0.0.

В процессе тестирования нам удалось ускорить IBD примерно на 62% по сравнению с Bitcoin Core 21.0.0 (в режиме по умолчанию) при условии отсутствия ограничений пропускной способности сети со стороны пользователя. Мы ожидаем, что по мере реализации новых средств оптимизации разница в скорости будет увеличиваться. Наш узел проверки блоков в произвольном порядке также позволяет выполнять IBD на нескольких компьютерах, что дает уникальное преимущество по сравнению с другими существующими сегодня реализациями узлов биткоина.

В ближайшее время мы опубликуем отдельный материал, в котором объясним, как выполняем проверку блоков в произвольном порядке с помощью аккумуляторов Utreexo.

Почему повышение скорости загрузки блоков важно?

Начальная загрузка блоков (IBD) — первый шаг, который должны выполнить каждый, кто хочет присоединиться к сети биткоина в роли контролера исполнения правил. Это процесс загрузки и проверки всех блоков, начиная с генезисного блока 2009 года и заканчивая сегодняшним блоком.  Проверка каждого блока чрезвычайно важна, так как не позволяет недобросовестным пользователям нарушать правила консенсуса в сети биткоина, а именно:

  1. Создавать биткоин из воздуха.

  2. Изменять максимальное предложение биткоина.

  3. Похищать чужие монеты.

В сети биткоина можно участвовать, используя доверенные сторонние узлы (например, узлы, работающие под управлением бирж, сторонних кошельков и т. д.). Но это опасно как для пользователей, так и для сети биткоина в целом. Пользователь может пострадать, так как доверенная третья сторона может обманом лишить его средств. Сеть биткоина в целом может пострадать, поскольку если в сети недостаточно пользователей, управляющих полноценными узлами, чтобы обеспечить соблюдение правил, недобросовестные игроки могут нарушить правила консенсуса, но об этом никто не узнает. Роль контролера исполнения правил в сети биткоина невозможно переоценить как для собственной безопасности пользователя, так и для безопасности сети в целом. Но для того чтобы присоединиться к сети биткоина в качестве контролера исполнения правил, необходимо выполнить начальную загрузку блоков (IBD).

Поэтому предельное снижение времени IBD как входного барьера для участия в сети в качестве контролера исполнения правил будет очень полезно как для сети, так и для пользователей. Речь идет о том, чтобы все желающие могли выполнить IBD и стать контролером исполнения правил как можно быстрее и проще. Последние результаты тестирования и успехи с аккумулятором Utreexo показывают, что входной барьер для участия в сети в качестве контролера исполнения правил будет значительно снижен.

Сравнительный анализ

Сравнительный анализ выполнялся на основе данных, полученных с локального узла с использованием гигабитного соединения.

Процессор

Ryzen 3600

Память

Samsung 32GB DDR4 2666MHz

Накопитель

1TB HP SSD EX950 M.2 NVMe

Версия Bitcoin Core

v21.0.0

Версия ядра Linux

5.7.19

Настройки bitcoin.conf

-dbcache=24000-maxmempool=1000

2-1024x386.png

При гигабитном соединении utcd смог выполнить IBD примерно на 36% быстрее, чем Bitcoin Core v21.0.0. Мы пока не реализовали кэширование доказательств включения элементов Utreexo (Proof) в utcd, и utcd загружает примерно 900 ГБ данных. При гигабитном соединении это займет не менее 2 часов. Из проектного документа Utreexo мы знаем, что при кэшировании Utreexo Proof необходимо будет загрузить около 450~500 ГБ данных. Ниже показаны результаты того же теста IBD, но в этом случае обслуживающий узел находился на той же машине, чтобы сымитировать производительность после реализации кэширования Utreexo Proof.

3-1024x376.png

Как видно из графиков, скорость загрузки повышается примерно на 62%.

Мы также провели сравнительный анализ обоих узлов с полной проверкой подписей.

4-1024x377.png

Как видим, при полной проверке подписей скорость utcd падает примерно на 15%. Это связано с тем, что проверка подписей — самый проблематичный процесс, который занимает около 80% времени проверки, как показано на приведенном ниже визуальном графике.

5-1-1024x272.png

Поскольку libsecp256k1 вызывает и utcd, и Bitcoin Core, увеличение времени загрузки на 15% вполне логично, ведь вызов Go к C (cgo) сопряжен с весьма значительным потреблением ресурсов.

И хотя в ходе моего теста аккумуляторы Utreexo не ускорили процесс IBD при проверке всех подписей, в будущем с Taproot все будет иначе. Taproot позволяет проверять все подписи в блоке группами (это связано с характером подписей Шнорра), что значительно ускоряет процесс проверки подписей. Как следствие, со временем главная проблема будет не в проверке подписей, а в возможном зависании диска. Таким образом, хотя аккумуляторы Utreexo не ускоряют процесс проверки всех подписей, мы считаем, что в будущем это изменится.

Также обратите внимание, что аккумуляторы Utreexo ускоряют процесс проверки при использовании многоядерного процессора, но в этом случае возникает проблема с доступом к диску. Пользователь, запускающий узел сети биткоина на жестком диске, также заметит увеличение скорости, несмотря на проблемы с диском.

Сравнительный анализ начальной загрузки блоков с использованием нескольких компьютеров

Разделение общего объема работы и использование нескольких вычислительных ресурсов (центрального процессора, графического процессора, одноядерного процессора и т. д.) для одновременного выполнения работы известно как параллельные вычисления. Аккумуляторы Utreexo позволяют выполнять IBD с помощью нескольких компьютеров. В многомашинной структуре IBD есть два ключевых компонента: координатор и исполнитель.

Задача машины-координатора — отслеживать, какие блоки уже проверены. Координатор также передает еще не проверенные блоки исполнителю (или рабочему). Исполнитель получает блоки, которые нужно проверить, проверяет их и сообщает, являются ли эти блоки действительными или нет. Этот процесс продолжается до тех пор, пока все блоки в цепочке не будут проверены.

В системе должен быть только один координатор, к которому можно подключить несколько машин-исполнителей.

6-1024x639.png

Координатор также является исполнителем; он также проверяет блоки. В нашей структуре три машины-исполнителя подключены к машине-координатору, и они проверяют блоки вместе с узлом координатора. Важно отметить, что исполнители и координатор не обязательно должны быть настольными компьютерами. Это может быть любое вычислительное устройство, например, смартфон.

7-1024x657.png

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

Ниже приведены результаты теста для структуры из двух машин, вместе выполняющих IBD.

Машина 1

ЦПУ

Ryzen 3600

Память

Samsung 32GB DDR4 2666MHz

Накопитель

1TB HP SSD EX950 M.2 NVMe

Машина 2

Macbook Pro M1 - 8ГБ объединенной памяти (MacBookPro17,1)

8-1024x428.png

Используя две машины, мы смогли выполнить IBD с полной проверкой подписей быстрее, чем Bitcoin Core v21.0.0.

Добавление дополнительных исполнителей

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

Еслипараллельные временные затратывелики (т.е. если координация занимает много времени), это ограничивает возможности распараллеливания рабочей задачи.

В случае проверки блоков в произвольном порядкепараллельными ресурсными затратамиявляется загрузка заголовков. При гигабитном соединении загрузка заголовков заняла 4,403 секунды. Поскольку на весь процесс IBD было потрачено в общей сложности 426 минут (с полной проверкой подписей), распараллелить можно 99,982% работы. Мы можем использовать эту информацию, чтобы определить прогнозируемое максимальное ускорение процесса IBD при использовании большего количества компьютеров на основе закона Амдала.

При использовании разумного количества компьютеров с AMD Ryzen 3600 скорость будет почти идеальной (добавление каждой новой машины ускоряет процесс в 1x). Приведенный ниже линейный график хорошо это демонстрирует.

9-1-1024x559.png

Загрузка заголовков — единственная последовательно выполняемая часть процесса IBD с использованием аккумуляторов Utreexo — необходима для обеспечения медианы прошедшего времени по транзакциям с проверкой последовательности (Check Sequence Verify)(помимо прочего). В текущей реализации  все машины, используемые в многомашинной структуре IBD, выполняют загрузку заголовков по отдельности. Мы планируем добавить эти данные в Utreexo Proof, чтобы устранить загрузку заголовков машинами-исполнителями (чтобы ее выполнял только узел-координатор). Это позволит ускорить процесс при использовании еще большего количества вычислительных ресурсов.

Ограничения проверки блоков в произвольном порядке

Поскольку процесс IBD с аккумуляторами Utreexo требует передачи дополнительных данных (около 20%), это может увеличить время, затрачиваемое на IBD пользователями, у которых есть проблемы со скоростью интернета. Но пользователи, не испытывающие проблем со скоростью  интернет-соединения и способные принять эти дополнительные 20%, очень выиграют от начальной загрузки блоков в произвольном порядке.  Мы также совершили прорыв в исследованиях аккумулятора Utreexo, который позволит значительно уменьшить количество дополнительных загружаемых данных. Подробнее об этом см. ниже, в разделе «Дальнейшая работа».

Future work

Уменьшение размера доказательств Utreexo (Utreexo Proof)

Главный недостаток аккумулятора Utreexo в том, что доказательства использования Utreexo (т.н. Proof) имеют совсем не маленький размер. Это увеличивает размер архива, который должен храниться в узле Utreexo, и повышает трафик в узлах Utreexo. Недавняя статья Болтона Бейли и Сурьянараяны Санкагири показывает, что эффективность пакетной обработки доказательств Utreexo можно повысить. В своей работе они показывают, что смогли уменьшить размер доказательств в 4,6 раза. Это сжатие позволило бы уменьшить использование места и трафика.

Тадж Дрыя уже разработал новый дизайн аккумулятора Utreexo на основе выводов, сделанных Болтоном Бейли и Сурьянараяной Санкагири. В этом году мы будем заниматься внедрением этого нового дизайна.

Прогностическое кэширование

Существующий алгоритм кэширования, рассмотренный в проектном документе Utreexo, сокращает загрузку дополнительных данных примерно на 20%. Но мы можем добиться большего, используя теоретически оптимальный алгоритм кэширования,или алгоритм «ясновидящего» (прогностического) кэширования. Этот алгоритм обычно невозможно реализовать, так как он требует осведомленности о будущих событиях. Однако в процессе IBD пиры, к которым мы подключаемся, точно знают, что произойдет дальше, поэтому этот алгоритм может быть реализован. В настоящее время над этим проектом работают Клэр Бао и Тадж Дрыя.

Реализация на C++

Конечной целью проекта Utreexo является включение функциональности аккумуляторов Utreexo в Bitcoin Core. Но поскольку референсная кодовая база аккумулятора Utreexo написана на языке Go, необходимо написать реализацию на C++. Этот проект называется libutreexo, им руководит Никлас Гёгге. Он также работает над форком Bitcoin Core с libutreexo и изучает, как вписать аккумуляторы Utreexo в кодовую базу Bitcoin Core.

Проверка моих утверждений

Код, который я использовал для выполнения сравнительных тестов, можно найти здесь: github.com/mit-dci/utcd. Информацию о том, как повторить проведенные мной тесты, см. в файле readme в репозитории.

Заключение

Возможность проверки всех блоков за всю историю блокчейна биткоина чрезвычайно важна, так как повышает безопасность как отдельных пользователей, так и сети биткоина в целом. Я считаю, что с помощью аккумуляторов Utreexo мы можем облегчить пользователям эту задачу. Хотя еще многое предстоит сделать, прежде чем эта технология попадет к конечному пользователю, мы уже достигли существенных успехов. Присоединяйтесь к нам на github.com/mit-dci/utreexo, если хотите помочь нам ускорить процесс проверки блокчейна.

АВТОР

BitMEX Research

ТЕГИ

bitcoinbitmextradingaltcoinsanalysis