Как ускорить синхронизацию Bitcoin, Ethereum и других кошельков?

Хранить криптовалюты и управлять своими монетами лучше через клиентские программы. Их сейчас создано много, они практически не отличаются. Загружаются и устанавливаются стандартно, но почти все новички интересуются, как долго ждать полной синхронизации. Иногда она затягивается на несколько дней.

Как ускорить синхронизацию Bitcoin, Ethereum и других кошельков? Скорость зависит от того, насколько у вас быстрый интернет.

К сожалению, сервера не всегда работают на полную мощность, поэтому приходится долго ждать загрузки. Общая база данных кошелька занимает от 20 Гб дискового пространства.

Базовые функции кошелька

Начнем с базовой функциональности цифрового кошелька:

  • резервное копирование личных ключей;
  • прием платежей;
  • отображение баланса;
  • отображение истории транзакций;
  • отправка платежей.

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

Bcoin master

Синхронизация полной ноды Bcoin master (коммит 77d8804) на блоке 601 300 выполнена за 18 часов 29 минут.

Если вы читали прошлогодний отчет, вы можете вспомнить, что мне пришлось повозиться с Bcoin — я пробовал синхронизироваться около десяти раз, прежде чем смог найти правильные параметры, которые не приводили бы к тому, что процесс NodeJS прерывался и зависал. С тех пор команда Bcoin внесла ряд улучшений по синхронизации.

Моя конфигурация:

  • checkpoints:false
  • cache-size:10000
  • sigcache-size:1000000
  • max-files:5000

Сложности работы в распределенной сети

Работа с распределенной сетью является достаточно сложной темой, в которой обычно сталкиваются со следующими проблемами. Одна из них состоит в способе проверки полученных данных из распределенной сети, а вторая заключается в оптимизации хранения данных этих данных. Эти требования немного конфликтуют между собой, поскольку больший объем хранимых данных позволяет произвести более полную проверку новых транзакций и блоков. Идеального решения этих проблем нет, невозможно обрабатывать транзакции и достоверно и с минимальными ресурсами, поэтому приходится искать некоторый баланс, компромисс простоты и безопасности.
Еще одна проблема заключается в следующем. Чтобы получить историю транзакций по определенному адресу на полном узле сети, вам придется пройтись по всему блокчейну (от genesis до last known), что достаточно долго, поскольку это большой объем данных, а грубый перебор это мало эффективный подход. Поэтому можно использовать определенные подходы с целью оптимизации запросов. Для этого применяются специальные надстройки над обычным узлом сети, которые помогают индексировать блокчейн и кэшировать некоторые данные для ускорения поиска по популярным метрикам. По такому принципу работает любой blockchain explorer, например blockchain.info, который достаточно быстро возвращает данные практически о любом адресе, о любой транзакции и т. д.

Итак, существует несколько принципиально разных подходов к осуществлению взаимодействия и синхронизации цифрового кошелька с распределенной сетью. Давайте их рассмотрим.

Gocoin 1.9.7

Полная синхронизация Gocoin 1.9.7 до блока 601 300 с включенной библиотекой secp256k1 заняла 19 часов 56 минут. Нагрузка на ЦП оставалась стабильной (на уровне 50%) и никакие другие ресурсы не были максимально использованы.

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

Установил библиотеку secp256k1 и собрал gocoin с помощью sipasec.go.

Отключен функционал кошелька через AllBalances.AutoLoad:false

Моя конфигурация:

  • LastTrustedBlock: 00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048;
  • AllBalances.AutoLoad:false;
  • UTXOSave.SecondsToTake:0.

Gocoin все еще довольно быстр по сравнению с конкурентами, но я не думаю, что он синхронизировался так быстро, как мог бы. На ранних блоках загрузка моего процессора составляла около 20% и никогда не превышала 50%. Я подозреваю, что это может быть связано с тем, что я не использую гиперпоточность — на моей машине 6 физических, но 12 виртуальных процессоров. Я пытался увеличить количество пиров с 10 до 20 и улучшил переход с 1.11 до 1.13, но это не привело к существенному улучшению эффективности. С другой стороны, у Gocoin лучшая админ-панель их всех реализаций.

