Почему кошелек не синхронизируется и как это исправить?

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

У Биткоина основой является блокчейн, содержащий в себе полный объем информации от каждой из транзакций. Чтобы совершать платежи в сети, клиенты используют Биткоин кошельки. Они синхронизируются с сетью для транзакций.

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

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

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

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

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 лучшая админ-панель их всех реализаций.

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

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

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

Как вывести монеты с Bitcoin Core?

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

  • Собственник переводит Биткоины на личный счет, ранее открытый на бирже;
  • Он продает полученные Биткоины за стандартные рубли, они сразу поступают на биржу;
  • Деньги выводятся на карту.

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

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

Есть три основных подхода. Первый предполагает, что кошелек сам является полным узлом сети Биткоин. Во втором подходе используется так называемый доверенный узел. Фактически это чужой узел сети, но пользователь кошелька ему доверяет. А третий подход предполагает прямое взаимодействие с остальными узлами сети, но в облегченном варианте, с использованием методики 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, где предлагаются блокчейны по многим криптовалютам. Все они загружены в виде архивов, которые можно бесплатно скачать.

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

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

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

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

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

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

Особенности Ravencoin

Ravencoin является форком кода Биткоина, но отличия есть. Всего их четыре:

  1. вознаграждение за блок составляет 5000 RVN;
  2. время блока — одна минута;
  3. предложение монет ограничено 21 миллиардом;
  4. алгоритм майнинга — KawPoW.

Есть ещё несколько уникальных характеристик проекта:

  1. сеть закрыта от ASIC-майнеров для ликвидации угрозы возможной централизации;
  2. монету запустили честно — без премайнинга и ICO;
  3. разработчики не держат фонд монет и не берут проценты с эмиссии;
  4. минимальный объём памяти видеокарты для майнинга — 3 ГБ;
  5. приверженность комьюнити и открытый код.

Bitcoin кошелек не запускается или закрывается без уведомления? Решение

Ваш Bitcoin-кошелек стал закрываться без предупреждения или уведомления? Эта проблема встречаются часто, и в большинстве случаев она возникает при принудительном отключении кошелька (к примеру, внезапное отключение света во время работы кошелька).

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

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

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

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

Рейтинг
( 2 оценки, среднее 4.5 из 5 )
Понравилась статья? Поделиться с друзьями: