تخطٍ إلى المحتوى الرئيسي

كيفية تنفيذ سوق ERC-721

العقود الذكية
erc-721
Solidity
الرموز
المستوى المتوسط
Alberto Cuesta Cañada
19 مارس 2020
5 دقيقة قراءة

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

قبل ظهور Gumtree وEbay وCraigslist، كانت لوحات الإعلانات المبوبة تُصنع في الغالب من الفلين أو الورق. كانت هناك لوحات إعلانات مبوبة في ممرات المدارس، والصحف، وأعمدة إنارة الشوارع، وواجهات المتاجر.

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

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

تحقيق الدخل

سيحتاج نموذج العمل الخاص بلوحة الإعلانات المبوبة على البلوك تشين العام إلى أن يكون مختلفًا عن نموذج Ebay والشركات المشابهة.

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

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

سيعرف قادة الأعمال الذين يتمتعون برؤية أوسع مني كيفية تحقيق الدخل من هذا. كل ما أراه هو أن هذا يختلف عن الوضع الراهن ومن المحتمل أن يكون مربحًا.

علاوة على ذلك، هناك زاوية الأتمتة والمدفوعات. يمكن ترميز بعض الأشياء بفعالية كبيرة (opens in a new tab) وتداولها في لوحة إعلانات مبوبة. يتم نقل الأصول المرمزة بسهولة في البلوك تشين. يمكن تنفيذ طرق الدفع المعقدة للغاية بسهولة في البلوك تشين.

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

أنا سعيد فقط ببنائها. دعونا نلقي نظرة على الكود.

التنفيذ

منذ بعض الوقت بدأنا مستودعًا مفتوح المصدر (opens in a new tab) يحتوي على أمثلة تنفيذية لحالات الاستخدام وأشياء أخرى مفيدة، يرجى إلقاء نظرة.

الكود الخاص بـ لوحة إعلانات إيثريوم المبوبة (opens in a new tab) موجود هناك، يرجى استخدامه وتجربته. فقط كن على علم بأن الكود لم يتم تدقيقه وتحتاج إلى بذل العناية الواجبة بنفسك قبل وضع الأموال فيه.

أساسيات اللوحة ليست معقدة. ستكون جميع الإعلانات في اللوحة مجرد بنية (struct) تحتوي على بضعة حقول:

1struct Trade {
2 address poster;
3 uint256 item;
4 uint256 price;
5 bytes32 status; // Open, Executed, Cancelled // مفتوح، منفذ، ملغى
6}

إذن هناك شخص ينشر الإعلان. عنصر للبيع. سعر للعنصر. حالة التداول التي يمكن أن تكون مفتوحة (open)، أو منفذة (executed)، أو ملغاة (cancelled).

سيتم الاحتفاظ بجميع هذه التداولات في تخطيط (mapping). لأن كل شيء في Solidity يبدو وكأنه تخطيط. وأيضًا لأنه مريح.

1mapping(uint256 => Trade) public trades;

استخدام التخطيط يعني فقط أنه يتعين علينا ابتكار معرف (id) لكل إعلان قبل نشره، وسنحتاج إلى معرفة معرف الإعلان قبل أن نتمكن من العمل عليه. هناك طرق متعددة للتعامل مع هذا إما في العقد الذكي أو في الواجهة الأمامية. يرجى السؤال إذا كنت بحاجة إلى بعض الإرشادات.

بعد ذلك يأتي السؤال حول ماهية تلك العناصر التي نتعامل معها، وما هي هذه العملة المستخدمة لدفع رسوم المعاملة.

بالنسبة للعناصر، سنطلب فقط أن تنفذ واجهة ERC-721 (opens in a new tab)، والتي هي في الحقيقة مجرد طريقة لتمثيل عناصر العالم الحقيقي في البلوك تشين، على الرغم من أنها تعمل بشكل أفضل مع الأصول الرقمية (opens in a new tab). سنقوم بتحديد عقد ERC721 الخاص بنا في دالة البناء (constructor)، مما يعني أن أي أصول في لوحة الإعلانات المبوبة الخاصة بنا يجب أن تكون قد تم ترميزها مسبقًا.

