لأغراض تعليمية فقط؛ لا يشكل ذلك نصيحة استثمارية أو توصية استثمارية. قد تؤدي الاستثمارات إلى خسائر.
الإجابة المباشرة
يتنبأ CREATE2 بعنوان ينشئه عقد ناشر محدد باستخدام 32-byte salt وتجزئة init_code المطابق تماما. وصيغة البروتوكول هي address = keccak256(0xff || deployer(20 bytes) || salt(32 bytes) || keccak256(init_code))[12:]: تُهشّ مقدمة طولها 85-byte preimage وتُحتفظ بآخر 20 bytes. والناشر هو المصنع الذي ينفذ CREATE2، وليس بالضرورة المحفظة التي استدعت المصنع.
يتكون init_code من شفرة الإنشاء ومعاملات المنشئ المشفرة وفق ABI؛ يُنفذ مرة واحدة وينتج شفرة التشغيل. ويمكن لإصدار المترجم أو إعداد المحسن أو المكتبة المرتبطة أو البيانات الوصفية أو معامل المنشئ أو مدخل المصنع أن يغير التجزئة. شفرة التشغيل ناتج وليست مدخل CREATE2. ولا تُقارن العناوين إلا مع الناشر والملح وكود التهيئة وقواعد EVM وحالة السلسلة نفسها.
قد يستقبل العنوان الافتراضي أموالا قبل وجود الشفرة، لكنه لا يملك بعد منطق تحكم موثقا. التنبؤ ليس نشرا أو ملكية أو تفويضا أو نهائية أو سلامة. تحقق من شفرة المصنع وبيانات الاستدعاء والإيصال والأحداث وeth_getCode وnonce والتخزين والرصيد وتنفيذ الوكيل والمهيئ والمالك على السلسلة والكتلة المقصودين.
آلية العمل
جمّد السلسلة أو النطاق وقواعد الفرع وRPC والكتلة وعنوان المصنع وتجزئة التشغيل والملح الخام والبايتات الدقيقة للتهيئة وترميز المنشئ والمترجم والمكتبات المرتبطة. أعد حساب keccak256(init_code) ومقدمة 85-byte preimage، مع فحص حشو ABI وترتيب البايتات وchecksum واستخراج آخر 20 بايتا.
فكك بعد ذلك استدعاء المصنع والقيمة. أكد أن المصنع ومدخل الاستدعاء ونطاق الملح والمنشئ والمالك والمهيئ المقصودين مقيدة معا. في الوكيل المصغر، اهشّ شفرة إنشاء النسخة التي تحتوي عنوان التنفيذ، لا شفرة تشغيل التنفيذ. وفي الوكيل، تحقق منفصلا من التنفيذ والمسؤول وخانات التخزين وسياسة الترقية.
يفرض EIP-684 فشل الإنشاء عندما تكون nonce الوجهة غير صفرية أو تكون الشفرة غير فارغة. كما أن فشل المنشئ لا يترك نشرا ناجحا. وتعتمد افتراضات SELFDESTRUCT وإعادة النشر اللاحقة على قواعد الفرع؛ فلا تعتمد على الادعاء القديم بإمكان استبدال الشفرة دائما.
لدليل النشر طبقات: إدراج المعاملة وحالتها، ثم الأحداث، ثم الشفرة وnonce، ثم التخزين والأرصدة، ثم حالة سلسلة آمنة أو نهائية. لا يغني رد RPC الناجح أو checksum متوقع عن فحص الإيصال والحالة. وقد تملك النسخ عبر السلاسل شفرة ومالكين وتخزينا وأصولا مختلفة.
استخدم سير العمل الآتي:
- ثبّت السلسلة والفرع وRPC والكتلة، وعنوان المصنع أو الناشر وتجزئة التشغيل، وبايتات الملح، وكود التهيئة ومعاملات المنشئ والمترجم والمكتبات المرتبطة.
- احسب تجزئة كود التهيئة ومقدمة CREATE2 الدقيقة، وافحص الأحجام والحشو و
0xffوآخر 20 بايتا وchecksum. - فكك بيانات استدعاء المصنع والقيمة؛ وقارن العنوان المتوقع والمالك والمهيئ وهدف الوكيل والصلاحيات المقصودة.
- تحقق من الإيصال والحالة والأحداث و
eth_getCodeوnonce والرصيد والتخزين على السلسلة الصحيحة؛ وسجل حالات عدم النشر والتصادم. - افحص افتراضات المصنع والوكيل والتنفيذ والمسؤول والمهيئ والترقية والمصنع المفرد، بما فيها أهداف ERC-1167.
- اختبر فشل المنشئ وتصادم nonce أو الشفرة وإعادة النشر الحساسة للفرع والمصانع المتداخلة وافتراضات نطاق السلسلة أو إعادة التشغيل.
- قبل التمويل أو التوقيع، طابق المبالغ المقروءة بشريا والخام؛ وبعد النشر راقب تجزئة الشفرة والمالك والتنفيذ والأدوار والأحداث والنهائية.
أمثلة
- متجه EIP-1014: الناشر
0x0000000000000000000000000000000000000000والملح صفري بالكامل وinit0x00تعطي0x4D1A2e2bB4F88F0250f26Ffff098B0b30B26BF38. - ارتباط المنشئ: مع تثبيت الناشر والملح، يؤدي تغيير معامل منشئ واحد مشفر ABI إلى تغيير
keccak256(init_code)ومن ثم العنوان المتوقع؛ أما هش شفرة التشغيل فيتحقق من الكائن الخطأ. - التصادم: إذا كانت nonce الوجهة أكبر من
0أو كانت شفرتها غير فارغة، فيجب أن يفشل CREATE2 وفق EIP-684. والعنوان الممول ذو الشفرة والnonce الصفريين افتراضي فقط وغير موثق. - الوكيل المصغر: يهش عنوان نسخة ERC-1167 شفرة إنشاء النسخة التي تحتوي عنوان التنفيذ. أما هش شفرة تشغيل التنفيذ فينتج تنبؤا لا علاقة له بالعنوان.
المخاطر
- استخدام مصنع أو ناشر خاطئ.
- خطأ في عرض الملح أو حشوه أو ترتيب بايتاته أو نطاقه.
- الخلط بين كود التهيئة وشفرة التشغيل.
- حذف معاملات المنشئ أو ترتيبها خطأ.
- اختلاف مدخل المصنع أو القيمة أو بيانات الاستدعاء.
- عدم تطابق هدف الوكيل أو التفويض مع التنفيذ المقصود.
- اختلاف السلسلة أو الفرع أو نطاق EVM.
- تصادم بسبب nonce موجودة.
- تصادم بسبب شفرة موجودة.
- الاعتماد على افتراضات قديمة عن SELFDESTRUCT وإعادة النشر.
- تغير الناشر الفعلي في CREATE2 متداخل.
- خلط صيغتي CREATE وCREATE2.
- عدم فحص هدف التنفيذ في ERC-1167.
- عدم التحقق من عنوان المصنع المفرد وافتراضات نشره.
- تغيير السلوك عبر ترقية التنفيذ أو تحكم المسؤول.
- اختلاف المترجم أو البيانات الوصفية أو المكتبة أو المصدر.
- الخلط بين الإيصال والذاكرة المؤقتة وفشل المعاملة والنهائية.
- إخفاء عنوان خاطئ عبر checksum أو واجهة مضللة.
- أموال ممولة مسبقا بلا إثبات ملكية منطق العنوان الافتراضي.
- خطأ في EIP-7702 أو إعادة التشغيل أو الغاز أو حجب الخدمة أو المراقبة القديمة.
مفاهيم خاطئة شائعة
- “العنوان الفارغ آمن أو مملوك.” قد لا يملك شفرة أو متحكما موثقا.
- “الملح وحده يحدد العنوان.” الناشر وتجزئة كود التهيئة مرتبطان به بالقدر نفسه.
- “CREATE2 يهش شفرة التشغيل.” بل يهش كود الإنشاء، بما فيه معاملات المنشئ.
- “العنوان نفسه على سلسلتين يعني الشفرة والتحكم نفسيهما.” يجب فحص حالة كل سلسلة ونشرها مستقلا.
- “التنبؤ الناجح يثبت النشر والسلامة.” لا تثبت الموجودات إلا الإيصال والشفرة والحالة والصلاحيات والنهائية.
موضوعات ذات صلة
المصادر
- EIP-1014: Skinny CREATE2 - Ethereum Improvement Proposals (تم الوصول: 2026-08-13)
- EIP-684: Revert creation in case of collision - Ethereum Improvement Proposals (تم الوصول: 2026-08-13)
- Salted contract creations / CREATE2 - Solidity (تم الوصول: 2026-08-13)
- ERC-1167: Minimal Proxy Contract - Ethereum Improvement Proposals (تم الوصول: 2026-08-13)
- ERC-2470: Singleton Factory - Ethereum Improvement Proposals (تم الوصول: 2026-08-13)
- Create2 - OpenZeppelin (تم الوصول: 2026-08-13)
- EIP-155: Simple replay attack protection - Ethereum Improvement Proposals (تم الوصول: 2026-08-13)
- Contract Metadata - Solidity (تم الوصول: 2026-08-13)