Lição 1

إدارة وترقية عقود الأصول الاصطناعية

من خلال هذا الدرس، ستكتسب الخبرة اللازمة لإدارة عقود الأصول الاصطناعية وترقيتها، مما يضمن بقاءها قابلة للتكيف مع المتطلبات المتطورة مع الحفاظ على سلامة وأمن العقد. ستكون هذه المعرفة التأسيسية مفيدة عندما نتعمق في الجوانب الأكثر تقدمًا لإدارة الأصول الاصطناعية في الدروس اللاحقة.

مع شروعنا في هذا الجزء المتقدم من الدورة التدريبية، دعونا نتوقف لحظة لإعادة النظر في عقد الأصول الاصطناعية الذي طورناه في الجزء الأول. يعتبر هذا العقد بمثابة الأساس الذي سنبني عليه فهمنا لإدارة العقود الذكية وترقيتها.

خلاصة عقد الأصول الاصطناعية

فيما يلي عقد الأصول الاصطناعية الذي قمنا بتنفيذه سابقًا. يسهل هذا العقد إنشاء الأصول الاصطناعية وإدارتها والتفاعل معها على البلوكشين.

الصلابة
//معرف ترخيص SPDX: معهد ماساتشوستس للتكنولوجيا
صلابة البراغما ^0.8.0؛

عقد الأصول الاصطناعية {
 uint256 سعر الأصول الأساسية العامة؛
 uint256 الضمانات العامة؛
 عنوان المالك العام؛
 رسم الخرائط (العنوان = > uint256) التوازن التركيبي العام؛
 uint256 إجمالي الإمدادات الاصطناعية العامة؛

 المُنشئ () {
        owner = msg.sender;
    }

    المُعدِّل أونليونر () {
        require(msg.sender == owner, "Not the contract owner");
        _;
    }

    سعر تحديث الوظيفة (uint256 _price) (متاح للجمهور فقط) المالك {
        underlyingAssetPrice = _price;
    }

    وظيفة ضمان الإيداع (uint256 _amount) العامة {
        collateral += _amount;
    }

    وظيفة سحب الضمانات (uint256 _amount) العامة {
        require(collateral >= _amount, "Insufficient collateral");
        collateral -= _amount;
    }

    دالة getSyntheticassetPrice () عوائد العرض العام (uint256) {
        return underlyingAssetPrice;
    }

    الوظيفة: الأصول الاصطناعية (uint256 _amount) العامة {
        require(collateral >= _amount, "Insufficient collateral");
        syntheticBalance[msg.sender] += _amount;
        totalSyntheticSupply += _amount;
        collateral -= _amount;
    }

    وظيفة استرداد الأصول الاصطناعية (uint256 _amount) عامة {
        require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
        syntheticBalance[msg.sender] -= _amount;
        totalSyntheticSupply -= _amount;
        collateral += _amount;
    }
}

الآن، مع فهم جديد لعقدنا التأسيسي، دعونا نتعمق في جوانب إدارة وترقية عقود الأصول الاصطناعية.

ملكية العقد

  • يضمن إنشاء ملكية العقد أن الكيانات المعتمدة فقط يمكنها تعديل العقد.
  • يعد تطبيق معدل مثل OnlyOwner لتقييد الوصول إلى وظائف معينة ممارسة شائعة.

أنماط الترقية

  • فهم أنماط الترقية المختلفة مثل الوكيل والتخزين الأبدي وDelegateCall.
  • استكشاف إيجابيات وسلبيات كل نمط لاختيار الأنسب لعقدك.

عقود البروكسي

  • الخوض في عقود الوكيل التي تسمح بتحديث منطق العقد مع الحفاظ على سلامة البيانات.
  • تنفيذ عقد بروكسي بسيط لتوضيح عملية الترقية.
الصلابة
وكيل العقد {
 معالجة التنفيذ العام؛

 تنفيذ ترقية الوظيفة (العنوان _التنفيذ الجديد) (متاح للجمهور فقط) المالك {
        implementation = _newImplementation;
    }

    fallback () المدفوعات الخارجية {
 العنوان الضمني = التنفيذ؛
 التجميع {
 المنفذ الأيسر: = تحميل (0x40)
 نسخ بيانات الاتصال (ptr، 0، حجم بيانات الاتصال ())
 السماح بالنتيجة: = استدعاء المفوض (gas ()، impl، ptr، calldatasize ()، 0، 0)
 حجم السماح: = إرجاع حجم البيانات ()
 نسخة بيانات الإرجاع (ptr، 0، الحجم)
 نتيجة التبديل
 الحالة 0 { revert(ptr, size) }
            الافتراضي { return(ptr, size) }
        }
    }
}

