Bài học 3

إدارة قوائم السوق

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

تعزيز عقد السوق

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

إليك عقد Marketplace المحسّن:

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

سوق العقود {
 //تحديد هيكل جديد للعناصر
 عنصر الهيكل {
        string name;
        uint price;
        address payable seller;
        bool forSale;
    }

    //مصفوفة لاستيعاب جميع العناصر
 البند [] البنود العامة؛

 //تم حذف تعريفات الأحداث للإيجاز

 //تم حذف تعريفات الوظائف الأخرى للإيجاز

 //وظيفة لإزالة عنصر من البيع
 وظيفة إزالة عنصر من البيع (uint _itemID) عامة {
        Item storage item = items[_itemId];
        require(msg.sender == item.seller, "Only the owner can remove the item from sale");
        item.forSale = false;
    }

    //وظيفة لتحديث سعر السلعة
 تحديث الوظيفة/سعر العنصر (unt _itemID، uint _newPrice) متاح للجمهور {
        Item storage item = items[_itemId];
        require(msg.sender == item.seller, "Only the owner can update the price");
        item.price = _newPrice;
    }
}

في وظيفة removeItemFromSale ، نقوم أولاً باسترداد العنصر باستخدام _itemID المقدم. ثم نتحقق من أن الشخص الذي يتصل بالوظيفة (msg.sender) هو بائع السلعة. إذا كانت هذه هي الحالة، فقد قمنا بتعيين خاصية ForSale للعنصر على أنها خاطئة، مما يؤدي إلى إزالته فعليًا من البيع.

وبالمثل، في وظيفة updateItemPrice ، نقوم باسترداد العنصر باستخدام _itemID المقدم، ونتحقق من أن msg.sender هو البائع، وإذا كان الأمر كذلك، فإننا نقوم بتحديث سعر العنصر إلى _newPrice المقدم.

نشر عقد السوق المحسّن والتفاعل معه

بعد تحسين عقد Marketplace ، قم بتجميعه ونشره تمامًا كما فعلت في الدروس السابقة. تذكر تحديد العقد الصحيح من القائمة المنسدلة في المكون الإضافي لـ Solidity compiler قبل التجميع والنشر.

بمجرد نشر العقد، سيظهر ضمن قسم العقود المنشورة في المكون الإضافي لنشر & وتشغيل المعاملات. هنا، يمكنك التفاعل مع العقد.

لإزالة عنصر من البيع، أدخل معرف العنصر في وظيفة RemoveItemFromSale وانقر فوق الزر. لتحديث سعر عنصر ما، أدخل معرف العنصر والسعر الجديد في وظيفة UpdateItemPrice وانقر فوق الزر.

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

في الدرس التالي، سنناقش كيفية التعامل مع الثغرات الأمنية المحتملة في عقدنا ونقدم المعدلات لزيادة تبسيط التعليمات البرمجية الخاصة بنا. ترقبوا!

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 3

إدارة قوائم السوق

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

تعزيز عقد السوق

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

إليك عقد Marketplace المحسّن:

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

سوق العقود {
 //تحديد هيكل جديد للعناصر
 عنصر الهيكل {
        string name;
        uint price;
        address payable seller;
        bool forSale;
    }

    //مصفوفة لاستيعاب جميع العناصر
 البند [] البنود العامة؛

 //تم حذف تعريفات الأحداث للإيجاز

 //تم حذف تعريفات الوظائف الأخرى للإيجاز

 //وظيفة لإزالة عنصر من البيع
 وظيفة إزالة عنصر من البيع (uint _itemID) عامة {
        Item storage item = items[_itemId];
        require(msg.sender == item.seller, "Only the owner can remove the item from sale");
        item.forSale = false;
    }

    //وظيفة لتحديث سعر السلعة
 تحديث الوظيفة/سعر العنصر (unt _itemID، uint _newPrice) متاح للجمهور {
        Item storage item = items[_itemId];
        require(msg.sender == item.seller, "Only the owner can update the price");
        item.price = _newPrice;
    }
}

في وظيفة removeItemFromSale ، نقوم أولاً باسترداد العنصر باستخدام _itemID المقدم. ثم نتحقق من أن الشخص الذي يتصل بالوظيفة (msg.sender) هو بائع السلعة. إذا كانت هذه هي الحالة، فقد قمنا بتعيين خاصية ForSale للعنصر على أنها خاطئة، مما يؤدي إلى إزالته فعليًا من البيع.

وبالمثل، في وظيفة updateItemPrice ، نقوم باسترداد العنصر باستخدام _itemID المقدم، ونتحقق من أن msg.sender هو البائع، وإذا كان الأمر كذلك، فإننا نقوم بتحديث سعر العنصر إلى _newPrice المقدم.

نشر عقد السوق المحسّن والتفاعل معه

بعد تحسين عقد Marketplace ، قم بتجميعه ونشره تمامًا كما فعلت في الدروس السابقة. تذكر تحديد العقد الصحيح من القائمة المنسدلة في المكون الإضافي لـ Solidity compiler قبل التجميع والنشر.

بمجرد نشر العقد، سيظهر ضمن قسم العقود المنشورة في المكون الإضافي لنشر & وتشغيل المعاملات. هنا، يمكنك التفاعل مع العقد.

لإزالة عنصر من البيع، أدخل معرف العنصر في وظيفة RemoveItemFromSale وانقر فوق الزر. لتحديث سعر عنصر ما، أدخل معرف العنصر والسعر الجديد في وظيفة UpdateItemPrice وانقر فوق الزر.

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

في الدرس التالي، سنناقش كيفية التعامل مع الثغرات الأمنية المحتملة في عقدنا ونقدم المعدلات لزيادة تبسيط التعليمات البرمجية الخاصة بنا. ترقبوا!

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.
It seems that you are attempting to access our services from a Restricted Location where Gate.io is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.