Подходы синхронизации кошелька с платежной сетью

Есть три основных подхода. Первый предполагает, что кошелек сам является полным узлом сети Биткоин. Во втором подходе используется так называемый доверенный узел. Фактически это чужой узел сети, но пользователь кошелька ему доверяет. А третий подход предполагает прямое взаимодействие с остальными узлами сети, но в облегченном варианте, с использованием методики Simplified Payment Verification (SPV). Эта методика позволяет с достаточно высокой степенью надежности проверить подтвержденность транзакций, но не прибегать к запуску полного узла сети. Давайте чуть подробнее остановимся на каждом из этих подходов синхронизации.

Работа с полным узлом сети

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

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

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

Отметим, что использование такого подхода является одним из самых простых и надежных, даже для обычного пользователя. Для этого просто нужно взять исходный код или готовые бинарники, например, Bitcoin Core и запустить ПО. Существенным недостатком можно считать только требования к компьютеру.

Работа с доверенным узлом сети

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

Какие же преимущества и недостатки этого подхода? Как и в предыдущем случае, хоть и косвенно, но можно влиять на проверку транзакций в сети Биткоин, потому что у пользователя остается доверенный узел сети. Преимущество состоит в том, что он освобождается от необходимости хранить полную копию блокчейна на своем устройстве. Тем не менее зависимость от доверенного узла является недостатком, ведь в случае его отказа пользователь не всегда может переключиться на другой доверенный узел. Поскольку проверка транзакций происходит на удаленном сервере, нужно убедиться в надежности канала передачи данных между кошельком и сервером, на котором происходит проверка. При таком подходе появляются угрозы таких атак как “Man in the middle”.

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

Неудобство данного подхода заключается в зависимости цифрового кошелька от доверенного узла, в частности в плане доступа к актуальным данным платежной системы. Как только пользователь теряет доступ к доверенному узлу или узел отказывает в обслуживании, пользователь теряете связь с сетью. Соответственно, пользователь теряете возможность получать и отправлять платежи. Чтобы уменьшить риск потери доступа к доверенному узлу, можно выбрать несколько доверенных узлов. Это значит, что в нормальных условиях пользователь подключается и работает с одним доверенным узлом, но если случается потеря доступа, то цифровой кошелек автоматически подключается к другому доверенному узлу. По сути, при каждом соединении кошелек случайным образом выбирает один узел из списка доверенных.

Такой способ используют преимущественно мобильные кошельки, потому что он позволяет и верифицировать транзакции, и упростить работу мобильного приложения. Примерами таких мобильных кошельков для Биткоина являются Mycelium и Coinomi. Компания Distributed Lab также разработала и поддерживает кошелек под названием Bitxfy, где применен данный подход.

Работа с SPV-узлом сети

Третий распространенный подход к синхронизации цифрового кошелька с Биткоин сетью — это облегченный узел сети. Речь идет о Simplified Payment Verification (SPV). В этом подходе может отсутствовать необходимость запуска своих полных узлов или выбора доверенных. Предполагается, что цифровой кошелек напрямую общается с другими узлами сети: фактически выбирает несколько десятков чужих полных узлов и поддерживает с ними соединение. Отличие состоит в том, что облегченный узел общается с другими узлами на равных, обмениваясь с ними р2р сообщениями, но при этом не хранит всю историю транзакций. Здесь для проверки входящих транзакций применяется методика SPV. Фактически облегченный узел проводит только часть наиболее важных проверок из тех, что проводит полный узел сети.
Как происходит работа в этом случае? Вместо того, чтобы получать блоки, как это делает полный узел, SPV узел получает только заголовки блоков, которые имеют гораздо меньший размер (80 байт). В заголовке содержатся необходимые данные для проверки факта подтверждения конкретной транзакции в этом блоке. Если говорить более конкретно, то в заголовке блока есть поле Merkle Root, где записано хеш-значение от всех транзакций в блоке, рассчитанное по схеме Merkle Tree.

Схема Merkle Tree позволяет проверить, входит ли хеш-значение конкретной транзакции в Merkle Root, не имея при этом всех остальных транзакций блока. Таким образом, имея транзакцию, заголовок блока и Merkle Branch для этой транзакции (можно запросить у полного узла), цифровой кошелек может убедиться, что транзакция была действительно подтверждена в конкретном блоке.

