در دنیای بلاکچینهای چندزنجیرهای، استقرار امن و یکپارچه قراردادهای هوشمند یک چالش بزرگ است. اتریوم تا به امروز مسیری پرچالش، اما رو بهپیشرفت را طی کرده است و حالا با معرفی کرییت فایو (CREATE5) اجرای پیشبینیپذیر و ایمن قراردادهای میانزنجیرهای را امکانپذیر کرده است. این مدل با محدودسازی «دامنه استقرار» و «اعطای مجوزها» علاوهبراینکه اجازه میدهد قراردادها در زنجیرههای مختلف بدون تداخل منتشر شوند؛ فرآیند مدیریت برای توسعهدهندگان کارآمدتر میکند. در این مطلب از میهن بلاکچین تلاش میکنیم سیر تحول استقرار قراردادهای هوشمند را روایت کنیم و نشان دهیم که CREATE5 همان قطعه گمشده در اکوسیستم میانزنجیرهای است. در این راهنما با ما همراه باشید.
آدرس قراردادها در بلاکچینهای چندزنجیرهای چطور تعیین میشوند؟
در دنیای زنجیرههای مبتنی بر ماشین مجازی اتریوم (EVM)، هر بار که یک قرارداد هوشمند مستقر میشود، بلاکچین آدرس مشخصی را به آن اختصاص میدهد. در روش قدیمی و کلاسیک کرییت (CREATE)، این آدرس بر اساس حساب کاربری استقراردهنده (Deployer) و تعداد تراکنشها یا نانس (Nonce) فعلی همان حساب محاسبه میشود. به بیان ساده، هر بار که یک توسعهدهنده قرارداد را مستقر میکند، بلاکچین به «شماره تراکنش» نگاه میکند و بر اساس آن، آدرس قرارداد را تعیین میکند.
از نظر تئوری میتوان آدرسها را برای هر نانسی از قبل پیشبینی کرد. اما مشکل زمانی جدی میشود که توسعهدهنده بخواهد همان آدرس را روی چند زنجیره مختلف داشته باشد؛ زیرا در این مدل، حفظ آدرس یکسان در زنجیرههای متفاوت مستلزم این است که دقیقا از همان نانس در همه زنجیرهها استفاده شود. اما مسئله این است که با هر تراکنشی که انجام میشود، شماره نانس افزایش مییابد و کل محاسبات را بهم میریزد. بههمین دلیل، در نسخه CREATE نمیتوان از سیاست “آدرس یکسان در همه زنجیرهها” استفاده کرد. این محدودیت، راهاندازی قراردادهای از پیش تأمین مالیشده (Pre-funded contracts)، کانالهای وضعیت (State channels) یا استقرار هماهنگ قراردادها روی چند زنجیره را دشوار میکند.
توسعهدهندگان اتریوم برای حل این چالش در نخستین گام دستور “CREATE2” را معرفی کردند. این دستور با استفاده از ترکیبی از یک مقدار ثابت (Constant)، داده تصادفی (Salt) و کد اولیه قرارداد (Init code) امکان پیشبینی آدرس قراردادهای هوشمند چندزنجیرهای را فراهم کرد. به این ترتیب، وابستگی آدرس به کیف پول استقراردهنده از میان رفت و توسعهدهندگان توانستند با استفاده مکرر از یک کیف پول واحد، آدرسهای قابل پیشبینی تولید کنند. این ویژگی، راه را برای ایدههایی مانند قراردادهای از پیش تأمین مالیشده، قراردادهای فرضی (Counterfactual contracts) و حتی ساخت آدرسهای ونیتی (Vanity addresses) و سفارشی باز کرد. بهاین ترتیب، توسعهدهندگان میتوانستند بهجای جستجوی کیف پولهای خاص و پیشتامینِ مالی آنها، از همان آدرس استقراردهنده (Deployer) استفاده کنند و با تغییر داده تصادفی، آدرسهای قابلپیشبینی و دارای الگو مانند “0x8888…” تولید کنند. با این حال، یک محدودیت اساسی کماکان باقی بود؛ وابستگی آدرس به کد اولیه قرارداد باعث میشد کوچکترین تغییر در آرگومانهای سازنده، آدرس متفاوتی ایجاد کند. این موضوع کارایی دستور CREATE2 را برای استقرارهای میانزنجیرهای (Cross-chain) که اغلب به سفارشیسازی نیاز دارند، محدود میکرد.
به همین دلیل، جامعه توسعهدهندگان سراغ طراحی دستور “CREATE3” رفت. در این نسخه، وابستگی به کد اولیه حذف شد و آدرس تنها از آدرس فکتوری (Factory) و داده تصادفی (Salt) مشتق میشد. این تحول، امکان سفارشیسازی آدرس را فراهم آورد و موجب شد که یک داده تصادفی مشخص، صرفنظر از آرگومانهای سازنده، همیشه به یک آدرس واحد در زنجیرههای مختلف منتهی شود. بهاین ترتیب، امکان استقرار هماهنگ و قابلاعتماد قراردادهای هوشمند در محیطهای چندزنجیرهای فراهم شد.
با این وجود، همچنان خلأهای مهمی بهویژه در زمینه تداخل آدرسها (Collisions)، تصاحب یا ربودن آدرس (Hijacks) و مدیریت دامنه استقرار قراردادها وجود داشت.
اینجا بود که دستور “Create5” توسط توسعهدهندگان اتریوم ایجاد شد. این دستور امکان استقرار قراردادها در یک دامنه محدود (Domain-scoped) و مجاز (Permissioned) را به زنجیرههای EVM آورد. بهاین ترتیب، حالا توسعهدهندگان میتوانند با اطمینان، قراردادهای خود را در زنجیرههای مختلف در دامنههای امن و اختصاصی مستقر کنند، بدونآنکه نگران تداخل، تصاحب یا اختلال باشند.
Create5 چیست؟
در پروژههای چندزنجیرهای قراردادها باید در آدرسهای قابل پیشبینی مستقر شوند تا بتوان روی آنها برنامهریزی و هماهنگی انجام داد. اما استفاده از فکتوریهای CREATE2 یا CREATE3 بهطور معمول مشکلاتی دارد. ازآنجاییکه در این مدلها، داده تصادفی (Salt) به صورت جهانی و بدون حفاظت تعریف میشود، مشکلات زیر را در پی دارد:
- احتمال برخورد آدرسها: اگر تیمهای مختلف به طور ناخواسته از یک داده تصادفی مشابه استفاده کنند، ممکن است قرارداد بهطور تصادفی روی همان آدرس مستقر شود.
- حملات فرانت رانینگ و تصاحب آدرس: اگر یک داده تصادفی مثلاً از طریق استقرار روی میننت عمومی شود و در معرض دید قرار بگیرد، هر توسعهدهندهای میتواند قبل از تیم اصلی همان آدرس را روی یک زنجیره جدید اجرا کند یا حتی آدرس مربوطه را تصاحب کند.
- مشکل مدیریت تیمهای بزرگ: بدون سازوکار مناسب برای مالکیت یا تعریف اپراتور، تیمهای بزرگ نمیتوانند وظیفه استقرار قراردادها را به اعضای مختلف واگذار کنند.
- نبود مکانیزمی برای هماهنگی میانزنجیرهای: هیچ سازوکار داخلی برای هماهنگی پروژههای چندزنجیرهای بزرگ وجود ندارد، بنابراین هماهنگی و مدیریت یک فرآیند پیچیده و پرخطا میشود.
دستور CREATE5 با معرفی دو مفهوم دامنهها (Domains) و مجوزها (Permissions) این چالشها را برطرف میکند، درحالیکه همزمان تولید آدرسِ قطعی و مستقل از زنجیره که در Create 3 وجود داشت، کماکان حفظ میشود.
Create5 چطور کار میکند؟
کرییت فایو (Create5) در اصل یک فکتوری است که بر پایه کتابخانه رسمی CREATE3 ساخته شده است. در این مدل درست مانند CREATE3، آدرس قراردادها به کد اولیه وابسته نیستند. این ویژگی باعث میشود بتوان یک قرارداد واحد را روی زنجیرههای مختلف در همان آدرس مستقر کرد، حتی اگر آرگومانهای سازنده در هر زنجیره متفاوت باشند. برای مثال، پارامترهایی مانند شناسه زنجیره (Chain ID)، اوراکلها یا سایر تنظیمات خاص هر زنجیره میتواند تغییر کند؛ اما آدرس قرارداد همواره ثابت باقی میماند. کرییت فایو فراتر رفته است و با اضافه کردن دو نوآوری مهم از CREATE3 متمایز شده است:
۱. دامنهها (Domains)
هر دامنه به این صورت تعریف میشود:
domain= keccak256(abi.encodePacked(owner, tag))
هر قرارداد با استفاده از یک داده تصادفی که از یک دامنه مشخص مشتق میشود، مستقر میشود. این کار باعث میشود آدرس برای هر مالک منحصربهفرد باشد، تیمها از هم جدا شوند و احتمال تداخل آدرسها بهحداقل برسد.
۲. مجوزها (Permissions)
تنها مالک دامنه یا اپراتورهای مجاز میتوانند قراردادها را تحت آن دامنه مستقر کنند. این مکانیزم تضمین میکند که حتی اگر داده تصادفی قبلا عمومی شده باشد، امکان سوءاستفاده یا تصاحب آن توسط افراد دیگر وجود نخواهد داشت.
کاربردهای دستور Create5 چیست؟
دستور Create5 صرفا برای رفع محدودیتهای فنی گذشته طراحی نشده است؛ بلکه کاربردهای گستردهای را در دنیای چندزنجیرهای امکانپذیر کرده است:
۱. استقرار میانزنجیرهای
به لطف Create5 میتوان یک قرارداد واحد را روی شبکههایی مانند اتریوم، آپتیمیزم و آربیتروم در همان آدرس مشخص مستقر کرد؛ حتی اگر آرگومانهای سازنده در هر زنجیره متفاوت باشند.
۲. هماهنگی تیمی
پروتکلهای بزرگ که چندین تیم یا اپراتور دارند، میتوانند با خیال راحت و بدون نگرانی در مورد تداخل آدرسها حق استقرار را به افراد مختلف واگذار کنند.
۳. امنیت
یکی از مشکلات جدی در مدلهای قبلی، حملات فرانت رانینگ بود؛ چراکه مهاجمان میتوانستند با استفاده از داده تصادفی عمومی، قرارداد را زودتر از تیم اصلی روی زنجیره جدید در همان آدرس موردنظر مستقر کنند. کرییت فایو با معرفی دو مفهوم دامنه و مجوز این امکان را به کلی از بین میبرد.
۴. ورود کاربر
با قابلیت پیشبینیپذیری آدرسها، توسعهدهندگان میتوانند قراردادها را قبل از استقرار، تأمین مالی کنند یا توافقات اولیه را انجام دهند. این ویژگی باعث میشود که کاربران بتوانند بلافاصله پس از استقرار با قرارداد تعامل داشته باشند.
جمعبندی
ماجرای استقرار قراردادهای هوشمند در اتریوم یک مسیر تکاملی را تا به اینجا پیموده است. در آغاز، CREATE2 معرفی شد تا آدرس قراردادها قابل پیشبینی باشند و توسعهدهندگان بتوانند بدون وابستگی به نانس یا یک آدرس واحد، قراردادها را مستقر کنند. اما وابستگی به کد اولیه قرارداد، مانع استفاده گستردهتر آن در محیطهای میانزنجیرهای میشد. جامعه اتریوم برای رفع این محدودیت CREATE3 را ارائه داد؛ در این نسخه آدرسها دیگر به کد اولیه وابسته نبودند و همین باعث شد قراردادها بتوانند در زنجیرههای مختلف روی همان آدرس ثابت مستقر شوند، حتی اگر تنظیمات یا آرگومانها تغییر میکردند.
اگرچه این اتفاق جهش بزرگی برای هماهنگی میانزنجیرهای بود؛ اما هنوز چالشهایی مانند احتمال تداخل آدرسها، حملات فرانترانینگ یا دشواری مدیریت تیمهای بزرگ وجود داشت. اینجا بود که Create5 با معرفی دامنهها و مجوزها، فضایی امن و سازمانیافته فراهم کرد تا هر تیم بتواند بدون نگرانی از تداخل یا سوءاستفاده، قراردادهایش را روی زنجیرههای مختلف در همان آدرس مشخص مستقر کند.
سیر تکامل از CREATE2 تا CREATE3 و حالا Create5 نشان میدهد که استقرار قراردادهای هوشمند در اتریوم روزبهروز امنتر، هماهنگتر و پیشبینیپذیرتر شده است. کرییت فایو همان قطعه گمشدهای است که زیرساخت قراردادهای چندزنجیرهای را تکمیل میکند.