- روز گذشته جدیدترین نسخه از نرمافزار هستهی بیت کوین با شمارهی 0.19.0 به صورت عمومی معرفی شد. از آنجا که توسعهدهندگان هستهی بیت کوین تغییرات عدیده و مهمی در این بروزرسانی ارائه کردهاند، در این مقاله قصد داریم به بررسی و توضیح برخی از مهمترین تغییرات و بهبودهای صورت گرفته در این نسخه بپردازیم.
جدیدترین نسخهی هستهی بیت کوین
روز گذشته ۲۴ام نوامبر ۲۰۱۹، نسخهی جدید کلاینت هستهی بیت کوین منتشر شد. Bitcoin Core 0.19.0 در واقع نوزدهمین نسخه از کلاینت اولیهی منتشر شده توسط ساتوشی ناکاموتو برای شبکهی بیت کوین(BTC) میباشد. البته لازم به ذکر است که به دلیل مسائل پیش آمده قبل از انتشار نسخهی 0.19.0 نسخهی قابل دانلود توسط کاربران، دچار تغییراتی شد و اکنون با کد 0.19.0.1 قابل دانلود میباشد.
طبق گفتهی ولادمیر وندرلان(Wladimir van der Laan) یکی از توسعهدهندگان اصلی هستهی بیت کوین، این نسخهی جدید حدودا در مدت شش ماه و با همکاری بیش از صد شرکتکننده توسعه یافته است. این بروزرسانی که حاصل جمعآوری بیش از ۵۵۰ درخواست ارتقاء و پیشنهاد بهبود بیت کوین(BIP) بوده است، از لحاظ عملکرد اکنون به طیف وسیعی از پیشرفت، بروزرسانی بخشهای مختلف، رفع باگ و اشکالات و همچنین سایر تغییرات از این دست منجر شده است. در ادامهی مطلب قصد داریم تا به شکل مختصر برخی تغییرات قابل ذکر و مهم این نسخهی جدید از کلاینت بیت کوین را مورد بررسی قرار دهیم.
آدرسهای Bech32 به صورت پیش فرض در رابط کاربری گرافیکی(GUI)
قالب آدرسهای Bech32(ارائه شده در پیشنهاد ارتقاء شبکهی ۱۳۷) ابتدا در سال ۲۰۱۸ و در نسخهی 0.16.0 هستهی بیت کوین معرفی شدند، اما در حال حاضر برای اولین بار به عنوان گزینهی پیشفرض در رابط کاربری گرافیکی یا GUI کیفپول هستهی بیت کوین مورد استفاده قرار گرفتهاند.
آدرسهای Bech32 در واقع آدرسهایی هستند که با «bc1» آغاز میشوند(برخلاف آدرسهایی که با ۱ یا ۳ آغاز میشوند). از آنجا که در این نوع آدرس هیچ تمایزی بین حروف کوچک و بزرگ وجود ندارد، معمولا نسبت به نمونههای دیگر کمی طویلتر بوده و در قالب فعلی از کاراکترهای متفاوت کمتری استفاده میکنند(این کار باعث سادهتر شدن روند ذخیرهی آدرس توسط کاربران و کاهش خطاهای انسانی میشود. مثلا هنگامی که آدرس کیفپول را برای کاربر دیگری میخوانید لازم نیست که به کوچک و بزرگ بودن حروف اشاره شود). علاوه بر موارد گفته شده، آدرسهای Bech32 برای محدود کردن هرچه بیشتری اشتباهات تایپی طراحی شدهاند.
مزایای Bech32 برای سگویت
لازم به ذکر است که Bech32 در زمینهی سگویت(SegWit) هم مزایای متعددی ارائه کرده است. بعضی از کیفپولهای رمزارزی که سگویت ارائه میکنند(از جمله کیفپول هستهی بیت کوین که به صورت پیشفرض این کار را انجام میدهد) این کار را به اصطلاح با «پیچیدن» یا ادغام آن در خروجیهای P2SH انجام میدهند(آدرسهایی که با عدد ۳ آغاز میشوند). برای اینکه بتوان از چنین آدرسهایی اقدام به جابجایی و خرج کردن بیت کوین نمود، کاربران باید برای نشان دادن اینکه بیت کوین واقعا در یک خروجی سگویت نگهداری شده بخشی از کد که با نام اسکریپ بازخرید(Redeem Script) شناخته میشود را فاش کنند. حال با انتشار آدرسهای جدید Bech32 میتوان از این مرحله صرف نظر کرد. این بدان معناست که از این پس استفاده از یک خروجی سگویت به جابجایی اطلاعات و انتقال دادههای کمتری در طول شبکهی بیت کوین نیاز خواهد داشت. این کاهش ترافیک باعث میشود که تراکنشهای مربوط به یک خروجی Bech32 حتی از تراکنشهای سگویت یک خروجی P2SH نیز ارزانتر و کمهزینهتر باشد.
در حال حاضر هنوز تمامی کیفپولهای بیت کوین قادر به پشتیبانی از روند ارسال به آدرسهای Bech32 نیستند، در عوض کاربران نسخهی جدید هستهی بیت کوین همچنان قادر خواهند بود در صورت نیاز یک آدرس دریافت P2SH ایجاد کنند.
استفاده از دو اتصال خروجی اضافهی بلاک به صورت پیشفرض
هر گرهی شبکهی بیت کوین به طور معمول به چندین گرهی دیگر متصل شده و یک شبکهی نقطه به نقطه(P2P) را تشکل میدهد. در این شبکه گرهها اقدام به اشتراکگذاری بلاکها، تراکنشها و برخی دادههای مرتبط به این تراکنشها میکنند.
اما به یاد داشته باشید که همیشه امکان حمله به شبکههای نقطه به نقطه، مثلا حملات «جزءبندی» وجود دارد. اگر مهاجم بتواند کنترل تعداد زیادی از گرههای شبکهی بیت کوین را بدست بگیرد، در واقع با رهگیری تمامی ترافیک شبکهی بیت کوین، توانایی «قطع» و دستکاری بخشهای خاصی از این شبکهی رمزارزی(و حتی برخی گرههای خاص) را خواهد داشت. به عنوان مثال میتوان با انجام حملات جزءبندی باعث شد که بخش کمتر و اقلیت زنجیره نسبت به مابقی شبکهی رمزارزی ارجعیت پیدا کرده و به نوعی معتبر اعلام شود؛ که به نوبهی خود میتواند روند وقوع حملات دیگری از جمله حملات «پرداخت مضاعف» را تسهیل کند.
در صورتی که یک گرهی موجود در بخش تقسیمبندی شدهی شبکه تنها یک اتصال به یک گرهی صادق(Honest Node) در شبکهی اصلی داشته باشد، این نوع حملات دچار اختلال شده و در واقع با آن مقابله شده است. در چنین حالتی شبکه میتواند تمام تراکنشها و بلاکها را پردازش کرده و از به قدرت رسیدن اقلیت زنجیره در مقابل بخش بزرگتر، جلوگیری کند.
راه مقابله چیست؟
یکی از راههای تشخصی و مقابله با حملات جزءبندی این است که گرهها اتصالات بیشتری با یکدیگر برقرار کنند. افزایش تعداد اتصالات شبکه باعث افزایش میزان حافظه و پهنای باند مورد نیاز میشود.
در نسخهی 0.19.0 هستهی بیت کوین، به صورت پیشفرض دو اتصال به اتصالات خروجی افزوده شده است(البته به صورت هوشمندانهای این دو اتصال اضافه تنها برای بلاکهای رله مورد استفاده قرار میگیرد). لازم به ذکر است که این اتصالات افزوده شده توانایی رله و بازپخش تراکنشها و دادههای مربوط به آنها را ندارند. این افزایش تعداد اتصالات باعث شده که حداقل پهنای باند مورد نیاز افزایش یافته و روند انجام حملات جزءبندی در شبکه سختتر شود.
مخالفت با فیلترهای Bloom
هستهی بیت کوین به گونهای طراحی شده که تمامی بلاکهای شبکه را دریافت و تایید میکند، این روند در نهایت باعث شکلگیری و ایجاد گرههای کامل میشود. گرچه این روند بهینه و ایمن میباشد، اما برای دستگاههای محاسباتی کوچک و کممصرفی همچون تلفنهای همراه زیاد مناسب نیست. از این رو کیفپولهای رمزارزی توسعه یافته برای گوشیهای هوشمند(و همچنین برخی از کیفپولهای نسخهی دسکتاپ) معمولا «کلاینت سبک» محسوب میشوند. کلاینت سبک به این معناست که این کیفپولها تنها (بخشی از) دادههای مرتبط با تراکنش و بلاکهای مربوطه را دانلود میکنند.
یکی از راههای انجام این کار استفاده از فیلترهای بلوم(Bloom Filter) میباشد، که امروزه توسط چندین کیفپول رمزارزی مورد استفاده قرار گرفته است. به صورت خلاصه میتوان گفت که فیلترهای بلوم در واقع یک ترفند رمزنگاری هستند که توسط کلاینتهای سبک مورد استفاده قرار میگیرند تا به صورت تصادفی از گرههای کامل موجود در شبکه دادههای مناسب را درخواست کنند. متاسفانه، با گذشت چند سال مشخص شد که این فیلترها به نوعی باعث نقض حریم خصوصی کاربران میشوند، زیرا اساسا باعث میشوند که تمامی آدرسهای آنها برای گرههای کامل شبکه فاش شود. علاوه بر این، پشتیبانی از Bloom Filter نه تنها هیچ سودی برای گرهی کامل ندارد، بلکه باعث به هدر رفتن قدرت پردازشی و فضای ذخیرهسازی میشود.
به همین دلیل در نسخهی 0.19.0 هستهی بیت کوین، به صورت پیشفرض از درخواستهای مربوط به Bloom Filter پشتیبانی نمیشود. البته همچنان این قابلیت برای کاربران وجود دارد که در صورت نیاز قابلیت پشتیبانی از این فیلترها را فعال کرده و از آنها استفاده کنند.
البته لازم به ذکر است که برخی گرههای هستهی بیت کوین معمولا پس از انتشار نسخههای جدید کلاینت همچنان تا مدتی از نسخههای قدیمیتر استفاده میکنند، به همین جهت پشتیبانی از Bloom Filterها باز هم ادامه خواهد یافت.
افزایش پشتیبانی از فیلترهای بلاک متراکم
شاید یکی از موارد جایگزین برای فیلترهای بلوم راهحلهای جدیدی با نام فیلتر بلاک متراکم سمت مشتری(یا compact client-side block filtering) باشد که در پیشنهاد بهبود 158 مطرح شد. این راهحل به نوعی نسخهی بهبود یافته ترفند Bloom Filter میباشد. در این روش بجای اینکه کیفپولهای سبک اقدام به ساخت فیلترها و ارسال برای گرههای کامل کنند، گرههای کامل فیلتر ایجاد کرده و برای هر بلاک میفرستند. سپس کلاینتهای سبک میتوانند از این فیلترها استفاده کرده و دریابند که آیا تراکنشهای مربوط به آنها در یک بلاک اتفاق افتاده است یا خیر. در صورتی که این اتفاق رخ داده باشد، کیفپول سبک تمام بلاک را بررسی کرده و دادههای مربوط به تراکنش را از آن استخراج میکند.
در جدیدترین نسخه از نرمافزار هستهی بیت کوین به گونهای برنامهریزی شده که پشتیبانی از فیلتر بلاک متراکم سمت مشتری همچنان ادامه یابد. در حال حاضر گرههای هستهی بیت کوین میتوانند به صورت محلی اقدام به ساخت این نوع فیلترها کنند، اما کاربران نسخهی 0.19.0 هم میتوانند برای نرمافزارهایی که در گره اجرا شدهاند(مانند یک کیفپول) از طریق یک «RPC» یا «فراخوانی از راهدور» نیز باعث ساخت این فیلترها شوند.
البته لازم به ذکر است که این فیلترها هنوز برای شبکهی نقطه به نقطه قابل دسترسی نیستند. این بدان معناست که یک گرهی استفاده کننده از نسخهی 0.19.0 نرمافزار هستهی بیت کوین به صورت خودکار فیلترهای مذکور را برای سایر کیفپولهای کاربران بیت کوین ارسال نمیکند. شاید این ویژگی در بروزرسانیهای بعدی اضافه شود، و یا کاربران میتوانند از طریق نرمافزارهای سفارشی که در گرهی هستهی بیت کوین اجرا میکنند، این کار را انجام دهند.
توقف پشتیبانی از پروتکل پرداخت در رابط کاربری گرافیکی
پروتکل پرداخت(BIP 70) چند سال قبل در راستای بهبود تجربهی پرداخت و استفاده از بیت کوین طراحی شد. در صورت استفاده از این پروتکل، کاربر و فروشنده میتوانند در هنگام انجام تراکنش جزئیات و اطلاعات دیگری همچون آدرس مقصد و یا آدرس استرداد را هم اضافه کنند.
گرچه از مدتها قبل این پروتکل به رابط کاربری گرافیکی یا GUI نرمافزار هستهی بیت کوین اضافه شده است، اما این استاندارد هرگز به صورت عمومی و گسترده مورد پذیرش قرار نگرفت؛ در عوض اغلب کیفپولهای رمزارزی همچنان از طرح URI پایه برای دریافت پرداختهای خود استفاده میکنند. طرح URI پایه به معنای استفاده از یک لینک و یا کد QR قابل اسکن است، که آدرس پرداخت و هزینه را بین کاربرد و فروشنده رد و بدل میکند(تنها استثنا در این زمینه کمپانی پردازش پرداختهای رمزارزی BitPay است، که از طرح URI پشتیبانی نمیکند بلکه از یک نسخهی اصلاح شده از BIP 70 بهره میبرد).
آسیبپذیری BIP 70
شاید چیزی که از عدم پذیرش پروتکل پرداخت BIP 70 مهمتر است این موضوع باشد که این پروتکل طی سالیان گذشته از آسیبپذیریهای مربوط به امنیت و حریم خصوصی رنج برده است. از این رو، برخی از کیفپولهای رمزارزی به طور جدی پذیرش و اجراییسازی این پروتکل را رد کردهاند. هستهی بیت کوین هم از این قاعده مستثنی نیست و مدتهاست که به دنبال توقف روند پشتیبانی از BIP 70 است.
به هرحال، در نسخهی جدید هستهی بیت کوین BIP 70 به صورت پیشفرض در رابط کاربری گرافیکی قرار ندارد. کاربران نسخهی 0.19.0 باید گرهی خود را با پیکربندی خاصی تنظیم کنند تا قادر به استفاده از این ویژگی باشند.
سایر تغییرات…
علاوه بر تغییرات ذکر شده، در نسخهی 0.19.0 تغییرات و بهبودهای بسیار زیاد صورت گرفته است. به عنوان مثال اکنون میتوان بلافاصله یک گرهی سرشاخه(Pruned Node) راهاندازی کرد. این گزینه به کاربران اجازه میدهد به سادگی و با در اختیار داشتن فضای ذخیرهسازی بسیار کم و محدود، اقدام به راهاندازی گرهی بیت کوین کنند. علاوه بر این، نسخهی جدید هستهی بیت کوین شامل ویژگیهای جدیدی برای پروتکل تراکنشهای بیت کوین با امضاء یک طرفه(PSBT) است که برای معاملات چند امضاء و CoinJoin بسیار مفید خواهد بود.
به همین ترتیب، پیشرفت و بهبود زیادی در زمینهی دامنهی توصیفکنندگان کیفپول(Wallet Descriptors) صورت گرفته است، که برای برنامهنویسهای فعال در زمینهی توسعهی نرمافزارهای مرتبط با بیت کوین بسیار مفید و کاربردی خواهند بود. گرههای مجهز به نسخهی 0.19.0 نیز برای اطمینان از تسهیل پذیرش بروزرسانیهای بعدی، تراکنشهایی را پذیرش و پردازش میکنند که از نسخهی جدید سگویت استفاده میکنند.
برای کسب اطلاعات بیشتر در رابطه با تغییرات ایجاد شده در نسخهی 0.19.0 میتوانید به این لینک مراجعه نمایید.
نظر شما در رابطه با تغییرات اعمال شده در جدیدترین نسخه از کلاینت هستهی بیت کوین چیست؟ نظرات خود را با ما به اشتراک بگذارید.