دستخط کے وقت Bitcoin Core 26.2 اب یہ فرض نہیں کرتا کہ TapMiniscript درست ہے (#29853)، غلط پیرامیٹرز پر getnetworkhashps ایرر دیتا ہے (#28554) اور setmocktime کی زیادہ سے زیادہ حد لاگو ہو گئی ہے (#29869)۔ بلڈز miniupnpc 2.2.8 کے ساتھ بھی چلتے ہیں۔
Bitcoin Core 0.10.1 سے پہلے موصول ہونے والے پیغامات 32 MiB تک پہنچ سکتے تھے، یعنی حملہ آور ہر کنکشن پر اتنی RAM مختص کروا کر نوڈ کو شاید کریش بھی کر سکتا تھا۔ رپورٹ Bitcointalk کے صارف Evil-Knievel کی تھی؛ #5843 نے حد 2 MiB کر دی، جو بعد میں Segwit کے لیے 4 MB ہوئی۔ 2015 کے لیے اعلان شدہ انکشاف ملتوی ہوا اور تفصیلات 2024 میں سامنے آئیں۔
IPv6 نے Bitcoin Core کی بے حد بین لسٹ کو پھلانا سستا بنا دیا تھا، پھر ہر GETADDR پیغام پر لوٹائے جانے والے ہر ایڈریس کے لیے، جو 2500 تک ہو سکتے ہیں، اسی فہرست کو کھنگالنا پڑتا۔ High درجے کی میموری کریش اور CPU کا ضیاع، دونوں #19219 نے ٹھیک کیے، جو 0.20.1 اور 0.21.0 میں جاری ہوا۔
version پیغام کی ہینڈلنگ کے دو بگز، signed integer اوور فلو اور abs64 کی منطقی غلطی، سے حملہ آور متاثرہ نوڈ کا adjusted time اتنا بگاڑ سکتا تھا کہ وہ نئے بلاکس کو حد سے زیادہ مستقبل کی تاریخ والا سمجھ کر رد کر دے۔ اس کے لیے حملہ آور کو پہلے جڑنے والے 200 پیئرز میں ہونا ضروری تھا۔ Medium درجے کی یہ خامی Bitcoin Core 0.21.0 میں دور ہوئی۔
جعلی BIP72 پیمنٹ لنک کھولنے پر Bitcoin-Qt کریش ہو سکتا تھا: اس کا r پیرامیٹر کسی بہت بڑی فائل کی طرف اشارہ کرتا، ایپ پس منظر میں خاموشی سے ڈاؤن لوڈ کرتے ہوئے اس کے لیے میموری مختص کرنے کی کوشش کرتی۔ Medium شدت کا یہ بگ اس وقت ختم ہوا جب #17165 نے BIP70 سپورٹ ہٹا دی، جو 0.20.0 میں شامل ہوئی۔
تیار کردہ orphan ٹرانزیکشنز، جو غلط تو تھیں مگر جانچ میں مہنگی، نوڈ کو گھنٹوں اٹکا سکتی تھیں، کیونکہ ہر نئی قبول شدہ ٹرانزیکشن orphan کیش میں quadratic تلاش چھیڑ دیتی تھی۔ Pieter Wuille کا #15644 میچ ملتے ہی یہ کام روک کر نئے پیغامات سنبھالتا ہے۔ High شدت کی یہ درستی Bitcoin Core 0.18.0 کے ساتھ صارفین تک پہنچی۔
0.20.0 سے پہلے کے Bitcoin Core ورژنز میں خراب GETDATA پیغام net_processing تھریڈ کو 100% CPU پر گھماتا رہتا اور ہر حملہ آور پیئر کے حساب سے 1.5 MB میموری بڑھا دیتا۔ باقی پیئرز کو سروس ملتی رہی، اسی لیے درجہ Low رہا۔ بگ John Newbery نے ڈھونڈا اور #18808 میں ٹھیک کیا۔
genesis بلاک پر براہِ راست بنے ہیڈرز، جنہیں صرف difficulty 1 درکار تھی، Bitcoin Core 0.12.0 سے 0.15.0 تک چیک پوائنٹ لاجک سے بچ نکلتے تھے، چنانچہ اسپامر mapBlockIndex کو بے حد بڑھا کر نوڈ کی میموری ختم اور شاید اسے کریش بھی کر سکتا تھا۔ Medium درجے کا یہ بگ Cory Fields نے 2017 میں رپورٹ کیا اور #11028 نے بند کیا۔
50,000 بلاک آئٹمز سے بھرا ایک INV نوڈ سے تقریباً 1 kB کے 50,000 getheaders جوابات قطار میں لگوا سکتا تھا، اور انہیں نہ پڑھنے والا پیئر 50 MB کا send بفر بھرا رکھتا۔ John Newbery کا #18962، جسے بینڈوڈتھ کی بچت کے طور پر پیش کیا گیا تھا، ہر INV پر ایک GETHEADERS بھیجتا ہے اور 0.20.0 میں شامل ہوا۔
حملہ آور GETDATA کا جواب روک کر اور جعلی اعلانات کی بھرمار سے 50,000 اندراجات والے g_already_asked_for میپ سے ٹرانزیکشن نکلوا کر اسے بار بار دوبارہ اعلان کر سکتا تھا، اور متاثرہ نوڈ کسی اور سے وہ ٹرانزیکشن مانگ ہی نہ پاتا۔ Medium درجے کے اس بگ کا انکشاف John Newbery نے کیا؛ Pieter Wuille کے #19988 نے اسے Bitcoin Core 0.21.0 میں ٹھیک کیا۔
miniupnpc میں دوسرا بفر اوور فلو Wladimir J. Van Der Laan نے ڈھونڈا، جو ڈیٹا لیک کرتا تھا اور CVE-2015-6031 کے ساتھ جوڑ کر ریموٹ کوڈ ایگزیکیوشن تک لے جا سکتا تھا؛ انہوں نے Ubuntu کے miniupnpc 1.6-precise پر اس کا عملی مظاہرہ کیا۔ ان کا ایکسپلائٹ Bitcoin Core پر سیدھا نہیں چلتا تھا، اور فروری 2016 میں ورژن 0.12 نے خامی دور کر دی۔
بگ فکسز ہی Bitcoin Core 27.1 کا اصل مواد ہیں: GUI میں غیر دستخط شدہ ٹرانزیکشنز کا fee bump ٹھیک ہوا، پراکسی IP کا خانہ اب پورٹ قبول نہیں کرتا، اور GetAddedNodeInfo() اب addnode CJDNS پیئرز پہچانتا ہے (#30085)۔ دستخط کے دوران TapMiniscript کی ہینڈلنگ بھی بدلی ہے (#29853)۔
BIP324 v2 ٹرانسپورٹ Bitcoin Core 27.0 میں ڈیفالٹ طور پر فعال ہو گئی، اور نیا CoinGrinder الگورتھم 30 sat/vB اور اس سے اوپر کے فیس ریٹ پر سب سے ہلکا ان پٹ سیٹ ڈھونڈتا ہے۔ کنسینسس کوڈ میں نیٹ ورک ایڈجسٹڈ ٹائم کی جگہ سسٹم ٹائم نے لے لی، اس لیے آپریٹرز کے لیے درست گھڑی اور ضروری ہو گئی۔ libbitcoinconsensus متروک قرار پایا ہے اور v28 میں اسے ہٹانے کا منصوبہ ہے۔
Bitcoin Core 25.2 پر چلنے والے نوڈ اب میوٹیٹڈ بلاکس پراسیس نہیں کرتے (#29412)۔ اپ ڈیٹ میں getrawtransaction کا segfault (#29003)، WalletBatch::EraseRecords میں use-after-free (#29176) اور “Mask values” چننے پر GUI کا کریش بھی ٹھیک ہوا۔
I2P سیشنز Bitcoin Core 26.1 میں ECIES-X25519 اور ElGamal دونوں انکرپشن استعمال کرتے ہیں (#29200)، اور میم پول لوڈ ہوتے وقت نوڈ پیش رفت لاگ میں لکھتا ہے۔ اصلاحات میں میوٹیٹڈ بلاکس پراسیس کرنے سے انکار (#29412) اور SFFO فعال ہونے پر والٹ کا BnB coin selection چھوڑ دینا (#28994) شامل ہیں۔
تجرباتی BIP324 v2 ٹرانسپورٹ پہلی بار Bitcoin Core 26.0 میں آئی ہے، جو ڈیفالٹ طور پر بند ہے اور -v2transport سے چلتی ہے۔ نیا loadtxoutset RPC کمانڈ assumeutxo اسنیپ شاٹس لوڈ کرتی ہے، یوں چند منٹ میں قابلِ استعمال نوڈ مل جاتا ہے جبکہ اصل chainstate پس منظر میں اپنی توثیق پوری کرتا رہتا ہے؛ submitpackage خام ٹرانزیکشنز کو پیکیج کی صورت میں میم پول کو بھیجتی ہے۔
پرانے فیس تخمینے اب Bitcoin Core 24.2 سے نہیں ملتے (#27622)، اور غلط bech32 ایڈریسز کی RPC ہینڈلنگ درست ہو گئی ہے (#27727)۔ باقی تبدیلیاں زیادہ تر بلڈ سسٹم اور CI کی ہیں، جن میں Xcode 15 لنکر کے ساتھ macOS Qt پیکیج کی بلڈ کا حل (#28543) بھی ہے۔
compact blocks کا متوازی ڈاؤن لوڈ Bitcoin Core 25.1 میں آ گیا (#27626)۔ دیگر اصلاحات میں /deploymentinfo پر REST کا کریش (#27853)، ریموٹ کلائنٹ کے منقطع ہونے کے بعد سرور کا بند ہونا (#28551) اور والٹ کی منتقلی شامل ہیں، جو اب غلط اسکرپٹس قبول نہیں کرتی (#28125)۔
descriptor والٹ کی ری اسکین Bitcoin Core 25.0 میں تیز ہو گئی ہے بشرطیکہ -blockfilterindex=1 کے ذریعے BIP158 compact block فلٹر دستیاب ہوں، اور نیا scanblocks RPC انہی فلٹرز میں تلاش کرتا ہے۔ ریلے پالیسی اب 65 non-witness بائٹس اور اس سے بڑی ٹرانزیکشنز قبول کرتی ہے۔ -blocksonly میں میم پول کی زیادہ سے زیادہ میموری 300MB سے گھٹ کر 5MB رہ گئی ہے۔
P2P کی تین تبدیلیاں Bitcoin Core 23.2 کا مرکز ہیں: peers.dat کی خرابی کا خاتمہ (#26909)، دوسرے پیئرز کی ڈاؤن لوڈ اسٹیٹ کا وقت سے پہلے صاف نہ ہونا (#27608) اور تیز تر inv-to-send قطاریں (#27610)۔ باقی کام بلڈ اور CI کا ہے، جیسے aarch64 پر clang-16 سے bdb کی کمپائل۔