Как ускорить синхронизацию 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 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: Синхнонизация не была завершена; определенно больше недели.
Где купить Ravencoin
Объём торгов RVN за последние сутки составил 31 миллиона долларов. Треть этой суммы пришлось на Binance — чуть больше 10.5 миллиона долларов.
Биржи с поддержкой Ravencoin RVN
Также в список бирж попали Upbit, Bittrex, DigiFinex и Coinall. Остальные обеспечивают совсем небольшой оборот.
На официальном сайте проекта видим такие площадки.
Особенности Ravencoin
Ravencoin является форком кода Биткоина, но отличия есть. Всего их четыре:
- вознаграждение за блок составляет 5000 RVN;
- время блока — одна минута;
- предложение монет ограничено 21 миллиардом;
- алгоритм майнинга — KawPoW.
Есть ещё несколько уникальных характеристик проекта:
- сеть закрыта от ASIC-майнеров для ликвидации угрозы возможной централизации;
- монету запустили честно — без премайнинга и ICO;
- разработчики не держат фонд монет и не берут проценты с эмиссии;
- минимальный объём памяти видеокарты для майнинга — 3 ГБ;
- приверженность комьюнити и открытый код.
Как вывести монеты с Bitcoin Core?
После активации кошелька и предпринятых мер по обеспечению безопасности, можно разобраться с вопросом, как вывести деньги на карту. Сделать это можно по алгоритму:
- Собственник переводит Биткоины на личный счет, ранее открытый на бирже;
- Он продает полученные Биткоины за стандартные рубли, они сразу поступают на биржу;
- Деньги выводятся на карту.
Вывод средств через указанную биржу предоставляется возможность выгодно реализовать Биткоины по максимально выгодному для пользователя курсу. Денежная комиссия будет небольшой, но на операцию будет определенное количество времени.
Что такое Bootstrap.dat?
Bootstrap.dat — это файл, который содержит копию блокчейна из блока genesis до определенного момента времени. Этот сжатый файл Bootstrap.dat используется для ускорения начального времени загрузки блокчейна.
Как это происходит? Клиент вашего кошелька загружает и проверяет каждый блок из сети P2P. Обычно это происходит медленно, особенно если вы используете кошелек впервые, тогда процесс синхронизации может занять довольно много времени.
Вместо использования одноранговой связи ваш клиент кошелька может читать данные блокчейна из этого сжатого файла начальной загрузки, который содержит копию данных блокчейна до определенной высоты блока.
Как только клиент кошелька завершит чтение данных из файла начальной загрузки, он будет использовать P2P-соединение для загрузки оставшихся блоков.
Этот метод быстрее и, кроме того, он потребляет меньшую пропускную способность по сравнению со стандартным процессом синхронизации.
Тем не менее, метод начальной загрузки занимает некоторое время, так как клиент вашего кошелька должен проверить каждый отдельный блок.
Где майнить Ravencoin. Настройки майнера RVN
Майнить Ravencoin рекомендуем на пуле 2Miners, причём как в SOLO, так и в привычном PPLNS. Для этого редактируем .bat-файл из архива и указываем свои данные.
Пул Ravencoin на 2Miners
Вместо YOUR_ADDRESS вводим свой кошелёк.
Также меняем RIG_ID — это имя будет отображаться в статистике майнера. Поле необязательное, так что можно оставить его пустым. В противном случае используем не больше 32 символов. Подходят латиница, цифры, а также символы «-» и «_».
Вот настройки для майнера Gminer в режиме PPLNS. После загрузки программы из нашего архива с паролем 2Miners нужно изменить содержимое .bat-файла.
miner.exe —algo kawpow —server rvn.2miners.com:6060 —user RQGst5s2X7NsSya7ozUaJb1uehcLHHwkHL.RIG_ID
А вот — для режима SOLO.
miner.exe —algo kawpow —server solo-rvn.2miners.com:7070 —user RQGst5s2X7NsSya7ozUaJb1uehcLHHwkHL.RIG_ID
Интерфейс Gminer на KawPow
Вот настройки для NBMiner.
nbminer.exe -a kawpow -o stratum+tcp://rvn.2miners.com:6060 -u YOUR_ADDRESS.RIG_ID pause
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 ГБ оперативной памяти. Был также ряд коротких пауз, когда казалось, что узел не работает; предположительно, очередь блоков для обработки время от времени простаивала.
Таблица скорости майнинга вороны на видеокартах
ПроизводительБрендМодельОбъем памятиХешрейтМощность потребленияNVidiaeVGARTX 30708GB27.6 Mh/s170 ВтNVidiaPNYRTX 3060Ti8GB27 Mh/s160 ВтNVidiaZotacRTX 20808GB26,5 Mh/s175 ВтNVidiaZotacRTX 2070S8GB22 Mh/s170 ВтNVidiaZotacGTX 1070Ti8GB8.5 Mh/s150ВтNVidiaZotacGTX 1080Ti8GB21,5 Mh/s180 ВтNVidiaeVGAGTX 10808GB16,9 Mh/s156 ВтAMDSapphireRX 6800XT12GB33 Mh/s200 ВтAMDXFXVega648GB24 Mh/s220 ВтAMDAsusRX 5700XT8GB21 Mh/s160 ВтAMDMSIRX 5600XT6GB17.5 Mh/s130 ВтAMDMSIRX 5808GB14,5 Mh/s145 ВтAMDPowerColorRX 5704GB14 Mh/s97 ВтAMDSapphireRX 4704GB13 Mh/s87 ВтAMDAsusRX 4808GB13 Mh/s125 ВтAMDXFXRX 5604GB6 Mh/s50 ВтДанные показатели взяты на видеокартах с отрегулированным разгоном, работающих в Windows 10.
Настройка майнера RVN для Hive OSЧтобы добывать ворона нужно добавить адрес и имя бумажника Ravencion в графу «Кошельки» и создать полетный лист со следующими параметрами:
- монета — RVN;
- адрес — кошелек RVN;
- пул — выбираем доступный пул и конфигурацию из списка;
- майнер — также выбираем из рекомендованных в зависимости от производителя GPU (AMD или Nvidia).
Сохраняем и запускаем полетный лист, подбираем параметры разгона для конкретной модели видеокарты. Happy mining!