تعيين الإصدار

  • تنفيذ التحكم في الإصدار لتتبع ترقيات العقد.
  • استخدام الإصدار الدلالي للإشارة إلى نوع التغييرات في كل ترقية.

ترقيات الاختبار

  • التأكد من أن الترقيات لا تؤدي إلى حدوث أخطاء أو تغيير الوظائف المقصودة.
  • اختبار الترقيات في بيئة خاضعة للرقابة قبل نشرها على الشبكة الرئيسية.
    فيما يلي كيفية رعاية نظامنا بعد دمج عقد بروكسي للترقيات:
الصلابة
//معرف ترخيص SPDX: معهد ماساتشوستس للتكنولوجيا
صلابة البراغما ^0.8.0؛

وكيل العقد {
 معالجة التنفيذ العام؛
 عنوان المالك العام؛

 المُنشئ () {
        owner = msg.sender;
    }

    المُعدِّل أونليونر () {
        require(msg.sender == owner, "Not the contract owner");
        _;
    }

    تنفيذ ترقية الوظيفة (العنوان _التنفيذ الجديد) (متاح للجمهور فقط) المالك {
        implementation = _newImplementation;
    }

    fallback () المدفوعات الخارجية {
 العنوان الضمني = التنفيذ؛
 التجميع {
 المنفذ الأيسر: = تحميل (0x40)
 نسخ بيانات الاتصال (ptr، 0، حجم بيانات الاتصال ())
 السماح بالنتيجة: = استدعاء المفوض (gas ()، impl، ptr، calldatasize ()، 0، 0)
 حجم السماح: = إرجاع حجم البيانات ()
 نسخة بيانات الإرجاع (ptr، 0، الحجم)
 نتيجة التبديل
 الحالة 0 { revert(ptr, size) }
            الافتراضي { return(ptr, size) }
        }
    }
}

عقد الأصول الاصطناعية {
 uint256 سعر الأصول الأساسية العامة؛
 uint256 الضمانات العامة؛
 عنوان المالك العام؛
 رسم الخرائط (العنوان = > uint256) التوازن التركيبي العام؛
 uint256 إجمالي الإمدادات الاصطناعية العامة؛

 المُنشئ () {
        owner = msg.sender;
    }

    المُعدِّل أونليونر () {
        require(msg.sender == owner, "Not the contract owner");
        _;
    }

    سعر تحديث الوظيفة (uint256 _price) للجمهور فقط المالك {
        underlyingAssetPrice = _price;
    }

    وظيفة ضمان الإيداع (uint256 _amount) العامة {
        collateral += _amount;
    }

    وظيفة سحب الضمانات (uint256 _amount) العامة {
        require(collateral >= _amount, "Insufficient collateral");
        collateral -= _amount;
    }

    دالة getSyntheticassetPrice () عوائد العرض العام (uint256) {
        return underlyingAssetPrice;
    }

    الوظيفة: الأصول الاصطناعية (uint256 _amount) العامة {
        require(collateral >= _amount, "Insufficient collateral");
        syntheticBalance[msg.sender] += _amount;
        totalSyntheticSupply += _amount;
        collateral -= _amount;
    }

    وظيفة استرداد الأصول الاصطناعية (uint256 _amount) عامة {
        require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
        syntheticBalance[msg.sender] -= _amount;
        totalSyntheticSupply -= _amount;
        collateral += _amount;
    }
}

في هذا الإعداد، يعمل عقد الوكيل كبوابة لعقد SyntheticAsset ، مما يسمح بترقية تنفيذ (أي المنطق) لـ SyntheticAsset دون فقدان الحالة (أي البيانات) للعقد. يتم تحقيق ذلك من خلال الوظيفة الاحتياطية في Proxy ، والتي تفوض المكالمات إلى التنفيذ الحالي لـ SyntheticAsset ، ووظيفة UpgradeImplementation ، والتي تسمح للمالك بتغيير عنوان التنفيذ للإشارة إلى إصدار جديد من SyntheticAsset.

من خلال هذا الدرس، ستكتسب الخبرة اللازمة لإدارة عقود الأصول الاصطناعية وترقيتها، مما يضمن بقاءها قابلة للتكيف مع المتطلبات المتطورة مع الحفاظ على سلامة وأمن العقد. ستكون هذه المعرفة التأسيسية مفيدة عندما نتعمق في الجوانب الأكثر تقدمًا لإدارة الأصول الاصطناعية في الدروس اللاحقة. ابقوا على اتصال!

Isenção de responsabilidade
* O investimento em criptomoedas envolve grandes riscos. Prossiga com cautela. O curso não se destina a servir de orientação para investimentos.
* O curso foi criado pelo autor que entrou para o Gate Learn. As opiniões compartilhadas pelo autor não representam o Gate Learn.
Catálogo
Lição 1

