Команда розробників Bitcoin Core випустила перший реліз-кандидат версії 32.0. Оновлення змінить механізм оцінювання комісій, пришвидшить перевірку блоків під час читання даних із диска та виправить уразливість, пов’язану з функцією walletnotify. Стабільний реліз планують випустити 10 жовтня 2026 року.
14 вересня команда Bitcoin Core опублікувала версію 32.0rc1, яка стала першим реліз-кандидатом майбутнього оновлення. На цьому етапі розробники перевіряють роботу нових функцій і виправлень перед випуском стабільної версії.
В опублікованих примітках до Bitcoin Core 32.0 немає змін правил консенсусу біткоїна. Йдеться саме про оновлення програмного забезпечення, яке використовують учасники мережі.
Bitcoin Core змінить оцінку комісій і пришвидшить перевірку блоків
Одним із ключових оновлень стане зміна роботи функції estimatesmartfee. Вона допомагає визначити розмір комісії, необхідний для підтвердження транзакції протягом заданої кількості блоків.
Зараз для розрахунку використовується оцінювач block_policy, який спирається на дані вже підтверджених транзакцій. У Bitcoin Core 32.0 до нього додадуть mempool_policy. Цей механізм аналізуватиме поточний стан мемпула, тобто черги непідтверджених транзакцій.
За замовчуванням клієнт використовуватиме обидва алгоритми та обиратиме менше значення. Завдяки цьому після зниження навантаження на мережу рекомендована комісія зможе швидше зменшуватися. Водночас новий механізм не підвищуватиме її порівняно з оцінкою block_policy.
Користувачі зможуть самостійно вибирати потрібний алгоритм за допомогою параметра fee_rate_estimator. Якщо новий оцінювач не матиме достатньої кількості даних, він повертатиме помилку. Така ситуація може виникнути, зокрема, під час завантаження мемпула, після отримання недостатньої кількості нових блоків або коли його стан не дозволяє зробити надійну оцінку.
Розробники також додали паралельне попереднє завантаження даних про використані виходи транзакцій, відомих як prevouts, під час перевірки блоків. За замовчуванням Bitcoin Core використовуватиме вісім потоків для цього завдання, а максимальна кількість становитиме 16. Вимкнути функцію можна за допомогою параметра -prevoutfetchthreads=0.
Очікується, що це пришвидшить перевірку блоків насамперед у ситуаціях, коли необхідні дані потрібно зчитувати з диска. Якщо вони вже зберігаються в оперативній пам’яті, ефект від нововведення буде меншим.
Ще одна зміна стосується частково підписаних біткоїн-транзакцій, або PSBT. Команди createpsbt, walletcreatepsbt, converttopsbt і psbtbumpfee за замовчуванням почнуть створювати PSBT версії 2. За необхідності користувач зможе вибрати іншу версію за допомогою аргументу psbt_version.
У Bitcoin Core виправили уразливість walletnotify
У версії 32.0 також виправили уразливість, яка була присутня в Bitcoin Core починаючи з версії 24.0. Проблема стосувалася систем, відмінних від Windows, під час використання параметра -walletnotify з плейсхолдером %w. Ця настройка дозволяє автоматично запускати команду, визначену оператором, коли в мережі з’являється транзакція, пов’язана з конкретним гаманцем.
Аутентифікований користувач RPC, який мав право створювати гаманці, міг задати спеціально сформовану назву. Після отримання повідомлення про транзакцію певні символи в назві могли порушити екранування командного рядка. За відповідної конфігурації walletnotify це дозволяло виконати додаткову команду від імені процесу Bitcoin Core.
Проблема виникала через те, що функція ReplaceAll() передавала екрановану назву гаманця до std::regex_replace() як текст заміни. Розробники змінили механізм обробки таким чином, щоб назва гаманця сприймалася буквально.
Водночас уразливість не можна було використати через звичайне P2P-з’єднання або без авторизації. Для потенційної атаки одночасно були потрібні RPC-доступ із правом створювати гаманці, налаштований walletnotify з використанням %w та операційна система, відмінна від Windows.
Проблема нового HTTP-сервера
До гілки Bitcoin Core 32.0 також увійшло виправлення ще однієї проблеми безпеки, яку виявили під час аудиту нового HTTP-сервера за допомогою моделі Kimi K3.
Якщо сервер уже обробляв запит, клієнт за певних умов міг продовжувати надсилати дані без обмеження їхнього обсягу. Це могло призвести до неконтрольованого збільшення споживання пам’яті процесом.
Розробники заборонили серверу читати нові дані із сокета, доки попередній запит залишається в роботі. У такому випадку вхідний потік обмежуватиметься механізмами TCP.
Для використання найбільш реалістичного сценарію атаки також був потрібен аутентифікований клієнт.
Новий HTTP-сервер не використовувався в попередніх стабільних версіях Bitcoin Core. Тому проблема не зачіпала вузли, які працювали на попередніх офіційних версіях клієнта. У реліз 32.0 сервер увійде вже з відповідним виправленням. Крім того, Bitcoin Core 32.0 більш ніж удвічі зменшить обсяг дискового простору, необхідний для індексу транзакцій txindex після його повної перебудови.
Вже створені індекси залишаться сумісними з новою версією. Однак для отримання економії дискового простору їх потрібно буде створити заново.
Стабільний реліз Bitcoin Core 32.0 розробники планують випустити 10 жовтня.
Нагадаємо, у жовтні 2025 року команда випустила Bitcoin Core v30. Серед ключових змін тоді стало збільшення встановленого за замовчуванням ліміту даних у виходах OP_RETURN із 80 до 100 000 байт.
