Bài học 2

تخزين القيم في العقد

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

ما المقصود بالتخزين؟

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

فهم التخزين بعمق

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

الآن، دعونا نلقي نظرة على رمز العقد الخاص بنا لهذا الدرس:

الثعبان
الاستيراد بذكاء كسبا

@sp. وحدة
تعريف رئيسي ():
 قيمة متجر الفئة (عقد SP):
 def __init__(الذات والقيمة):
 البيانات الذاتية. القيمة المخزنة = القيمة

 @sp. نقطة الدخول
 استبدال التعريف (الرف، المعلمات):
 البيانات الذاتية. القيمة المخزنة = المعلمات. القيمة

 @sp. نقطة الدخول
 التعريف المزدوج (الرف):
 البيانات الذاتية. القيمة المخزنة *= 2

 @sp. نقطة الدخول
 فجوة التعريف (الذات، المعلمات):
 معايير التأكيد. المقسوم 5 >
 البيانات الذاتية. القيمة المخزنة /= المعلمات. المقسوم


إذا لم " تكن " القوالب موجودة في __name__:

 @sp .add_test (الاسم = قيمة المتجر) " "
 اختبار def ():
 c1 = قيمة المتجر الرئيسية (12)
 سيناريو = سيناريو sp.test_( رئيسي)
        السيناريو الأول (المتجر) " القيمة")
 سيناريو += c1
 c1. استبدل (القيمة = 15)
 سيناريو. (بعض " الحساب"). عرض (C1. البيانات. القيمة المخزنة * 12)
 c1. استبدل (القيمة = 25)
 c1. مزدوج ()
 c1. قسّم (مقسم = 2) .run (
            صالح = خطأ، استثناء = " شرط خاطئ: params.divisor 5 > "
 )
 سيناريو التحقق (C1. البيانات. القيمة المخزنة == 50)
 c1. قسّم (مقسم = 6)
 سيناريو التحقق (C1. البيانات. القيمة المخزنة == 8)

قم بتشغيل الكود وتفكيكه

في مثال عقد التخزين الخاص بنا، لدينا العديد من نقاط الدخول - الاستبدال والمضاعفة والقسمة. بعد نشر هذا العقد، يمكن للمستخدمين الاتصال بنقاط الدخول هذه للتفاعل مع العقد.

بالنسبة لنقاط إدخال الاستبدال والقسمة ، يجب على المستخدمين توفير المعلمات في المعاملة. للاستبدال، تكون قيمة المعلمة مطلوبة، وبالنسبة للقسمة، يلزم وجود مقسم المعلمة.

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

  1. انشر عقدك من خلال النقر على زر النشر.

  2. بعد النشر، سترى العقد ممثلاً ضمن العقود. اضغط عليها.

  3. الآن سترى نقاط الدخول للعقد المدرجة.

  4. لاستدعاء replace، أدخل قيمة params.value في الحقل، ثم انقر فوق زر الاستبدال.

  5. للاتصال المزدوج، ما عليك سوى النقر فوق الزر المزدوج.

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

في هذا العقد، نؤكد على مفهوم التخزين باستخدام السطر self.data.StoredValue = value. هنا، تشير self.data إلى تخزين العقد الخاص بنا. هذا هو المكان الذي نحافظ فيه على حالة عقدنا: معلمة واحدة تسمى StoredValue.

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

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

لماذا التخزين مهم؟

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

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

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

Tuyên bố từ chối trách nhiệm
* Đầu tư tiền điện tử liên quan đến rủi ro đáng kể. Hãy tiến hành một cách thận trọng. Khóa học không nhằm mục đích tư vấn đầu tư.
* Khóa học được tạo bởi tác giả đã tham gia Gate Learn. Mọi ý kiến chia sẻ của tác giả không đại diện cho Gate Learn.
Danh mục
Bài học 2

تخزين القيم في العقد

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

ما المقصود بالتخزين؟

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

فهم التخزين بعمق

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

الآن، دعونا نلقي نظرة على رمز العقد الخاص بنا لهذا الدرس:

الثعبان
الاستيراد بذكاء كسبا

@sp. وحدة
تعريف رئيسي ():
 قيمة متجر الفئة (عقد SP):
 def __init__(الذات والقيمة):
 البيانات الذاتية. القيمة المخزنة = القيمة

 @sp. نقطة الدخول
 استبدال التعريف (الرف، المعلمات):
 البيانات الذاتية. القيمة المخزنة = المعلمات. القيمة

 @sp. نقطة الدخول
 التعريف المزدوج (الرف):
 البيانات الذاتية. القيمة المخزنة *= 2

 @sp. نقطة الدخول
 فجوة التعريف (الذات، المعلمات):
 معايير التأكيد. المقسوم 5 >
 البيانات الذاتية. القيمة المخزنة /= المعلمات. المقسوم


إذا لم " تكن " القوالب موجودة في __name__:

 @sp .add_test (الاسم = قيمة المتجر) " "
 اختبار def ():
 c1 = قيمة المتجر الرئيسية (12)
 سيناريو = سيناريو sp.test_( رئيسي)
        السيناريو الأول (المتجر) " القيمة")
 سيناريو += c1
 c1. استبدل (القيمة = 15)
 سيناريو. (بعض " الحساب"). عرض (C1. البيانات. القيمة المخزنة * 12)
 c1. استبدل (القيمة = 25)
 c1. مزدوج ()
 c1. قسّم (مقسم = 2) .run (
            صالح = خطأ، استثناء = " شرط خاطئ: params.divisor 5 > "
 )
 سيناريو التحقق (C1. البيانات. القيمة المخزنة == 50)
 c1. قسّم (مقسم = 6)
 سيناريو التحقق (C1. البيانات. القيمة المخزنة == 8)

قم بتشغيل الكود وتفكيكه

في مثال عقد التخزين الخاص بنا، لدينا العديد من نقاط الدخول - الاستبدال والمضاعفة والقسمة. بعد نشر هذا العقد، يمكن للمستخدمين الاتصال بنقاط الدخول هذه للتفاعل مع العقد.

بالنسبة لنقاط إدخال الاستبدال والقسمة ، يجب على المستخدمين توفير المعلمات في المعاملة. للاستبدال، تكون قيمة المعلمة مطلوبة، وبالنسبة للقسمة، يلزم وجود مقسم المعلمة.

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

  1. انشر عقدك من خلال النقر على زر النشر.

  2. بعد النشر، سترى العقد ممثلاً ضمن العقود. اضغط عليها.

  3. الآن سترى نقاط الدخول للعقد المدرجة.

  4. لاستدعاء replace، أدخل قيمة params.value في الحقل، ثم انقر فوق زر الاستبدال.

  5. للاتصال المزدوج، ما عليك سوى النقر فوق الزر المزدوج.

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

في هذا العقد، نؤكد على مفهوم التخزين باستخدام السطر self.data.StoredValue = value. هنا، تشير self.data إلى تخزين العقد الخاص بنا. هذا هو المكان الذي نحافظ فيه على حالة عقدنا: معلمة واحدة تسمى StoredValue.

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

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

لماذا التخزين مهم؟

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

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

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

Tuyên bố từ chối trách nhiệm
* Đầu tư tiền điện tử liên quan đến rủi ro đáng kể. Hãy tiến hành một cách thận trọng. Khóa học không nhằm mục đích tư vấn đầu tư.
* Khóa học được tạo bởi tác giả đã tham gia Gate Learn. Mọi ý kiến chia sẻ của tác giả không đại diện cho Gate Learn.