إدارة وترقية عقود الأصول الاصطناعية

من خلال هذا الدرس، ستكتسب الخبرة اللازمة لإدارة عقود الأصول الاصطناعية وترقيتها، مما يضمن بقاءها قابلة للتكيف مع المتطلبات المتطورة مع الحفاظ على سلامة وأمن العقد. ستكون هذه المعرفة التأسيسية مفيدة عندما نتعمق في الجوانب الأكثر تقدمًا لإدارة الأصول الاصطناعية في الدروس اللاحقة.

مع شروعنا في هذا الجزء المتقدم من الدورة التدريبية، دعونا نتوقف لحظة لإعادة النظر في عقد الأصول الاصطناعية الذي طورناه في الجزء الأول. يعتبر هذا العقد بمثابة الأساس الذي سنبني عليه فهمنا لإدارة العقود الذكية وترقيتها.

خلاصة عقد الأصول الاصطناعية

فيما يلي عقد الأصول الاصطناعية الذي قمنا بتنفيذه سابقًا. يسهل هذا العقد إنشاء الأصول الاصطناعية وإدارتها والتفاعل معها على البلوكشين.

الصلابة
//معرف ترخيص SPDX: معهد ماساتشوستس للتكنولوجيا
صلابة البراغما ^0.8.0؛

عقد الأصول الاصطناعية {
 uint256 سعر الأصول الأساسية العامة؛
 uint256 الضمانات العامة؛
 عنوان المالك العام؛
 رسم الخرائط (العنوان = > uint256) التوازن التركيبي العام؛
 uint256 إجمالي الإمدادات الاصطناعية العامة؛

 المُنشئ () {
        owner = msg.sender;
    }

    المُعدِّل أونليونر () {
        require(msg.sender == owner, "Not the contract owner");
        _;
    }

    سعر تحديث الوظيفة (uint256 _price) (متاح للجمهور فقط) المالك {
        underlyingAssetPrice = _price;
    }

    وظيفة ضمان الإيداع (uint256 _amount) العامة {
        collateral += _amount;
    }

    وظيفة سحب الضمانات (uint256 _amount) العامة {
        require(collateral >= _amount, "Insufficient collateral");
        collateral -= _amount;
    }

    دالة getSyntheticassetPrice () عوائد العرض العام (uint256) {
        return underlyingAssetPrice;
    }

    الوظيفة: الأصول الاصطناعية (uint256 _amount) العامة {
        require(collateral >= _amount, "Insufficient collateral");
        syntheticBalance[msg.sender] += _amount;
        totalSyntheticSupply += _amount;
        collateral -= _amount;
    }

    وظيفة استرداد الأصول الاصطناعية (uint256 _amount) عامة {
        require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
        syntheticBalance[msg.sender] -= _amount;
        totalSyntheticSupply -= _amount;
        collateral += _amount;
    }
}

الآن، مع فهم جديد لعقدنا التأسيسي، دعونا نتعمق في جوانب إدارة وترقية عقود الأصول الاصطناعية.

ملكية العقد

  • يضمن إنشاء ملكية العقد أن الكيانات المعتمدة فقط يمكنها تعديل العقد.
  • يعد تطبيق معدل مثل OnlyOwner لتقييد الوصول إلى وظائف معينة ممارسة شائعة.

أنماط الترقية

  • فهم أنماط الترقية المختلفة مثل الوكيل والتخزين الأبدي وDelegateCall.
  • استكشاف إيجابيات وسلبيات كل نمط لاختيار الأنسب لعقدك.

عقود البروكسي

  • الخوض في عقود الوكيل التي تسمح بتحديث منطق العقد مع الحفاظ على سلامة البيانات.
  • تنفيذ عقد بروكسي بسيط لتوضيح عملية الترقية.
الصلابة
وكيل العقد {
 معالجة التنفيذ العام؛

 تنفيذ ترقية الوظيفة (العنوان _التنفيذ الجديد) (متاح للجمهور فقط) المالك {
        implementation = _newImplementation;
    }

    fallback () المدفوعات الخارجية {
 العنوان الضمني = التنفيذ؛
 التجميع {
 المنفذ الأيسر: = تحميل (0x40)
 نسخ بيانات الاتصال (ptr، 0، حجم بيانات الاتصال ())
 السماح بالنتيجة: = استدعاء المفوض (gas ()، impl، ptr، calldatasize ()، 0، 0)
 حجم السماح: = إرجاع حجم البيانات ()
 نسخة بيانات الإرجاع (ptr، 0، الحجم)
 نتيجة التبديل
 الحالة 0 { revert(ptr, size) }
            الافتراضي { return(ptr, size) }
        }
    }
}

