يجب أن يعرف المستخدمون الذين قرأوا المقالات السابقة أنه بالنسبة لعملة بروتوكول ERC-20، يمكننا إجراء التداول من خلال DEX الممثلة بـ Uniswap، مما يجعلها اللامركزية. فكيف يمكن تحقيق التداول اللامركزي بالنسبة لبروتوكول ERC-721، أي NFT؟
تستخدم بعض بورصات NFT الرئيسية حالياً طريقة الطلبات المعلقة للتداول، تماماً كما لو كانت تعرض سلعاً على أرفف السوبرماركت، فإذا وجد المشتري السعر مناسباً، يمكنه أخذ السلعة إلى المنزل.
ستتناول هذه المقالة كيفية تنفيذ تداول NFT اللامركزي من خلال كتابة عقود ذكية وصفحة واجهة أمامية بسيطة. يُرجى ملاحظة أن هذه المقالة لأغراض التعلم فقط ولا يمكن استخدامها في بيئة الإنتاج الحقيقية.
NFT (رمز غير قابل للتبادل)
NFT هو عملة غير قابلة للتبادل، أي أن كل Token غير متطابقة ومختلفة، وهو يتبع بروتوكول ERC-721. بشكل عام، كل NFT يظهر صورة مختلفة في المحفظة، وكل مجموعة NFT سيكون لديها ID فريد لتمييزها.
بسبب خصائص NFT، لا يمكن تحديد السعر مثل ERC-20 من خلال منحنى السعر - لأن كل عملة مختلفة. لذلك، فإن الطريقة الشائعة للتداول في الوقت الحالي هي من خلال شكل دفتر الطلبات.
تداول دفتر الطلبات
يعني نموذج دفتر الطلبات ببساطة أن سعر السلعة يتم تحديده بشكل مصطنع ، وهو ما يختلف عن طريقة Uniswap لحساب الأسعار من خلال منحنيات الأسعار. بشكل عام ، سيتم تقسيم دفتر الطلبات إلى وضعين للمعاملة ، أحدهما هو أمر التسعير ، أي أن البائع يحدد سعر البيع في ذهنه ، وإذا كان هناك مشتر يعتقد أن السعر مناسب ، فيمكن للمشتري شرائه. والآخر هو أمر شراء ، أي أن المشتري يصدر أمر شراء وفقا لاحتياجاته الخاصة ، وعندما يشعر البائع أن السعر مناسب ، يمكن للبائع بيعه.
بشكل عام، سيكون سعر طلب الشراء أقل من سعر الطلب المحدد. هذه المقالة ستتناول فقط طريقة التسعير الأولى.
ميزات NFT DEX
يجب أن تتضمن الوظائف الأساسية لمنصة تبادل NFT ما يلي:
عرض المنتج: عرض NFT بسعر محدد
شراء السلع: قم بالشراء بناءً على تسعير NFT
رسوم DEX: يتم تحصيل الرسوم بنسبة مئوية بناءً على سعر المعاملة.
عرض السلع
لإدراج المنتجات، يجب القيام بالأشياء التالية:
الواجهة الأمامية: يختار المستخدم NFT الخاص به، ويحدد سعرًا، وينقر على الإدراج.
العقد: يحتاج المستخدم إلى تعيين أذونات للعقد، يمكنه التحكم في NFT الخاص بالمستخدم.
بهذه الطريقة، تصبح السلعة مدرجة. في العقد، من الضروري الحفاظ على خريطة أسعار السلع المدرجة من قبل المستخدمين، وعادة ما يمكن القيام بهذه البيانات في خدمات مركزية لتقليل العبء على العقد، ولكن في هذه المقالة، ستظل بيانات الخريطة هذه محفوظة في العقد.
شراء منتج
عند شراء المنتجات، ستحدث الأمور التالية:
الواجهة الأمامية: يختار المستخدم NFT الذي يرغب في شرائه، ثم ينقر على الشراء.
العقد: استدعاء العقد، لنقل أموال المستخدم إلى بائع NFT، ونقل NFT إلى المشتري.
تنفيذ منصة تبادل NFT
في هذا الفصل، سنقوم بإنشاء DEX لـ NFT من الصفر، وهذا هو عنوان DEX الذي تم نشره من قبل الكاتب nft-dex-frontend.vercel.app.
من أجل اختبار الاحتياجات، من الأفضل أن يكون لدينا NFT خاص بنا. يمكننا بناء NFT لبروتوكول ERC-721 بسرعة من خلال Remix، حيث يقدم القالب المناسب.
يمكننا بسهولة نشر NFT وفقًا للقالب. بالطبع يمكنك أيضًا تخطي هذه الخطوة واستخدام NFT الجاهز لدينا.
2. كتابة العقد
يجب أن تتضمن طرق العقد لدينا الطرق التالية:
2.1. البائع يعرض NFT
يحتاج البائع إلى تحديد NFT الذي يريد بيعه والسعر المقابل. عند إضافة العنصر، يحتاج المستخدم إلى توقيع طريقة تفويض NFT، مما يمنح عقدنا الذكي صلاحية التعامل مع هذا NFT، بحيث يمكن إتمام هذه الصفقة تلقائيًا عندما يقوم أحد المشترين بالشراء.
لذا يجب أن تكون العملية كما يلي: 1. يختار المستخدم NFT الخاص به؛ 2. يحدد السعر، ويمكن أن تكون التسعيرة هنا بالعملات المستقرة USDT و USDC، أو يمكن أن تكون ETH؛ 3. يمنح إذن NFT للعقد.
بعد ذلك يمكنك استدعاء طريقة إدراج العقد، تحتاج هذه الطريقة إلى القيام بما يلي:
عند شراء NFT، يحتاج المستخدم فقط إلى اختيار NFT الذي يريده ودفع العملة المقابلة. على مستوى العقد، سيتم تنفيذ الخطوات التالية: 1. قراءة بيانات NFT المقابلة من "قوائم"؛ 2. حساب الرسوم بناءً على سعر NFT، وخصم هذا الجزء من سعر الصفقة؛ 3. نقل NFT إلى يد المشتري؛ 4. تفعيل حدث الشراء.
بالطبع، قد يشعر البائع أن السعر غير مناسب، وسيختار إلغاء الإدراج. يمكننا أن نرى أننا احتفظنا بحقل isActive في مكان حفظ معلومات الإدراج، للإشارة إلى ما إذا كانت هذه السلعة فعالة أم لا، لذا عند إلغاء الإدراج، كل ما علينا هو تعيين هذا الحقل إلى false.
يمكن لـ DEX فرض رسوم على كل عملية تداول، ويمكن تخزين هذه الرسوم في العقد، أو يمكن تحويلها إلى عنوان آخر خاص بك، وفي هذه المقالة سيتم اتخاذ طريقة التخزين في العقد.
قبل البدء، نحتاج إلى إعداد بعض الأدوات، بما في ذلك الأدوات التالية:
Ant Design Web3: لربط المحفظة وعرض بطاقات NFT.
Wagmi: للتفاعل مع المحفظة.
Nextjs + Vercel: نشر مشروعنا.
يجب أن يحتوي تطبيق الواجهة الأمامية لدينا على ثلاث صفحات، Mint و Buy و Portfolio، Mint تهدف إلى تمكين المستخدمين من Mint NFT الخاص بنا، وذلك لأغراض العرض فقط، أما Buy فهو متجر DEX الخاص بنا، حيث يمكن للمستخدمين شراء NFT الخاص بنا، وفي Portfolio يمكن للمستخدمين إجراء عمليات إدراج وإلغاء إدراج لـ NFT.
3.1. ربط المحفظة
ربط محفظة المستخدم، استخدام Ant Design Web3 لتحقيق
عملية ربط محفظة المستخدم بسيطة جداً، يمكن استخدام مكون الاتصال الذي تقدمه Ant Design Web3.
أولاً، نقوم بتغليف المشروع بمزود، حتى نتمكن من الاستفادة من قدرات Ant Design Web3 في الشيفرة التالية. بالإضافة إلى ذلك، نظرًا لأننا بحاجة إلى الاتصال بسلسلة الاختبار sepolia، ومن أجل السرعة، يُنصح باستخدام بعض خدمات العقد لتحسين سرعة استعلام البيانات. هنا، أستخدم نقطة نهاية ZAN، فهي مناسبة جدًا للاستخدام في بيئة آسيا والمحيط الهادئ، سريعة جدًا وبأسعار معقولة، وتدعم العديد من السلاسل.
بعد ذلك، ضع زر الاتصال في الأماكن التي تحتاج إلى ربط المحفظة:
بهذه الطريقة، تم الانتهاء من الأمر، إنه سهل للغاية.
3.2. صك
صك NFT للحصول على عملة اختبارية يمكنك الذهاب إلى
في صفحة Mint يمكننا Mint NFT المستخدمة للاختبار. Mint هو إجراء كتابة العقد، هنا نحتاج لاستخدام طريقة useWriteContract الموجودة في wagmi. نحتاج فقط إلى تحديد عنوان العقد، ABI الخاصة بالعقد، وكذلك معلمات العقد.
بعد ذلك، يمكنك تأكيد ذلك في المحفظة وسيكون لديك Mint ناجح.
3.3. المحفظة
إدارة NFT الخاصة بالمستخدم
هنا يجب عرض جميع NFTs الخاصة بالمستخدم. يمكننا استخدام بعض واجهات برمجة التطبيقات الخاصة بـ NFT للحصول عليها، هنا نستخدم واجهة برمجة التطبيقات الخاصة بـ opensea، لأن واجهات برمجة التطبيقات الخاصة بـ NFT التي تدعم سلسلة الاختبار sepolia ليست كثيرة.
بعد الحصول على قائمة NFT الخاصة بالمستخدم، يجب تحديد ما إذا كانت قد تم إدراجها بالفعل، حيث تدعم تلك التي لم تُدرج الإضافة، بينما تدعم تلك المُدرجة الإزالة. يتم تحديد ذلك من خلال الحصول على NFT التي قام المستخدم بإدراجها بالفعل عبر طريقة "getSellerListings" داخل عقد DEX، ثم بناءً على حقل "isAlive" لهذه الـNFT، يتم تحديد ما إذا كانت قيد الإدراج.
عند الإدراج، يجب استدعاء طريقة العقد "listNFT"، وعند الإلغاء، يجب استدعاء طريقة "cancelListing". قبل الإدراج، يلزم استدعاء طريقة تفويض NFT الإضافية، لتفويض NFT للعقد، حتى يمكن نقل NFT تلقائيًا إلى المشتري بعد إتمام الصفقة.
أولاً، نحتاج إلى عرض NFT التي تم إدراجها بالفعل. على غرار عرض NFT المتاحة للمستخدم في Portfolio، فإن الاختلاف هنا هو أن هذا عرض عالمي، وليس لمستخدم معين، والآخر هو أننا بحاجة فقط إلى عرض NFT التي هي isAlive.
عند الشراء، استخدم طريقة « purchaseNFT »، وعند استدعاء هذه الطريقة، تحتاج إلى دفع السعر باستخدام ETH.
المحتوى هو للمرجعية فقط، وليس دعوة أو عرضًا. لا يتم تقديم أي مشورة استثمارية أو ضريبية أو قانونية. للمزيد من الإفصاحات حول المخاطر، يُرجى الاطلاع على إخلاء المسؤولية.
سلسلة مبتدئ Web3: إنشاء DEX NFT من الصفر
يجب أن يعرف المستخدمون الذين قرأوا المقالات السابقة أنه بالنسبة لعملة بروتوكول ERC-20، يمكننا إجراء التداول من خلال DEX الممثلة بـ Uniswap، مما يجعلها اللامركزية. فكيف يمكن تحقيق التداول اللامركزي بالنسبة لبروتوكول ERC-721، أي NFT؟
تستخدم بعض بورصات NFT الرئيسية حالياً طريقة الطلبات المعلقة للتداول، تماماً كما لو كانت تعرض سلعاً على أرفف السوبرماركت، فإذا وجد المشتري السعر مناسباً، يمكنه أخذ السلعة إلى المنزل.
ستتناول هذه المقالة كيفية تنفيذ تداول NFT اللامركزي من خلال كتابة عقود ذكية وصفحة واجهة أمامية بسيطة. يُرجى ملاحظة أن هذه المقالة لأغراض التعلم فقط ولا يمكن استخدامها في بيئة الإنتاج الحقيقية.
NFT (رمز غير قابل للتبادل)
NFT هو عملة غير قابلة للتبادل، أي أن كل Token غير متطابقة ومختلفة، وهو يتبع بروتوكول ERC-721. بشكل عام، كل NFT يظهر صورة مختلفة في المحفظة، وكل مجموعة NFT سيكون لديها ID فريد لتمييزها.
! سلسلة Web3 Starter: تنفيذ NFT DEX من الصفر
بسبب خصائص NFT، لا يمكن تحديد السعر مثل ERC-20 من خلال منحنى السعر - لأن كل عملة مختلفة. لذلك، فإن الطريقة الشائعة للتداول في الوقت الحالي هي من خلال شكل دفتر الطلبات.
تداول دفتر الطلبات
يعني نموذج دفتر الطلبات ببساطة أن سعر السلعة يتم تحديده بشكل مصطنع ، وهو ما يختلف عن طريقة Uniswap لحساب الأسعار من خلال منحنيات الأسعار. بشكل عام ، سيتم تقسيم دفتر الطلبات إلى وضعين للمعاملة ، أحدهما هو أمر التسعير ، أي أن البائع يحدد سعر البيع في ذهنه ، وإذا كان هناك مشتر يعتقد أن السعر مناسب ، فيمكن للمشتري شرائه. والآخر هو أمر شراء ، أي أن المشتري يصدر أمر شراء وفقا لاحتياجاته الخاصة ، وعندما يشعر البائع أن السعر مناسب ، يمكن للبائع بيعه.
بشكل عام، سيكون سعر طلب الشراء أقل من سعر الطلب المحدد. هذه المقالة ستتناول فقط طريقة التسعير الأولى.
ميزات NFT DEX
يجب أن تتضمن الوظائف الأساسية لمنصة تبادل NFT ما يلي:
عرض السلع
لإدراج المنتجات، يجب القيام بالأشياء التالية:
بهذه الطريقة، تصبح السلعة مدرجة. في العقد، من الضروري الحفاظ على خريطة أسعار السلع المدرجة من قبل المستخدمين، وعادة ما يمكن القيام بهذه البيانات في خدمات مركزية لتقليل العبء على العقد، ولكن في هذه المقالة، ستظل بيانات الخريطة هذه محفوظة في العقد.
شراء منتج
عند شراء المنتجات، ستحدث الأمور التالية:
تنفيذ منصة تبادل NFT
في هذا الفصل، سنقوم بإنشاء DEX لـ NFT من الصفر، وهذا هو عنوان DEX الذي تم نشره من قبل الكاتب nft-dex-frontend.vercel.app.
! سلسلة Web3 Starter: تنفيذ NFT DEX من الصفر
1. إنشاء NFT
من أجل اختبار الاحتياجات، من الأفضل أن يكون لدينا NFT خاص بنا. يمكننا بناء NFT لبروتوكول ERC-721 بسرعة من خلال Remix، حيث يقدم القالب المناسب.
يمكننا بسهولة نشر NFT وفقًا للقالب. بالطبع يمكنك أيضًا تخطي هذه الخطوة واستخدام NFT الجاهز لدينا.
2. كتابة العقد
يجب أن تتضمن طرق العقد لدينا الطرق التالية:
2.1. البائع يعرض NFT
يحتاج البائع إلى تحديد NFT الذي يريد بيعه والسعر المقابل. عند إضافة العنصر، يحتاج المستخدم إلى توقيع طريقة تفويض NFT، مما يمنح عقدنا الذكي صلاحية التعامل مع هذا NFT، بحيث يمكن إتمام هذه الصفقة تلقائيًا عندما يقوم أحد المشترين بالشراء.
لذا يجب أن تكون العملية كما يلي: 1. يختار المستخدم NFT الخاص به؛ 2. يحدد السعر، ويمكن أن تكون التسعيرة هنا بالعملات المستقرة USDT و USDC، أو يمكن أن تكون ETH؛ 3. يمنح إذن NFT للعقد.
بعد ذلك يمكنك استدعاء طريقة إدراج العقد، تحتاج هذه الطريقة إلى القيام بما يلي:
! سلسلة Web3 Starter: تنفيذ NFT DEX من الصفر
2.2. المشتري يشتري NFT
عند شراء NFT، يحتاج المستخدم فقط إلى اختيار NFT الذي يريده ودفع العملة المقابلة. على مستوى العقد، سيتم تنفيذ الخطوات التالية: 1. قراءة بيانات NFT المقابلة من "قوائم"؛ 2. حساب الرسوم بناءً على سعر NFT، وخصم هذا الجزء من سعر الصفقة؛ 3. نقل NFT إلى يد المشتري؛ 4. تفعيل حدث الشراء.
! سلسلة Web3 Starter: تنفيذ NFT DEX من الصفر
2.3. إلغاء الإدراج
بالطبع، قد يشعر البائع أن السعر غير مناسب، وسيختار إلغاء الإدراج. يمكننا أن نرى أننا احتفظنا بحقل isActive في مكان حفظ معلومات الإدراج، للإشارة إلى ما إذا كانت هذه السلعة فعالة أم لا، لذا عند إلغاء الإدراج، كل ما علينا هو تعيين هذا الحقل إلى false.
! سلسلة Web3 Starter: تنفيذ NFT DEX من الصفر
2.4. استخراج رسوم المعاملات
يمكن لـ DEX فرض رسوم على كل عملية تداول، ويمكن تخزين هذه الرسوم في العقد، أو يمكن تحويلها إلى عنوان آخر خاص بك، وفي هذه المقالة سيتم اتخاذ طريقة التخزين في العقد.
! سلسلة Web3 Starter: تنفيذ NFT DEX من البداية
إلى هنا، تعتبر الوظائف الأساسية لعقدنا مكتملة.
3. تطوير الواجهة الأمامية لـ DEX
قبل البدء، نحتاج إلى إعداد بعض الأدوات، بما في ذلك الأدوات التالية:
يجب أن يحتوي تطبيق الواجهة الأمامية لدينا على ثلاث صفحات، Mint و Buy و Portfolio، Mint تهدف إلى تمكين المستخدمين من Mint NFT الخاص بنا، وذلك لأغراض العرض فقط، أما Buy فهو متجر DEX الخاص بنا، حيث يمكن للمستخدمين شراء NFT الخاص بنا، وفي Portfolio يمكن للمستخدمين إجراء عمليات إدراج وإلغاء إدراج لـ NFT.
3.1. ربط المحفظة
عملية ربط محفظة المستخدم بسيطة جداً، يمكن استخدام مكون الاتصال الذي تقدمه Ant Design Web3.
أولاً، نقوم بتغليف المشروع بمزود، حتى نتمكن من الاستفادة من قدرات Ant Design Web3 في الشيفرة التالية. بالإضافة إلى ذلك، نظرًا لأننا بحاجة إلى الاتصال بسلسلة الاختبار sepolia، ومن أجل السرعة، يُنصح باستخدام بعض خدمات العقد لتحسين سرعة استعلام البيانات. هنا، أستخدم نقطة نهاية ZAN، فهي مناسبة جدًا للاستخدام في بيئة آسيا والمحيط الهادئ، سريعة جدًا وبأسعار معقولة، وتدعم العديد من السلاسل.
! سلسلة Web3 Starter: تنفيذ NFT DEX من الصفر
بعد ذلك، ضع زر الاتصال في الأماكن التي تحتاج إلى ربط المحفظة:
3.2. صك
في صفحة Mint يمكننا Mint NFT المستخدمة للاختبار. Mint هو إجراء كتابة العقد، هنا نحتاج لاستخدام طريقة useWriteContract الموجودة في wagmi. نحتاج فقط إلى تحديد عنوان العقد، ABI الخاصة بالعقد، وكذلك معلمات العقد.
! سلسلة Web3 Newbie: تنفيذ NFT DEX من الصفر
بعد ذلك، يمكنك تأكيد ذلك في المحفظة وسيكون لديك Mint ناجح.
3.3. المحفظة
هنا يجب عرض جميع NFTs الخاصة بالمستخدم. يمكننا استخدام بعض واجهات برمجة التطبيقات الخاصة بـ NFT للحصول عليها، هنا نستخدم واجهة برمجة التطبيقات الخاصة بـ opensea، لأن واجهات برمجة التطبيقات الخاصة بـ NFT التي تدعم سلسلة الاختبار sepolia ليست كثيرة.
بعد الحصول على قائمة NFT الخاصة بالمستخدم، يجب تحديد ما إذا كانت قد تم إدراجها بالفعل، حيث تدعم تلك التي لم تُدرج الإضافة، بينما تدعم تلك المُدرجة الإزالة. يتم تحديد ذلك من خلال الحصول على NFT التي قام المستخدم بإدراجها بالفعل عبر طريقة "getSellerListings" داخل عقد DEX، ثم بناءً على حقل "isAlive" لهذه الـNFT، يتم تحديد ما إذا كانت قيد الإدراج.
! سلسلة Web3 Starter: تنفيذ NFT DEX من البداية
عند الإدراج، يجب استدعاء طريقة العقد "listNFT"، وعند الإلغاء، يجب استدعاء طريقة "cancelListing". قبل الإدراج، يلزم استدعاء طريقة تفويض NFT الإضافية، لتفويض NFT للعقد، حتى يمكن نقل NFT تلقائيًا إلى المشتري بعد إتمام الصفقة.
! سلسلة Web3 Starter: تنفيذ NFT DEX من الصفر
3.4. شراء
أولاً، نحتاج إلى عرض NFT التي تم إدراجها بالفعل. على غرار عرض NFT المتاحة للمستخدم في Portfolio، فإن الاختلاف هنا هو أن هذا عرض عالمي، وليس لمستخدم معين، والآخر هو أننا بحاجة فقط إلى عرض NFT التي هي isAlive.
عند الشراء، استخدم طريقة « purchaseNFT »، وعند استدعاء هذه الطريقة، تحتاج إلى دفع السعر باستخدام ETH.
! سلسلة Web3 Newbie: تنفيذ NFT DEX من البداية
هنا هذا "value" هو ما يحتاج المشتري لدفعه من ETH.
تم الانتهاء من صفحة الواجهة الأمامية لـ DEX التي تحتوي على جميع القدرات الأساسية، ويمكننا نشرها على vercel.
هذا المقال كتب بواسطة فريق ZAN (حساب X @zan_team) من Yeezo (حساب X @GaoYeezo 75065).