بالنسبة للمدفوعات، سنفعل شيئًا مشابهًا. تحدد معظم مشاريع البلوك تشين العملة الرقمية ERC-20 (opens in a new tab) الخاصة بها. يفضل البعض الآخر استخدام عملة سائدة مثل DAI. في لوحة الإعلانات المبوبة هذه، تحتاج فقط إلى تحديد عملتك عند الإنشاء. سهل جداً.

1constructor (
2 address _currencyTokenAddress, address _itemTokenAddress
3) public {
4 currencyToken = IERC20(_currencyTokenAddress);
5 itemToken = IERC721(_itemTokenAddress);
6 tradeCounter = 0;
7}

لقد اقتربنا. لدينا إعلانات، وعناصر للتداول، وعملة للمدفوعات. إنشاء إعلان يعني وضع عنصر في حساب ضمان (escrow) لإظهار أنك تمتلكه وأنك لم تقم بنشره مرتين، ربما في لوحة مختلفة.

الكود أدناه يفعل ذلك بالضبط. يضع العنصر في حساب الضمان، وينشئ الإعلان، ويقوم ببعض مهام التنظيم.

1function openTrade(uint256 _item, uint256 _price)
2 public
3{
4 itemToken.transferFrom(msg.sender, address(this), _item);
5 trades[tradeCounter] = Trade({
6 poster: msg.sender,
7 item: _item,
8 price: _price,
9 status: "Open"
10 });
11 tradeCounter += 1;
12 emit TradeStatusChange(tradeCounter - 1, "Open");
13}

قبول التداول يعني اختيار إعلان (تداول)، ودفع السعر، واستلام العنصر. الكود أدناه يسترجع التداول. يتحقق من توفره. يدفع ثمن العنصر. يسترجع العنصر. ويقوم بتحديث الإعلان.

1function executeTrade(uint256 _trade)
2 public
3{
4 Trade memory trade = trades[_trade];
5 require(trade.status == "Open", "Trade is not Open.");
6 currencyToken.transferFrom(msg.sender, trade.poster, trade.price);
7 itemToken.transferFrom(address(this), msg.sender, trade.item);
8 trades[_trade].status = "Executed";
9 emit TradeStatusChange(_trade, "Executed");
10}

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

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

1function cancelTrade(uint256 _trade)
2 public
3{
4 Trade memory trade = trades[_trade];
5 require(
6 msg.sender == trade.poster,
7 "Trade can be cancelled only by poster."
8 );
9 require(trade.status == "Open", "Trade is not Open.");
10 itemToken.transferFrom(address(this), trade.poster, trade.item);
11 trades[_trade].status = "Cancelled";
12 emit TradeStatusChange(_trade, "Cancelled");
13}

هذا كل شيء. لقد وصلت إلى نهاية التنفيذ. من المدهش حقًا مدى إيجاز بعض مفاهيم الأعمال عند التعبير عنها في الكود، وهذه إحدى تلك الحالات. تحقق من العقد الكامل في مستودعنا (opens in a new tab).

الخاتمة

لوحات الإعلانات المبوبة هي تكوين سوق شائع توسع بشكل هائل مع الإنترنت، ليصبح نموذج عمل شائعًا للغاية مع عدد قليل من الفائزين المحتكرين.

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

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

كما هو الحال دائمًا، إذا كنت بصدد بناء أي شيء ممتع وترحب ببعض النصائح، يرجى مراسلتي (opens in a new tab)! يسعدني دائمًا المساعدة.

آخر تحديث للصفحة: 3 مارس 2026

هل كانت تعليمات الاستخدام هذه مفيدة؟