Как я могу заставить узел geth быстро загрузить блокчейн?

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

Ответы (5)

Не забудьте использовать SSD

Если у вас есть возможность, лучше использовать твердотельный накопитель NVMe.

Если у вас ограниченное пространство на SSD, см. раздел Можно ли разделить цепочку данных на два (или более) места?

Тем не менее, состояние Ethereum велико и становится больше. Будьте терпеливы, и это того стоит.


Предыдущий ответ

Не забывайте--cache

Все упоминают , --fastно вам, вероятно, также нужно--cache=1024 . Без него вы работаете со значением по умолчанию --cache=128(Geth 1.6.7).

Увеличение скорости на 50% возможно только за счет увеличения кеша.

Если вы начинаете с самого начала, используйте:geth --fast --cache=1024

Если у вас уже есть часть блокчейна, используйте:geth --cache=1024

В зависимости от вашей оперативной памяти вы также можете попробовать более высокие значения, например --cache=2048.

Источник

Если вы используете клиент geth, вы можете кое-что сделать, чтобы ускорить загрузку блокчейна Ethereum. Если вы решите использовать флаг --fast для выполнения быстрой синхронизации Ethereum, вы не сохраните данные прошлых транзакций.

Примечание

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

Ниже приведены некоторые флаги, которые следует использовать, если вы хотите ускорить синхронизацию клиента.

--быстро

Этот флаг включает быструю синхронизацию через загрузку состояния, а не загрузку данных полного блока. Это также значительно уменьшит размер вашего блокчейна. ПРИМЕЧАНИЕ. --fast можно запустить только в том случае, если вы синхронизируете свою цепочку блоков с нуля и только при первой загрузке цепочки блоков из соображений безопасности. См. этот пост Reddit для получения дополнительной информации.

--кэш=1024

Мегабайты памяти, выделенные для внутреннего кэширования (мин. 16 МБ/база данных принудительно). По умолчанию установлено значение 16 МБ, поэтому увеличение этого значения до 256, 512, 1024 (1 ГБ) или 2048 (2 ГБ) в зависимости от объема оперативной памяти вашего компьютера должно иметь значение.

Начиная с Geth версии 1.6.0 использование флага --fast устарело, теперь вы должны использовать --syncmode=fast
@BarneyChambers, blockwala и другие: спасибо. Это также было преобразовано в вики, чтобы облегчить обновление для всех.
Если кто-то ссылается на это в год Короны, режим синхронизации по умолчанию теперь равен fast, а cacheзначение по умолчанию — 1024.

Опция --fastкомандной строки будет синхронизироваться быстрее. Вы должны использовать его с нуля, вы не можете использовать его, если блокчейн уже загружен. Если у вас есть уже синхронизированный узел, вы можете использовать интерфейс Javascript и команды exportChain и importChain для синхронизации вашего узла.

Потому --fastчто это нужно сделать до того, как что- либо будет синхронизировано.
geth removeb можно использовать для уничтожения базы данных. Это не должно влиять на хранилище ключей, но в любом случае сначала сделайте резервную копию каталога данных.
В моем случае -fast не имеет последствий, и geth жалуется: I0508 13:29:49.476026 30960 handler.go:92] блок-цепочка не пуста, быстрая синхронизация отключена
Вы сделали geth removeb для очистки базы данных?
Есть ли официальный торрент или аналогичный с обновленной цепочкой для быстрого импорта?
@paulmorriss Я надеюсь, вы не возражаете, что это было преобразовано в вики в надежде, что сообществу будет легче обновляться. Чтобы компенсировать потенциально потерянную репутацию, я могу предложить вознаграждение за существующий или новый вопрос по вашему выбору.

Есть 2 способа использования geth, о которых я знаю

1. синхронизировать с тем--fastgeth --fast , с которого вы можете начать . Обеспечивает быструю синхронизацию посредством загрузки состояния .

2. используйте importкоманду в geth , чтобы сделать это, вам нужен уже синхронизированный блокчейн из geth, и его нужно экспортировать с помощью geth export filename, который можно импортировать вgeth import filename

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

Спойлер : Синхронизация HDD очень медленная.

Есть два режима синхронизации:

  • geth --fast --cache 1024 --jitvm: этот метод очень быстр на мощном компьютере (25 минут на моей системе i7 quad core 16Go, SSD и пропускная способность в Гбит/с). Он использует 4,5 ГБ на диске
  • geth --cache 1024 --jitvm: этот метод медленнее (3 часа в моей системе i7 quad core 16Go, SSD и пропускная способность в Гбит/с). Он использует 21 ГБ на диске

Совет 1 : Если у вас уже есть гет, синхронизированный на компьютере, вы можете создать резервную копию каталога chaindata и скопировать его на другой компьютер. Я проверяю OS X, Linux и Windows (все в 64-битной версии).

Совет 2. Работает метод экспорта/импорта. Продолжительность импорта очень велика, потому что он проверяет все транзакции.

Совет 3. Если у вас достаточно оперативной памяти и нет SSD, используйте оперативную память в качестве виртуального диска и выберите виртуальный диск с параметром --datadir. Вам нужно 4,2 ГБ для быстрой синхронизации. Когда синхронизация завершится, скопируйте данные цепочки каталогов на исходное место:

  • ~/.эфириум в Linux
  • ~/Библиотека/Эфириум на os x
  • %APPDATA%\Ethereum в Windows

Я сделал много тестов на разных версиях для этого вопроса: насколько быстрее синхронизироваться с --jitvm?

Примечание 1: если вы используете HDD, кажется, что синхронизация идет медленнее. Быстрый метод был 4 часа в моей системе.

Примечание 2. RAMDiskCreator для OS X — это бесплатная программа для создания RAM-диска.

Параметры jtvm и cache незначительно влияют на мой рабочий стол.

в Geth 1.7.3 --fastустарела и --jitvmудалена. Нужны ли нам альтернативные флаги?
Заменяется --fastна --syncmode fast, поэтому его не рекомендуется использовать, просто нужно преобразовать его в новый параметр.

3. синхронизируйте на быстрой машине и скопируйте каталог chaindata на медленную машину . Chaindata переносим на разные архитектуры. Итак, синхронизируйте, аккуратно остановите узел, перенесите каталог chaindata (заменив старый) и запустите узел на другом компьютере. Чтобы минимизировать риск, используйте одинаковые версии geth на обеих машинах. (Я успешно сделал это для x86_64 -> armv7h с Geth 1.4.5, другие тоже .)