پایان «کنیسترهای قفلشده»: دافینیتی پایداری متعامد پیشرفته را پیشفرض موتوکو کرد
دافینیتی «پایداری متعامد پیشرفته» (EOP) را به حالت کامپایل پیشفرض در موتوکو تبدیل کرده است. این ارتقای بزرگ کامپایلر، محدودیتهای سریالسازی را حذف کرده، از خراب شدن دادهها هنگام ارتقا جلوگیری میکند و رسماً عصر ذخیرهسازی هیت ۶۴ بیتی پایدار را در رایانه اینترنتی آغاز مینماید.
نکات کلیدی
- • دافینیتی «پایداری متعامد پیشرفته» (EOP) را به حالت کامپایل پیشفرض در موتوکو تبدیل کرده است
- • این ارتقای بزرگ کامپایلر، محدودیتهای سریالسازی را حذف کرده، از خراب شدن دادهها هنگام ارتقا جلوگیری میکند و رسماً عصر ذخیرهسازی هیت ۶۴ بیتی پایدار را در رایانه اینترنتی آغاز مینماید

پایان «کنیسترهای قفلشده»: دافینیتی پایداری متعامد پیشرفته را پیشفرض موتوکو کرد
ارتقای یک دپ (dApp) فعال روی شبکه (on-chain) اغلب یک چالش استرسزا و نیازمند صبر و دعا است. برای توسعهدهندگان رایانه اینترنتی (ICP) که با زبان موتوکو (Motoko) برنامهنویسی میکنند، بزرگترین ترس همواره رخ دادن پدیده «کنیستر قفلشده» (stuck canister) بوده است؛ یک خطای فاجعهبار که در آن، کنیستر در حین ارتقا از محدودیتهای دستورالعمل پروتکل فراتر میرود و در نتیجه، اپلیکیشن و دادههای آن برای همیشه قفل میشوند.
بنیاد دافینیتی (DFINITY Foundation) برای حل این مشکل برای همیشه، رسماً حالت کامپایل «پایداری متعامد پیشرفته» (Enhanced Orthogonal Persistence یا EOP) را به عنوان حالت پیشفرض در موتوکو معرفی کرده است. این نسخه که توسط مجموعهای جدید از ابزارهای تشخیص مهاجرت در سطح کامپایلر پشتیبانی میشود، روش حفظ وضعیت روی شبکه را به طور کامل تغییر میدهد و گلوگاههای عملکردی قدیمی را که فرآیندهای کاری توسعهدهندگان را مختل میکردند، از بین میبرد.
خداحافظی با روشهای قدیمی: گلوگاه سریالسازی
در مدل پایداری قدیمی یا «کلاسیک» موتوکو، ارتقای یک کنیستر کاری پرزحمت، ناکارآمد و چندمرحلهای بود. در طول فرآیند ارتقا (upgrade hook)، سیستم زمان اجرا (runtime) مجبور بود کل هیت پویا (حافظه اصلی) را سریالسازی کرده و آن را در حافظه پایدار وباسمبلی (WebAssembly stable memory) کپی کند، تا پس از فعال شدن کد جدید، دوباره آن را به هیت بازگردانده و از حالت سریال خارج (deserialize) کند.
این فرآیند از آسیبپذیریهای جدی رنج میبرد:
- دیوار ۲ گیگابایتی: به دلیل محدودیتهای معماری ۳۲ بیتی، ارتقاهای قدیمی به شدت به حداکثر ۲ گیگابایت داده در هیت محدود میشدند.
- تله اتمام دستورالعملها (Out-of-Instructions): برای کنیسترهای با حجم داده بالا، فرآیند سریالسازی و دسیریالسازی آنقدر سیکل مصرف میکرد که به طور معمول به محدودیتهای دستورالعمل تراکنشی ICP برخورد میکرد و باعث لغو ارتقا میشد.
- سرریز پشته فراخوانی (Call Stack Overflows): ارتقای ساختارهای بسیار تودرتو اغلب منجر به خطای سرریز پشته و توقف کامل برنامه میشد.
- تورم وضعیت (State Bloat): اشیاء تغییرناپذیرِ مشترک در هیت اغلب در طول انتقال تکرار میشدند و باعث جهشهای کاذب در مصرف حافظه میشدند.
انقلاب EOP: هیتهای پایدار بومی ۶۴ بیتی
پایداری متعامد پیشرفته (EOP) مرحله سریالسازی را به طور کامل دور میزند. با بهرهگیری از پیشنهاد پیشرفته Memory64 در وباسمبلی و پارامتر بومی wasm_memory_persistence در پروتکل ICP، سیستم زمان اجرا اکنون هیت پویا را به طور مستقیم در طول ارتقاها حفظ میکند.

