آلية رسوم الوقود المقترحة لـ MOVE: كيف يتم حساب تكلفة التنفيذ بدقة داخل السلسلة

تصميم رسوم الوقود الأول في لغة MOVE: كيف يتم حساب رسوم الوقود داخل السلسلة؟

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

عملية

لكي يتم التنفيذ بفعالية، فإن العمليات داخل السلسلة هي:

  1. تعريف المبادئ;

  2. إعداد إطار التقييم لتحديد سعر كل تنفيذ؛

  3. لإنشاء نظام قياس رسوم الوقود وآمنة رسوم الوقود الجبرية لـ MOVE;

  4. قم باستيراد إطار تكلفة الوقود في المنبع;

  5. يجعل إطار رسوم الوقود يتمتع بوعي التخزين;

  6. مزيد من التحسين لخطة رسوم الوقود.

مبدأ

المبدأ المحدد هو:

  1. يجب أن تكون تكلفة العمليات مرتبطة مباشرة بالموارد المتاحة على الشبكة مثل CPU، الذاكرة، الشبكة، تخزين I/O واستخدام المساحة (. عندما تتحسن التقنية والعمليات، يجب أن تنخفض تكاليف الوقود المطلوبة.

  2. يجب أن يتم تحديد رسوم الوقود بواسطة إدارة داخل السلسلة، ويمكن تكوينها بسلاسة.

  3. يمكن أن تمنع رسوم الوقود هجمات DoS على مجموعة الموارد الثابتة في الشبكة، وقد تحتاج إلى التعديل السريع وفقًا لاقتراحات الحوكمة بناءً على حالة الشبكة.

  4. تعكس أسعار رسوم الوقود الرغبة في تسريع النمو والحفاظ على إمكانية الوصول إلى داخل السلسلة للجميع.

  5. تشجيع اتخاذ قرارات جيدة في التصميم - مثل إعطاء الأولوية للأمان، والتجزئة، والأحداث مثل التأكيد.

) حساب تكلفة الوقود

عندما يقدم المستخدمون المعاملة، يجب عليهم أيضًا تحديد كميتين في المعاملة:

أقصى عدد من رسوم الوقود: يقاس بوحدات رسوم الوقود. هذا هو الحد الأقصى لعدد وحدات رسوم الوقود التي يرغب المستخدم في إنفاقها لتنفيذ الصفقة.

سعر وحدة رسوم الوقود: يتم حسابه بالقاعدة الثمانية لكل وحدة رسوم وقود، حيث 1 بالقاعدة الثمانية=0.00000001 APT###=$10^{-8}$(. هذا هو سعر رسوم الوقود الذي يرغب المستخدم في دفعه.

أثناء تنفيذ العملية، سيتم فرض رسوم على المعاملة:

  1. التكلفة الثابتة، التكلفة الأساسية بالإضافة إلى الرسوم الإضافية للمعاملات الكبيرة.

  2. تكلفة التنفيذ، تستخدم لتنفيذ تعليمات MOVE.

  3. تكلفة القراءة، تستخدم لقراءة البيانات من التخزين الدائم.

  4. تكلفة الكتابة، تستخدم لكتابة البيانات إلى التخزين الدائم.

يمكن حساب الرسوم النهائية للمعاملة باستخدام إجمالي كمية رسوم الوقود المستهلكة ) مضروبة في وحدة رسوم الوقود ( مضروبة في سعر وحدة رسوم الوقود. على سبيل المثال، إذا كانت المعاملة تستهلك 670 وحدة رسوم وقود، وكان سعر وحدة رسوم الوقود الذي حدده المستخدم في المعاملة هو 100 Octa لكل وحدة، فإن الرسوم النهائية للمعاملة هي 670 * 100 = 67000 Octa = 0.00067 APT.

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

) إنشاء جدول خطة رسوم الوقود

1. التكوين الأساسي

تشمل خطة رسوم الوقود عدة مكونات لا تتعلق بتفاصيل العمليات الفردية، بما في ذلك حجم المعاملة ووحدات رسوم الوقود القصوى ### التي تختلف عن الحد الأقصى لمبلغ رسوم الوقود الذي يحدده المستخدم في المعاملة (.