Почему это нельзя считать полноценной верификацией транзакций? Конечно, пользователь получает независимость от конкретных узлов сети и может напрямую общаться с распределенной сетью. Для этого ему не нужно хранить весь блокчейн. Но недостаток состоит в том, что облегченный клиент самостоятельно не проверяет транзакцию полностью, потому что у вас нет всех необходимых данных для этого (например, непотраченные монеты). Он проверяет лишь факт подтверждения транзакции валидаторами — т. е. убеждается, что эту транзакцию полностью проверили другие узлы и владельцы большинства вычислительной мощности сети (майнеры). В этом случае надежность снова сводится к доверию, что большинство вычислительной мощности используются для честной работы. Иначе говоря, вы не сами проверяете транзакцию, а доверяете это большинству.

Особенностью использования цифровых кошельков, которые реализуют подход SPV узла, является необходимость поддержания сетевого соединения с большим количеством независимых полных узлов сети. Это нужно, чтобы минимизировать вероятность того, что узел будет подключаться и получать данные только от узлов злоумышленника. Тогда злоумышленник может навязать пользователю альтернативное (поддельное) состояние истории транзакций. Как следствие жертва может принять платеж из той транзакции, которая по версии злоумышленника подтверждена, хотя на самом деле нет. Чтобы увеличить шансы получать актуальные данные о реальном состоянии сети, пользователю следует максимально увеличить количество независимых узлов для общения. Чем их больше, тем меньше вероятность, что они все в сговоре против пользователя.

Как вы уже поняли, SPV узлы требовательны к стабильной работе сетевого соединения, тем не менее часто применяются даже в мобильных приложениях. Этот подход синхронизации с платежной сетью достаточно широко распространен и используется в ряде популярных Биткоин кошельков. Среди них можно выделить Bitcoin Wallet, Electrum, а также Bread Wallet.

Скачивай блоки одним архивом на Cryptochainer

Данные иногда долго передаются не из-за плохого интернета со стороны пользователя, а низкой скорости на серверах.

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

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

Сэкономить время действительно удается, но учтите, что блоки занимают много места, поэтому всё равно придется подождать их загрузки:

Сделано всё в простом формате, из огромного списка потребуется выбрать нужный вам блокчейн. Полный список криптовалют публиковать не будем, потому что их слишком много и постоянно добавляются новые. Здесь вы можете загрузить блоки таких популярных альткоинов, как:

  • DASH;
  • Dogecoin;
  • DigitalCoin;
  • GoldPieces;
  • Hyper;
  • Litecoin;
  • Peercoin.

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

Учтите, что данные увеличиваются постоянно, поэтому мы не можем сказать, сколько весит тот или иной архив под какую-то криптовалюту.

Bitcoin Core – что такое и как работает: создание и пользование кошельком

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

Подходы синхронизации кошелька с платежной сетью (читать далее…)

  1. Требуется кликнуть по кнопке создания интернет-кошелька.
  2. В форме, которая отрывается, нужно прописать место хранения портмоне.
  3. Требуется присвоить ему индивидуальное название.
  4. Нужно ввести обеспечивающий безопасность пароль, выполнив шаги – файл – добавление пароля.
  5. Обязательно нужно придумать ключ и сохранить его в надежном месте.

Решение проблем

Новички чаще всего жалуются на несколько проблем с Bitcoin Core.

Долго синхронизируется кошелек

Долго – это сколько? В норме процесс занимает от 3 суток. Если во время скачивание процесс остановился, то можно попробовать перезагрузить компьютер, в самом крайнем случае, удалить всю информацию и начать заново. Если процессор мощный и многоядерный, на диске достаточно свободного места, а оперативка не перегружена – то проблем со скачиванием не будет.

Получена неизвестная версия блока

Эта ситуация была актуальна год назад. Тогда многие владельцы кошельков получили уведомление о том, что получена неизвестная версия блока. На скриншоте уведомление в желтой рамке. Разработчики по этому поводу сказали не беспокоиться, если интересно узнать более подробно, можно почитать форум bitcointalk.org/index.php?topic=2027513.0.

