Під час підписання Bitcoin Core 26.2 більше не припускає, що TapMiniscript коректний (sane) (#29853), getnetworkhashps видає помилку на недійсні параметри (#28554), а setmocktime має обов’язковий максимум (#29869). Збирання також працює з miniupnpc 2.2.8.
До Bitcoin Core 0.10.1 отримані повідомлення могли сягати 32 МіБ, тож нападник міг примусити виділити стільки оперативної пам’яті на одне з’єднання й, можливо, обвалити вузол. Повідомив про це користувач Bitcointalk Evil-Knievel; #5843 зменшив ліміт до 2 МіБ, згодом піднятий до 4 МБ для Segwit. Розкриття, анонсоване на 2015 рік, відклали, а подробиці оприлюднили 2024-го.
IPv6 здешевив роздування необмеженого списку банів Bitcoin Core, а кожне повідомлення GETADDR далі змушувало перебирати цей список для кожної адреси у відповіді, яких могло бути до 2500. Збій через нестачу пам’яті й навантаження на процесор, оцінені як високий рівень, усунув #19219, що вийшов у 0.20.1 і 0.21.0.
Дві помилки в обробці повідомлення version, переповнення знакового цілого й логічна вада abs64, дозволяли нападникові зсунути скоригований час жертви так, що та відкидала нові блоки як надто далекі в майбутньому. Для цього нападник мав бути серед перших 200 пірів, що підключилися. Ваду середнього рівня виправлено в Bitcoin Core 0.21.0.
Відкриття підробленого платіжного посилання BIP72 могло обвалити Bitcoin-Qt: параметр r міг указувати на величезний файл, і застосунок намагався виділити під нього пам’ять, поки завантаження тихо йшло у фоні. Помилка середньої серйозності зникла, коли #17165 прибрав підтримку BIP70; ця зміна увійшла до 0.20.0.
Спеціально зібрані орфанні транзакції, недійсні, але дорогі для перевірки, могли паралізувати вузол на години: кожна щойно прийнята транзакція запускала квадратичний пошук у кеші орфанних. #15644 від Pieter Wuille перериває цю роботу, щойно знайдено збіг, щоб обробити нові повідомлення. Виправлення проблеми високого рівня дійшло до користувачів у Bitcoin Core 0.18.0.
Неправильно сформоване повідомлення GETDATA могло залишати потік net_processing крутитися на 100% CPU у версіях Bitcoin Core до 0.20.0, додаючи 1,5 МБ пам’яті на кожного атакувального піра. Решту пірів вузол продовжував обслуговувати, тому рівень низький. John Newbery знайшов цю помилку й виправив її у #18808.
Заголовки, побудовані прямо на генезис-блоці, яким достатньо складності 1, обходили логіку чекпойнтів від Bitcoin Core 0.12.0 до 0.15.0, тож спамер міг необмежено роздувати mapBlockIndex і, можливо, обвалити вузол через нестачу пам’яті. Cory Fields повідомив про цю помилку середньої серйозності 2017 року, а закрив її #11028.
Одне INV із 50 000 елементів-блоків могло змусити вузол поставити в чергу 50 000 відповідей getheaders приблизно по 1 кБ, а пір, що відмовлявся їх читати, тримав заповненим буфер надсилання на 50 МБ. #18962 від John Newbery, поданий як економія трафіку, надсилав один GETHEADERS на INV й увійшов до 0.20.0.
Утримуючи відповіді на GETDATA, а потім спамлячи фальшивими оголошеннями, щоб витіснити транзакцію з карти g_already_asked_for на 50 000 записів, нападник міг оголошувати її знову й знову, не даючи жертві запитати її в когось іншого. John Newbery розкрив цю помилку середнього рівня; #19988 від Pieter Wuille виправив її в Bitcoin Core 0.21.0.
Друге переповнення буфера в miniupnpc, яке знайшов Wladimir J. Van Der Laan, спричиняло витік даних і в зв’язці з CVE-2015-6031 могло дати віддалене виконання коду: він продемонстрував це на miniupnpc 1.6-precise з Ubuntu. Його експлойт не переносився на Bitcoin Core напряму, а виправлення увійшло до версії 0.12 у лютому 2016 року.
Bitcoin Core 27.1 складається з виправлень: у GUI полагоджено підвищення комісії для непідписаних транзакцій, поле IP проксі більше не приймає порт, а GetAddedNodeInfo() тепер виявляє CJDNS-пірів з addnode (#30085). Змінилася й обробка TapMiniscript під час підписання (#29853).
Транспорт BIP324 v2 у Bitcoin Core 27.0 увімкнено типово, а новий алгоритм CoinGrinder шукає найлегший набір входів за ставок від 30 сат/вБ. Час із поправкою на мережу покидає код консенсусу на користь системного, тож операторам важливіший точний годинник. libbitcoinconsensus оголошено застарілим, вилучення заплановано на v28.
Вузли на Bitcoin Core 25.2 перестають обробляти мутовані блоки (#29412). Оновлення також виправляє segfault у getrawtransaction (#29003), use-after-free у WalletBatch::EraseRecords (#29176) і збій GUI при виборі «Mask values».
I2P-сесії в Bitcoin Core 26.1 використовують шифрування ECIES-X25519 і ElGamal (#29200), а вузол тепер пише в лог, як просувається завантаження мемпулу. Серед виправлень — відмова обробляти мутовані блоки (#29412) і гаманець, який пропускає вибір монет BnB за ввімкненого SFFO (#28994).
У Bitcoin Core 26.0 дебютує експериментальний транспорт BIP324 v2: типово вимкнений, вмикається через -v2transport. Новий RPC loadtxoutset завантажує знімки assumeutxo, і вузол стає придатним до роботи за лічені хвилини, поки початковий chainstate завершує перевірку у фоні, а submitpackage надсилає сирі транзакції в мемпул пакетом.
Застарілих оцінок комісії Bitcoin Core 24.2 більше не видає (#27622), а недійсні адреси bech32 в RPC обробляються коректно (#27727). Більшість інших змін стосується системи збирання та CI, зокрема виправлення збирання пакета Qt для macOS із лінкером Xcode 15 (#28543).
Паралельне завантаження compact block з’явилося в Bitcoin Core 25.1 (#27626). Інші виправлення стосуються збою REST на /deploymentinfo (#27853), вимкнення сервера після відключення віддаленого клієнта (#28551) та міграції гаманців, яка тепер відхиляє недійсні скрипти (#28125).
Повторне сканування дескрипторних гаманців у Bitcoin Core 25.0 прискорюється, коли через -blockfilterindex=1 доступні компактні фільтри блоків BIP158, а новий RPC scanblocks шукає за цими фільтрами. Політика ретрансляції тепер приймає транзакції від 65 байтів без witness. У режимі -blocksonly максимальна пам’ять мемпулу падає з 300 МБ до 5 МБ.
Три зміни P2P визначають Bitcoin Core 23.2: більше жодного пошкодження peers.dat (#26909), жодного передчасного очищення стану завантаження інших пірів (#27608) і швидші черги inv-to-send (#27610). Решта стосується збирання та CI, наприклад компіляції bdb за допомогою clang-16 на aarch64.