2. حجم التداول

بالنسبة لمعظم المعاملات، قد يتراوح حجم المعاملة في حدود عدة كيلوبايت. ومع ذلك، فإن إصدار وحدة MOVE يمكن أن يكون بسهولة عدة آلاف من الكيلوبايت، بينما يبلغ حجم الإطار حوالي 100 كيلوبايت. عادة ما يتراوح حجم وحدات المستخدمين بين 4 كيلوبايت و40 كيلوبايت. في البداية، قمنا بتعيين قيمة حجم المعاملة إلى 32 كيلوبايت، ولكن بناءً على ردود فعل المجتمع، كانت هناك طلبات لتوفير المزيد من المساحة لتبسيط تطوير التطبيقات، لذلك قمنا بضبط حجم المعاملة إلى 64 كيلوبايت.

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

3. الحد الأقصى لوحدة رسوم الوقود

تعريف وحدة الحد الأقصى لرسوم الوقود في خطة رسوم الوقود يحدد عدد العمليات التي يمكن تنفيذها في صفقة واحدة. ملاحظة! هذا يختلف عن الحد الأقصى لمبلغ رسوم الوقود الذي يحدده المستخدم في الصفقة.

تؤثر وحدة تكلفة الوقود القصوى لخطة تكلفة الوقود مباشرة على المدة التي يمكن فيها تنفيذ صفقة ما، وضبطها بشكل مرتفع للغاية قد يؤدي إلى تأثيرات سلبية على أداء داخل السلسلة. على سبيل المثال، قد ينسى المستخدم وجود زيادة في حلقة while، مما يؤدي إلى حلقة لا نهائية، وهو خطأ شائع. لقد وجدنا أنه حتى بعد إجراء أكبر ترقية لإطار العمل، لا نزال أقل من وحدة تكلفة الوقود القصوى لخطة تكلفة الوقود ) المحددة عند 1,000,000( بنسبة 90%.

4. التنفيذ

لتقييم تكلفة التنفيذ، قمنا بإنشاء إطار مرجعي واستخدمنا Valgrind لتحليل MOVE VM عند تنفيذ هذا الإطار. الناتج هو مجموعة من التعليمات البرمجية المصدرية المعلقة، التي تخبرنا بعدد تعليمات الآلة التي أنشأتها كل سطر من التعليمات البرمجية.

بمساعدة التحليل المذكور أعلاه، قمنا بتقدير تقريبي للتكاليف النسبية لجميع أوامر MOVE والدوال المدمجة. ومع ذلك، لاحظنا أن هذه الطريقة تواجه بعض المشاكل مع الدوال المضمنة: فهي لن تتضمن تلقائيًا في عدّ المتصل. كما رأينا، يحدث هذا فقط عندما نقوم بتحليل بعض أوامر MOVE، ويمكننا حل هذه المشكلة عن طريق جمع الأرقام.

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

5. التخزين

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

إن الوصول إلى أي عنصر حالة وتخزينه سيؤدي إلى تكاليف مرتبطة بهيكل بيانات شجرة ميركل الهلامية المرتبطة بالتحقق من حالة سلسلة الكتل بالكامل. هذه التكلفة تتعلق بقاعدة العناصر الحالة المختلفة )$2^{256}$(. وهناك أيضًا تكلفة تتناسب مع حجم كل عنصر. لتشغيل عنصر حالة، تكون التكلفة ) باستثناء الحالات الاستثنائية الموضحة في القسم التالي (:

تكلفة تخزين الوقود = item_fee + )byte_fee * bytes(

) اقرأ، أنشئ واكتب

أي وصول إلى عنصر الحالة ينتمي إلى واحدة من الأنواع الثلاثة التالية: القراءة، الإنشاء أو الكتابة. يتم تحصيل رسوم الوصول بناءً على رسوم العناصر ورسوم البايت، كما هو موضح في المعادلة أعلاه.

تُعتبر عملية القراءة العملية الأكثر شيوعًا، والتي تقتصر فقط على نقص الموارد الفوري. لذلك، يتم ضبط تكلفة القراءة بناءً على IOPS القرص ### وتكاليف المشروع ( وسعة عرض النطاق الترددي لمواصفات الأجهزة المرجعية.

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

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

