Hardhat-deploy: تحتاج عقود الوكيل إلى نوع من التحقق من الصحة

تم إنشاؤها على ٢٤ يونيو ٢٠٢١  ·  2تعليقات  ·  مصدر: wighawag/hardhat-deploy

في الوقت الحالي ، إذا حاولت نشر عقد وكيل مع تنفيذ به بنية غير صالحة ، فسيظل ينجح.
على سبيل المثال ، سينشر هذا العقد بشكل جيد:

contract Foo {
  uint public b;
  uint public c = 5;

  constructor(a uint) { 
    b = a; 
  }
}

لكن هذا العقد غير صالح عند نشره من وكيل. نظرًا لأن أي خادم وكيل يتم ترحيله إلى هذا التطبيق لن يحتوي على مجموعة متغيرات c أو b . أعتقد أنه يجب أن يظهر خطأ هنا إذا حاول المستخدم نشر هذا أو على الأقل نوع من التحذير.

التعليق الأكثر فائدة

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

التنفيذ القديم:

contract Foo { 
  uint public b = 5;
};

التنفيذ الجديد:

// Incorrect
contract Bar { 
  uint public c; // Collision here! - value is actually set to 5 not 0
}

// Correct
contract Bar {
  uint public b; // value is 5 as expected
  uint public c; // value is 0
}

قد يكون من المفيد أن يكون لديك وظيفة تتحقق من أن العقد الجديد لا يتعارض مع تخزين العقود القديمة وأنها ترقية صحيحة للوكيل.

// Checks if "Foo" can be upgraded to "Bar"
const isValid = deployments.isValidProxyUpgrade("Foo", "Bar");

OpenZeppelin لديه فحص مشابه ولكنه مضمّن في وظيفة النشر الخاصة به ، لذا لا فائدة هنا في النشر الثابت على الرغم من أنه من المحتمل إعادة استخدام رمز التحقق الخاص به (؟)

ال 2 كومينتر

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

التنفيذ القديم:

contract Foo { 
  uint public b = 5;
};

التنفيذ الجديد:

// Incorrect
contract Bar { 
  uint public c; // Collision here! - value is actually set to 5 not 0
}

// Correct
contract Bar {
  uint public b; // value is 5 as expected
  uint public c; // value is 0
}

قد يكون من المفيد أن يكون لديك وظيفة تتحقق من أن العقد الجديد لا يتعارض مع تخزين العقود القديمة وأنها ترقية صحيحة للوكيل.

// Checks if "Foo" can be upgraded to "Bar"
const isValid = deployments.isValidProxyUpgrade("Foo", "Bar");

OpenZeppelin لديه فحص مشابه ولكنه مضمّن في وظيفة النشر الخاصة به ، لذا لا فائدة هنا في النشر الثابت على الرغم من أنه من المحتمل إعادة استخدام رمز التحقق الخاص به (؟)

مطلوب بالتأكيد :) ، تم ذكر هذا أيضًا هنا: https://github.com/wighawag/hardhat-deploy/issues/65

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات