Встановивши десктопний гаманець BitcoinCore, при першому запуску програма потребує синхронізації з мережею Bitcoin. Необхідно завантажити Blockchain мережі Біткоїн, який займає близько 200 гігабайт пам’яті. Незважаючи на швидкий інтернет, процес синхронізації десктопного гаманця з мережею Біткоїн відбувається дуже довго, іноді кілька днів. Чому так відбувається? На це питання читайте в статті та дивіться відео.
Підпишіться на youtube канал Школи Біткоїн натиснувши кнопку
Питання Антонопулосу: “Чому так багато часу займає завантаження blockchain? У мене є швидке підключення до Інтернету, і я можу завантажити 200 гігабайт менш ніж за годину.”
Це те, що називається початковим завантаженням блокчейна або IBD, яке є першою синхронізацією вузла біткоїн або будь-якого типу вузлів блокчейна. І відповідь полягає в тому, що в той час як обсяг даних, необхідних для завантаження, щоб отримати актуальний вузол, становить близько 200 гігабайтів, це просто завантаження і зберігання інформації на диску.
Однією з основних функцій вузла біткоїнів є перевірка всіх правил консенсусу, і ваш вузол робить це, навіть якщо ви не повністю синхронізували блокчейн. Кожен вузол перевіряє всі дані на відповідність правилам. Отже, коли ви починаєте з блоку Genesis (блок 0), і ви завантажуєте його, а потім блок 1 і блок 2 і т.д., І ви починаєте будувати ланцюжок блоків, формуючи актуальну версію повного блокчейна і повністю синхронізуєте з іншою частиною мережі. Кожен завантажений вами блок завантажує всі транзакції в цьому блоці, які проходять через ваш вузол, і повністю перевіряються, всі підписи, всі проміжки, всі суми, всі звіти coinbase, всі комісії. Ваш вузол відтворює і реконструює кожен softfork і оновлює зміни в коді, копіюючи всю історію з 3 січня 2009 року. Він веде себе як вузол у 2009 році протягом першого періоду завантаження блокчейна, а потім, коли правила змінюють, він підраховує голоси в софтфорку і змінює правила в реальному часі, а потім оцінює кожен блок мережі на основі нових правил в перерахунку складності і бачить, чи вистачало у майнерів потужності для блоків 2010 року.
Він оцінює кожне правило так, як ніби він в цей час завантажує його в перший раз. Таким чином, він імітує життя системи Біткоїн з 2009 року, а потім в 2010 році і т.д. аж до сьогоднішнього дня, враховується кожна помилка, кожен форк, кожна зміна.
Тому синхронізація вузла з мережею Біткоїн це більше, ніж просто пропускна здатність мережі, це ще робота процесора, а також індексація диска, бо необхідна перевірка, чи не є транзакція подвійною, або чи правильно вона витрачена. Вузол Біткоїн повинен зберегти UTXO в пам’яті, цей набір UTXO, вузол буде використовувати, щоб перевірити, чи була ця сума доступною для витрат. Таким чином, вузол Біткоїн повинен індексувати всі UTXO і ідентифікатори транзакцій, коли ваша транзакція відноситься до попередньої транзакції, процесор повинен шукати її хеш. Він повинен відновити коріння merkel всіх блоків і зберегти весь блокчейн, хеш з попереднього блоку і т.д. Багато індексації бази даних. Це те що відбувається з вашим вузлом.
Справжня проблема довгої синхронізації вузла не в пропускній здатності мережі інтернет, а, ймовірно, в пропускній здатності жорсткого диску і оперативної пам’яті. Рекомендована мінімальна конфігурація комп’ютера включає в себе 4 гігабайти оперативної пам’яті і відносно швидкий SSD-диск, для індексації, читання записів з бази даних на диску, які будуть відбуватися. Якщо у вас немає SSD диску, вам необхідно набагато більше кешування в оперативній пам’яті, щоб компенсувати продуктивність старого механічного жорсткого диску, і в цьому випадку вам може знадобитися 8 або 16 гігабайт оперативної пам’яті.
Отже, ваше “слабке місце” – це дисковий ввід / вивід, можливо, процесор, хоча це менш імовірно. Якщо ви використовуєте його на форку або в сучасному пошуку, це не повинно бути проблемою. Якщо ви робите все це на RaspberryPi тільки з 2 гігабайтами оперативної пам’яті, я можу зрозуміти, в чому проблема. Проблема в слабких потужностях вашого комп’ютера, а не пропускної здатності вашого інтернет з’єднання.