L’implementazione di riferimento di Bitcoin. Il suo sito pubblica gli annunci delle nuove versioni, gli avvisi di sicurezza e le dichiarazioni del progetto.
In fase di firma Bitcoin Core 26.2 non dà più per scontato che un TapMiniscript sia sano (#29853), getnetworkhashps restituisce un errore con parametri non validi (#28554) e setmocktime ha un massimo obbligatorio (#29869). La build funziona anche con miniupnpc 2.2.8.
Prima di Bitcoin Core 0.10.1 i messaggi ricevuti potevano arrivare a 32 MiB, quindi un attaccante poteva imporre un'allocazione di RAM di quella misura per ogni connessione e forse mandare in crash il nodo. La segnalazione è dell'utente di Bitcointalk Evil-Knievel; la #5843 ha ridotto il limite a 2 MiB, poi alzato a 4 MB per Segwit. La divulgazione annunciata per il 2015 è slittata e i dettagli sono usciti nel 2024.
IPv6 rendeva economico gonfiare la ban list senza limiti di Bitcoin Core, e ogni messaggio GETADDR obbligava poi a scorrerla per ciascun indirizzo restituito, fino a 2500. Di gravità Alta, il crash per esaurimento della memoria e il drenaggio di CPU sono stati corretti entrambi dalla #19219, rilasciata nella 0.20.1 e nella 0.21.0.
Due bug nella gestione del messaggio version, un overflow di intero con segno e un errore logico in abs64, consentivano a un attaccante di falsare l'adjusted time della vittima fino a farle rifiutare i nuovi blocchi perché datati troppo nel futuro. L'attaccante doveva figurare tra i primi 200 peer connessi. La falla, di gravità Media, è stata corretta in Bitcoin Core 0.21.0.
Aprire un link di pagamento BIP72 fasullo poteva mandare in crash Bitcoin-Qt: il parametro r poteva puntare a un file enorme, e l'app tentava di allocare memoria per contenerlo mentre il download procedeva in silenzio in background. Il bug, di gravità Media, è sparito quando la #17165 ha rimosso il supporto a BIP70, con la 0.20.0.
Transazioni orfane costruite ad arte, invalide ma costose da validare, potevano bloccare un nodo per ore, perché ogni nuova transazione accettata innescava una ricerca quadratica nella cache degli orfani. La #15644 di Pieter Wuille interrompe quel lavoro per gestire i nuovi messaggi appena trova una corrispondenza. La correzione, di gravità Alta, è arrivata agli utenti con Bitcoin Core 0.18.0.
Nelle versioni di Bitcoin Core precedenti alla 0.20.0, un messaggio GETDATA malformato poteva tenere il thread net_processing in ciclo al 100% di CPU, aggiungendo 1,5 MB di memoria per ogni peer attaccante. Gli altri peer continuavano a essere serviti, da qui la classificazione Bassa. John Newbery ha trovato il bug e lo ha corretto nella #18808.
Gli header costruiti direttamente sul blocco genesi, che richiedono solo difficoltà 1, sfuggivano alla logica dei checkpoint da Bitcoin Core 0.12.0 fino alla 0.15.0: uno spammer poteva così far crescere mapBlockIndex senza limiti e magari mandare in crash il nodo per esaurimento della memoria. Cory Fields ha segnalato il bug, di gravità Media, nel 2017, e la #11028 lo ha chiuso.
Un solo INV con 50.000 voci di blocco poteva costringere un nodo ad accodare 50.000 risposte getheaders da circa 1 kB l'una, e un peer che si rifiutava di leggerle teneva pieno quel buffer di invio da 50 MB. La #18962 di John Newbery, presentata come risparmio di banda, ha portato a un solo GETHEADERS per INV ed è arrivata con la 0.20.0.
Negando le risposte GETDATA e poi inondando la vittima di annunci fasulli per espellere una transazione dalla mappa g_already_asked_for da 50.000 voci, un attaccante poteva riannunciarla all'infinito e impedire alla vittima di chiederla ad altri. John Newbery ha reso noto il bug, di gravità Media; l'ha corretto la #19988 di Pieter Wuille in Bitcoin Core 0.21.0.
Un secondo buffer overflow in miniupnpc, scoperto da Wladimir J. Van Der Laan, faceva trapelare dati e poteva essere concatenato con la CVE-2015-6031 per eseguire codice da remoto, come lui stesso ha dimostrato sul miniupnpc 1.6-precise di Ubuntu. Il suo exploit non era direttamente trasferibile a Bitcoin Core, e la correzione è arrivata con la versione 0.12 nel febbraio 2016.
Correzioni di bug e poco altro in Bitcoin Core 27.1: nella GUI torna a funzionare il fee bump per le transazioni non firmate, il campo dell'IP del proxy non accetta più una porta, e GetAddedNodeInfo() ora rileva i peer CJDNS aggiunti con addnode (#30085). Cambia anche la gestione di TapMiniscript in fase di firma (#29853).
Il trasporto BIP324 v2 diventa predefinito in Bitcoin Core 27.0, e il nuovo algoritmo CoinGrinder cerca l'insieme di input più leggero con feerate da 30 sat/vB in su. Nel codice di consenso il tempo corretto dalla rete lascia il posto al tempo di sistema, per cui un orologio preciso conta di più per chi gestisce un nodo. libbitcoinconsensus è deprecata e la rimozione è prevista per la v28.
I nodi con Bitcoin Core 25.2 smettono di elaborare i blocchi mutati (#29412). L'aggiornamento corregge anche un segfault di getrawtransaction (#29003), un use-after-free in WalletBatch::EraseRecords (#29176) e un crash della GUI selezionando «Mask values».
Le sessioni I2P di Bitcoin Core 26.1 usano sia ECIES-X25519 sia ElGamal (#29200), e il nodo ora registra nel log l'avanzamento del caricamento della mempool. Tra le correzioni, il rifiuto di elaborare blocchi mutati (#29412) e il wallet, che ora salta la coin selection BnB quando SFFO è attivo (#28994).
Debutta in via sperimentale il trasporto BIP324 v2 in Bitcoin Core 26.0, spento di default e attivabile con -v2transport. La nuova RPC loadtxoutset carica gli snapshot assumeutxo, dando un nodo utilizzabile in pochi minuti mentre il chainstate originale completa la validazione in background, e submitpackage invia alla mempool transazioni grezze come pacchetto.
Bitcoin Core 24.2 non fornisce più stime delle commissioni obsolete (#27622) e corregge la gestione RPC degli indirizzi bech32 non validi (#27727). Il resto tocca soprattutto build system e CI, compresa una correzione per la build del pacchetto Qt su macOS con il linker di Xcode 15 (#28543).
Download paralleli dei compact block in Bitcoin Core 25.1 (#27626). Altre correzioni riguardano un crash REST su /deploymentinfo (#27853), lo spegnimento del server dopo la disconnessione di un client remoto (#28551) e la migrazione dei wallet, che ora rifiuta gli script non validi (#28125).
Si velocizzano i rescan dei descriptor wallet in Bitcoin Core 25.0 quando sono disponibili i compact block filter BIP158 tramite -blockfilterindex=1, e una nuova RPC scanblocks cerca in quei filtri. La policy di relay accetta ora transazioni a partire da 65 byte non-witness. Con -blocksonly, la memoria massima della mempool scende da 300MB a 5MB.
Tre modifiche P2P sono il cuore di Bitcoin Core 23.2: basta corruzione di peers.dat (#26909), niente azzeramento prematuro dello stato di download degli altri peer (#27608) e code inv-to-send più rapide (#27610). Il resto è lavoro su build e CI, come la compilazione di bdb con clang-16 su aarch64.