Результаты

  • Bitcoin Core 0.19: 6 часов, 39 минут;
  • Bcoin: 18 часов, 29 минут;
  • Gocoin 1.9.7: 19 часов, 56 минут;
  • Libbitcoin Node 3.2.0: 1 день, 3 часа, 37 минут;
  • Parity Bitcoin: 2 дня, 2 часа, 10 минут;
  • BTCD v0.20.0-beta: 3 дня, 3 часа, 12 минут;
  • Stratis 3.0.5.0: Синхнонизация не была завершена; определенно больше недели.

Libbitcoin Node 3.6.0

Полная синхронизация Libbitcoin Node 3.6.0 на блоке 601 300 заняла 27 часов 37 минут с 10 000 кешем UTXO.

Libbitcoin Node был не так уж и плох — самая сложная часть заключалась в удалении жестко запрограммированных контрольных точек блоков. Для этого мне пришлось клонировать репозиторий git, извлечь ветку «version3», удалить все контрольные точки (кроме genesis) из bn.cfg и запустить скрипт install.sh, чтобы скомпилировать узел и его зависимости.

Моя конфигурация:

  • [database]
  • cache_capacity = 100000
  • [node]
  • block_latency_seconds = 5

Я заметил, что в ходе синхронизации Libbitcoin записал 3 ТБ и прочитал более 30 ТБ на диск и с диска. Общее количество записи выглядит разумным, но общее количество операций чтения намного выше, чем в других реализациях. Можно улучшить кэширование; к концу синхронизации использовалось только 5 ГБ оперативной памяти. Был также ряд коротких пауз, когда казалось, что узел не работает; предположительно, очередь блоков для обработки время от времени простаивала.

История Ravencoin

После запуска в 2022 году команду Ravencoin финансировала Medici Ventures, дочерняя компания Overstock.com, ориентированная на блокчейн.

Ravencoin был специально разработан для создания экосистемы майнинга, в которой специализированное оборудование для майнинга, используемое для других криптовалют, называемое интегральными схемами специального назначения (ASIC), не имело преимущества.

В январе 2022 года Трон Блэк, ведущий разработчик Ravencoin, написал, что майнеры ASIC нашли способ обыгрывать оригинальные алгоритмы RVN, что дало им преимущество над компьютерами с обычной вычислительной мощностью.

Чтобы исправить это, команда Ravencoin дополнительно изменила свои алгоритмы, так что даже если майнеры решат использовать ASIC, их оборудование будет вынуждено вести себя как обычное компьютерное оборудование. Это фактически сравняло игровое поле по крайней мере, на время.

Что такое Bootstrap.dat?

Bootstrap.dat — это файл, который содержит копию блокчейна из блока genesis до определенного момента времени. Этот сжатый файл Bootstrap.dat используется для ускорения начального времени загрузки блокчейна.

Как это происходит? Клиент вашего кошелька загружает и проверяет каждый блок из сети P2P. Обычно это происходит медленно, особенно если вы используете кошелек впервые, тогда процесс синхронизации может занять довольно много времени.

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

Как только клиент кошелька завершит чтение данных из файла начальной загрузки, он будет использовать P2P-соединение для загрузки оставшихся блоков.

Этот метод быстрее и, кроме того, он потребляет меньшую пропускную способность по сравнению со стандартным процессом синхронизации.

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

Как ускорить синхронизацию Bitcoin или Ethereum wallet?

Один из внимательных пользователей решил проанализировать процедуру синхронизации и сделал собственные предположения по поводу скорости.

Проверив ресурсы ПК, он заметил, что используется не так много ОЗУ и на процессор не идет нагрузка. Скорость интернета позволяет грузить быстрее, но что-то тормозит операцию:

Оказывается, обычный жесткий диск просто неспособен записывать данные также быстро, как они двигаются в сети интернет. Вывод – нужен более современный и качественный носитель.

Идеальное решение SSD диск. Его вы можете приобрести в любом магазине компьютерной техники или заказать на Aliexpress.

Рейтинг
( 1 оценка, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]