تعيين الإصدار

  • تنفيذ التحكم في الإصدار لتتبع ترقيات العقد.
  • استخدام الإصدار الدلالي للإشارة إلى نوع التغييرات في كل ترقية.

ترقيات الاختبار

  • التأكد من أن الترقيات لا تؤدي إلى حدوث أخطاء أو تغيير الوظائف المقصودة.
  • اختبار الترقيات في بيئة خاضعة للرقابة قبل نشرها على الشبكة الرئيسية.
    فيما يلي كيفية رعاية نظامنا بعد دمج عقد بروكسي للترقيات:
الصلابة
//معرف ترخيص SPDX: معهد ماساتشوستس للتكنولوجيا
صلابة البراغما ^0.8.0؛

وكيل العقد {
 معالجة التنفيذ العام؛
 عنوان المالك العام؛

 المُنشئ () {
        owner = msg.sender;
    }

    المُعدِّل أونليونر () {
        require(msg.sender == owner, "Not the contract owner");
        _;
    }

    تنفيذ ترقية الوظيفة (العنوان _التنفيذ الجديد) (متاح للجمهور فقط) المالك {
        implementation = _newImplementation;
    }

    fallback () المدفوعات الخارجية {
 العنوان الضمني = التنفيذ؛
 التجميع {
 المنفذ الأيسر: = تحميل (0x40)
 نسخ بيانات الاتصال (ptr، 0، حجم بيانات الاتصال ())
 السماح بالنتيجة: = استدعاء المفوض (gas ()، impl، ptr، calldatasize ()، 0، 0)
 حجم السماح: = إرجاع حجم البيانات ()
 نسخة بيانات الإرجاع (ptr، 0، الحجم)
 نتيجة التبديل
 الحالة 0 { revert(ptr, size) }
            الافتراضي { return(ptr, size) }
        }
    }
}

عقد الأصول الاصطناعية {
 uint256 سعر الأصول الأساسية العامة؛
 uint256 الضمانات العامة؛
 عنوان المالك العام؛
 رسم الخرائط (العنوان = > uint256) التوازن التركيبي العام؛
 uint256 إجمالي الإمدادات الاصطناعية العامة؛

 المُنشئ () {
        owner = msg.sender;
    }

    المُعدِّل أونليونر () {
        require(msg.sender == owner, "Not the contract owner");
        _;
    }

    سعر تحديث الوظيفة (uint256 _price) للجمهور فقط المالك {
        underlyingAssetPrice = _price;
    }

    وظيفة ضمان الإيداع (uint256 _amount) العامة {
        collateral += _amount;
    }

    وظيفة سحب الضمانات (uint256 _amount) العامة {
        require(collateral >= _amount, "Insufficient collateral");
        collateral -= _amount;
    }

    دالة getSyntheticassetPrice () عوائد العرض العام (uint256) {
        return underlyingAssetPrice;
    }

    الوظيفة: الأصول الاصطناعية (uint256 _amount) العامة {
        require(collateral >= _amount, "Insufficient collateral");
        syntheticBalance[msg.sender] += _amount;
        totalSyntheticSupply += _amount;
        collateral -= _amount;
    }

    وظيفة استرداد الأصول الاصطناعية (uint256 _amount) عامة {
        require(syntheticBalance[msg.sender] >= _amount, "Insufficient synthetic balance");
        syntheticBalance[msg.sender] -= _amount;
        totalSyntheticSupply -= _amount;
        collateral += _amount;
    }
}

في هذا الإعداد، يعمل عقد الوكيل كبوابة لعقد SyntheticAsset ، مما يسمح بترقية تنفيذ (أي المنطق) لـ SyntheticAsset دون فقدان الحالة (أي البيانات) للعقد. يتم تحقيق ذلك من خلال الوظيفة الاحتياطية في Proxy ، والتي تفوض المكالمات إلى التنفيذ الحالي لـ SyntheticAsset ، ووظيفة UpgradeImplementation ، والتي تسمح للمالك بتغيير عنوان التنفيذ للإشارة إلى إصدار جديد من SyntheticAsset.

من خلال هذا الدرس، ستكتسب الخبرة اللازمة لإدارة عقود الأصول الاصطناعية وترقيتها، مما يضمن بقاءها قابلة للتكيف مع المتطلبات المتطورة مع الحفاظ على سلامة وأمن العقد. ستكون هذه المعرفة التأسيسية مفيدة عندما نتعمق في الجوانب الأكثر تقدمًا لإدارة الأصول الاصطناعية في الدروس اللاحقة. ابقوا على اتصال!

Isenção de responsabilidade
* O investimento em criptomoedas envolve grandes riscos. Prossiga com cautela. O curso não se destina a servir de orientação para investimentos.
* O curso foi criado pelo autor que entrou para o Gate Learn. As opiniões compartilhadas pelo autor não representam o Gate Learn.