يجدر بالذكر أن التكاليف المرتبطة بالتخزين تُقيَّم على أساس كل معاملة: حتى إذا قمت بقراءة/كتابة نفس المورد عدة مرات، فلا تحتاج إلى دفع الرسوم إلا مرة واحدة.

استنادًا إلى الاعتبارات المذكورة أعلاه، قمنا بتعريف 6 معلمات لرسوم الوقود، والتي تشكل جزءًا من التكلفة الإجمالية لرسوم الوقود. انظر أدناه:

per_item_read: وفقًا لـ IOPs للتصحيح

per_byte_read: تعديل حسب عرض النطاق الترددي الفعلي

per_item_create:تعديل وفقًا للإجمالي المستهدف للمشاريع

per_byte_create: ضبط حسب الحجم الإجمالي المستهدف - يحتوي كل عنصر على KB الأول.

per_item_write: مثل per_item_read

per_byte_write: مثل per_byte_create

) تكلفة وحدة الوقود الثابتة

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

المشاركة المجتمعية

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

1### بناءً على خبرتك، حدد الأماكن غير المعقولة في خطة رسوم الوقود؛

  1. أعرب عن مخاوفك بشأن خطة رسوم الوقود وشارك في المناقشة المجتمعية.

  2. صوت على اقتراح حكومي يتعلق بتكاليف الوقود.

) كيفية تعديل تكلفة رسوم الوقود؟

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

تم تصميم خطة رسوم الوقود لتكون قابلة للتوسع، مما يسمح بترقيتها من خلال اقتراحات الحوكمة. مع التحسين المستمر لـ MOVE VM ودمج ملاحظات المستخدم، يمكن تعديل معلمات رسوم الوقود مع مرور الوقت.

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

العمل في المستقبل

هذا هو الإطار الأول لرسوم الوقود القابل للتطبيق لـ MOVE. يتطلب ذلك تعديلات كبيرة على MOVE VM و Core. نأمل أن يمهد هذا العمل الطريق للأعمال المستقبلية:

1### تقليل تكاليف التنفيذ، يمتلك نموذج تكلفة وقود حقيقي يظهر أين تكون الكومبايلر والآلة الافتراضية فعالة، يمكن للفريق تحسين معظمها لتقليل تكاليف التنفيذ.

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

3) تخفيف حالة الانتفاخ، لا توجد حاليًا طرق بسيطة لتقليص مجموعة الحالة، باستثناء عقد ) أو حذف الأشياء صراحةً بواسطة المستخدم (. قد يؤدي دفع المستخدمين لحذف البيانات إلى خلق فرص للمراجحة، حيث يقوم المستخدم بإنشاء التخزين عندما يكون رخيصًا، ثم يحذفه عندما يصبح مكلفًا. التأجيل في معالجة هذا التحدي قد يضعف حافز المطورين لحذف البيانات داخل السلسلة. يستكشف الفريق مفهوم TTL لكل مشروع، الذي سيتم بموجبه حذف عناصر الحالة غير المُستخدمة عند انتهاء صلاحية TTL.

MOVE1.76%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 5
  • إعادة النشر
  • مشاركة
تعليق
0/400
PrivateKeyParanoiavip
· 08-12 12:31
كيف تقارن مع ارتفاع سعر الإيثريوم المبالغ فيه؟
شاهد النسخة الأصليةرد0
ImpermanentLossEnjoyervip
· 08-11 10:13
من الذي يستطيع تحمل هذه التكاليف الباهظة للوقود؟
شاهد النسخة الأصليةرد0
rekt_but_resilientvip
· 08-11 10:11
حتى الكلاب تعرف أن الغاز لـ move غالي بشكل غير معقول
شاهد النسخة الأصليةرد0
0xSleepDeprivedvip
· 08-11 10:07
تحرك أيضًا يحتاج إلى جمع المال، من الصعب التحمل.
شاهد النسخة الأصليةرد0
EthSandwichHerovip
· 08-11 09:56
هل هذه فقط تكاليف الوقود؟ عالم العملات الرقمية المبتدئين ينفصلون
شاهد النسخة الأصليةرد0
  • تثبيت