هنگامی که یک کنیستر ارتقا مییابد، نسخه جدید برنامه به سادگی اجرای خود را مستقیماً از هیت پویای موجود از سر میگیرد و فوراً به ساختارهای داده سازگار با حافظه که از قبل در جای خود قرار دارند دسترسی پیدا میکند.
مزایای کلیدی EOP عبارتند از:
- ارتقای آنی: از آنجا که دادهای برای کپی، سریالسازی یا دسیریالسازی وجود ندارد، ارتقاها با تاخیری نزدیک به صفر اجرا میشوند و حداقل سیکلهای دستورالعمل را مصرف میکنند.
- فضای حافظه ۶۴ بیتی: توسعهدهندگان در نهایت میتوانند دپهای پیچیده و شیءگرا بسازند، بدون اینکه نگران برخورد با سقف ۲ گیگابایتی یا مدیریت دستی چیدمانهای حافظه بخشبندیشده مانند نواحی موتوکو (Motoko Regions) باشند.
- چیدمانهای مستقل از کامپایل (Compile-Invariant): کامپایلر موتوکو یک چیدمان حافظه پویای بلندمدت و پایدار را تعریف میکند که حتی با تغییر نسخههای نرمافزار سازگار باقی میماند.
- انتقال نوع ضمنی (Implicit Type Migration): پایداری متعامد پیشرفته دارای بررسیهای سازگاری در زمان اجرا است که امضاهای پایدار و تکامل کنیستر را تجزیه و تحلیل میکند و ارتقاهایی را که منجر به خراب شدن دادهها میشوند، با امنیت بالا رد میکند.
گام به جلو: ابزارهای تشخیصی پیشگیرانه
برای جلوگیری از خراب شدن کدهای موجود، آخرین بهروزرسانی موتوکو قابلیت «ابزارهای تشخیص مهاجرت» (migration diagnostics) را معرفی میکند. کامپایلر اکنون پایگاههای کد را در حین کامپایل اسکن میکند تا سازگاری آنها را تایید کرده و توسعهدهندگان را در انتقال از پایداری کلاسیک به EOP راهنمایی کند. برای برنامههای قدیمی که هنوز قادر به این انتقال نیستند، دافینیتی پرچم کامپایلر --legacy-persistence را معرفی کرده است تا امکان غیرفعالسازی موقت این ویژگی را فراهم کند.
با تبدیل پایداری متعامد از یک کار پرمخاطره به یک ویژگی بدون نقص در زمان اجرا، ICP جایگاه خود را به عنوان برترین بستر ابری برای برنامههای پیچیده و مبتنی بر وضعیت روی شبکه (stateful on-chain) تثبیت کرده است.
برچسبها
منابع و ارجاعات مستند
پیشنهاد مطالعه بعدی

باگ «جمعه سیزدهم»: کالبدشکافی رویداد ضرب مضاعف ckBTC

نبرد بر سر ژئوپلیتیک در وب۳: نگاهی به درون پروپوزال رد شده «سابنت G20» رایانه اینترنتی

تغییر به سرعت دوبرابر: چرا هویت اینترنتی رایانه اینترنتی به چرخه انتشار دو بار در هفته منتقل میشود
خوشتان آمد؟ مقاله بعدی را بگیرید
در خبرنامه عضو شوید تا راهنمای بعدی در ایمیلتان باشد — بدون مزاحمت، لغو عضویت در هر زمان.