تحمل كلمة «سكّ» كثيرًا من الرومانسية. فهي توحي بختم عملة، أو ضغط ميدالية، أو بثّ الحياة الإبداعية في ملف. لكن الواقع على السلسلة أضيق نطاقًا، وأكثر فائدة حين تتضح صورته. السكّ هو استدعاء دالة. يكتب عقد ذكي سجلًا جديدًا واحدًا في بنية ربط تفيد بأن «الرمز #N مملوك للعنوان X»، ويصدر إدخالًا في السجل، ثم تنتهي المعاملة. هذا كل شيء. أما سائر الأمور — العمل الفني والمزاد ودور Discord — فليست سوى تجهيزات تحيط بتغيير الحالة الوحيد هذا.
هذا المقال هو الجزء 3 من سلسلة «NFTs 101» عن الرموز غير القابلة للاستبدال. إذا لم تقرأ بعد ماهيّة NFT فعلًا أو مكان وجود البيانات الوصفية والصورة فعلًا، فستمنحك هاتان المقالتان المصطلحات اللازمة لفهم ما يلي. نركّز هنا على لحظة الإنشاء نفسها: تكلفتها، وآلية عملها، وكيف أعاد نمط يُسمّى «السكّ الكسول» تشكيل اقتصاد المبدعين بهدوء.
ما هو السكّ فعلًا على مستوى البروتوكول
معيار ERC-721 مقتضب جدًا في هذه النقطة. تنص المواصفة على أن «إنشاء NFT («السكّ») وإتلافه («الحرق») غير مشمولين في المواصفة». بعبارة أخرى، لا يخبرك المعيار بكيفية إنشاء رمز، بل يحدّد فقط الهيئة التي يجب أن يكون عليها الرمز بعد إنشائه.
يكمن العرف في الحدث Transfer، الذي «يصدر عند إنشاء NFT (from == 0) وإتلافه (to == 0)». هذا العنوان الصفري — 0x0000000000000000000000000000000000000000 — هو العلامة الدلالية. فحدث Transfer الذي يكون فيه المرسِل هو العنوان الصفري يعني: «لم يكن هذا الرمز موجودًا من قبل، لكنه أصبح موجودًا الآن». يرى مستكشف الكتل هذا الإدخال في السجل ويعرضه على أنه «سكّ».
عمليًا، تعيد عقود NFT المستخدمة في الإنتاج كلها تقريبًا استخدام تطبيق OpenZeppelin بدلًا من كتابة تطبيقاتها الخاصة. وتتولى دالتان داخليتان العمل. تنفّذ _mint «سكّ tokenId ونقله إلى to» — إذ تكتب خانة الملكية، وتزيد عدّاد الرصيد، وتصدر الحدث. وتنفّذ _safeMint كل ذلك، وتتحقق أيضًا من قبول to — فإذا كان to يشير إلى عقد ذكي، وجب أن يطبّق IERC721Receiver.onERC721Received، تأكيدًا على أن العقد يعرف فعلًا كيفية الاحتفاظ بـ NFT. وينطبق شرطان دائمًا على _mint: يجب ألا يكون tokenId موجودًا مسبقًا، وألا يكون to هو العنوان الصفري (إذ يُخصّص العنوان الصفري لمصبّ الحرق).
ويكتسب الفرق بين _mint و_safeMint أهمية لأن تنفيذ _mint عادي إلى عقد لا يطبّق واجهة الاستقبال سيؤدي إلى احتجاز الرمز فيه إلى الأبد. وتحذّر وثائق OpenZeppelin نفسها: «لا يُنصح باستخدام هذه الطريقة؛ استخدم ERC721._safeMint كلما أمكن».
السوق الأولية مقابل السوق الثانوية
السكّ هو حدث السوق الأولية. فهو المرة الأولى التي يوجد فيها الرمز على السلسلة، وعادةً ما تكون المعاملة التي تنشئه هي نفسها التي تنقله إلى أول مشترٍ له. وتذهب عائدات البيع إلى المبدع أو خزينة العقد.
كل ما يأتي بعد ذلك يقع في السوق الثانوية. عندما يبيع جامع رموزه إلى جامع آخر، لا تُنشأ خانة تخزين جديدة؛ بل يعيد العقد تعيين سجل tokenId → owner القائم إلى عنوان جديد. فالرمز موجود بالفعل، ولا يتحرك سوى المؤشر.
وهنا أيضًا يأتي دور إتاوات ERC-2981. يتيح معيار الإتاوات للعقد أن يعلن: «عند البيع في السوق الثانوية، يُرجى إرسال X% إلى هذا العنوان»، وتلتزم الأسواق التي تراعي المعيار بذلك. لكن إنفاذ الإتاوات يقع على عاتق الأسواق، لا البروتوكول؛ فالبلوكتشين نفسه لا يمنع تحويلًا مباشرًا بين طرفين من تجاوزها. كما يفسّر فهم الفرق بين السوق الأولية والثانوية نمطًا متكررًا: حروب رسوم الغاز يوم السكّ عند طرح مجموعات رائجة (لأن الجميع يحاولون المطالبة برموز أولية نادرة في الوقت نفسه)، مقابل عمليات إعادة البيع الهادئة والرخيصة بعد أشهر (لأنه لا تُكتب بيانات جديدة في التخزين، بل يُعاد تعيينها فحسب).
تفاصيل رسوم الغاز عند السكّ
يتطلب السكّ إنفاق المال لأن الكتابة في تخزين البلوكتشين تكلف مالًا. ويساعدك فهم كيفية عمل معاملة على البلوكتشين على استيعاب ذلك، كما يوضح لماذا تكلف رسوم الغاز مالًا حقيقيًا خلفيته الاقتصادية. باختصار، عند السكّ:
- تبدأ كل معاملة على Ethereum بتكلفة أساسية قدرها 21,000 وحدة غاز لمجرد تنفيذها.
- تبلغ تكلفة
SSTORE_SET_GAS20,000 وحدة غاز لتغيير خانة تخزين من الصفر إلى قيمة غير صفرية. وهذا أكبر بند منفرد في تكلفة السكّ. - تكلّف كل خانة تخزين جديدة تمسّها عملية السكّ — أي بنية الربط
tokenId → owner، وعدّاد الرصيد لكل عنوان، وأحيانًا معرّف URI لكل رمز — 20,000 وحدة غاز إضافية. - تكلّف بيانات الاستدعاء (وسيطات الدالة التي ترسلها) 16 وحدة غاز لكل بايت غير صفري بموجب EIP-2028 (بعد تخفيضها من 68)، و4 وحدات غاز لكل بايت صفري.
- يضيف حدث
Transferنفسه بضعة آلاف من وحدات الغاز مقابل الموضوعات المفهرسة.
بجمع هذه التكاليف، تتراوح تكلفة سكّ ERC-721 المعتادة بين 50,000 و150,000 وحدة غاز، بحسب عدد خانات التخزين التي يمسّها العقد وما إذا كان يجمع العمليات في دفعة واحدة. و«السكّ المجاني» ليس مجانيًا فعلًا رغم اسمه؛ فالمبدع يكتفي بعدم فرض سعر للسكّ فوق رسوم الغاز، بينما يظل المشتري يدفع رسوم الشبكة.
السكّ الكسول — سكّ بلا رسوم غاز يحدث عند أول تحويل
إذا تأملت ما سبق، ستتضح لك أوجه القصور. يدفع المبدع رسوم الغاز مقدمًا لإدراج 10,000 رمز على السلسلة، لكن معظم المبدعين لا يعرفون عدد الرموز التي ستُباع فعلًا. إن الدفع لسكّ رموز لا يشتريها أحد خسارة محضة. يغيّر السكّ الكسول توقيت العملية: لا تسكّ حتى يظهر مشترٍ، ودع المشتري يدفع رسوم الغاز.
تعتمد الآلية على EIP-712، الذي تصفه وثائق Ethereum بأنه «معيار لتجزئة البيانات المنظّمة ذات الأنواع وتوقيعها، بدلًا من مجرد سلاسل من البايتات». عمليًا، يتيح للمبدع توقيع رسالة منظّمة خارج السلسلة — قسيمة تتضمن ID الرمز، وURI البيانات الوصفية، والسعر، وقواعد الأهلية — يمكن لعقد ذكي التحقق منها تشفيريًا لاحقًا. وتعرض المحافظ الحقول كنص مقروء للبشر بدلًا من كتلة من المحارف السداسية العشرية؛ وهذه ميزة أمان، وهي أيضًا سبب اعتماد EIP-712 معيارًا افتراضيًا في القطاع.
عندما يقرر مشترٍ الشراء، يستدعي دالة redeem في عقد السكّ، ويمرر القسيمة وتوقيع المبدع. يتحقق العقد من التوقيع، وينفّذ _safeMint ضمن المعاملة نفسها، ويوجّه سعر البيع إلى المبدع. ويدفع المشتري رسوم الغاز، فيما لا يدفع المبدع شيئًا مقابل المخزون غير المباع. وقد ساهمت OpenSea تاريخيًا في انتشار هذا النمط ضمن إصدارات المبدعين؛ وتستخدم Rarible وZora وكثير من منصات السكّ المستقلة صيغًا منه. (بروتوكول Seaport، وهو بروتوكول OpenSea الأحدث، مخصص للتداول لا للسكّ الكسول، لكنه يستخدم أنماطًا مشابهة للطلبات الموقّعة وفق EIP-712.)
أنماط السكّ الشائعة
بعد فهم الآليات، تصبح صيغ البيع مجرد قواعد تُضاف إلى _safeMint:
- سعر ثابت: يكلف كل رمز المبلغ الثابت نفسه بعملة ETH.
- مزاد هولندي: يبدأ السعر مرتفعًا ثم ينخفض وفق جدول زمني إلى أن ينفد المعروض.
- قائمة السماح / القائمة البيضاء: يُسمح للعناوين الموافق عليها مسبقًا — وغالبًا ما يُثبت استحقاقها ببرهان Merkle بدلًا من قائمة ضخمة على السلسلة — بالسكّ مبكرًا، عادةً بخصم.
- سكّ مجاني: لا يدفع المشتري سوى رسوم الغاز؛ ويعتمد نموذج إيرادات المبدع على إتاوات السوق الثانوية.
- الكشف بعد السكّ: يشير كل رمز في البداية إلى صورة مؤقتة، ثم يغيّر المبدع علامةً بعد انتهاء السكّ للكشف عن البيانات الوصفية الحقيقية. ويمنع ذلك استغلال الندرة أثناء السكّ.
- السكّ الكسول: لا توجد رموز على السلسلة إلى أن يشتري أحدها؛ و«المجموعة» هي قائمة قسائم موقّعة على خادم المبدع.
الاستدعاء نفسه _mint في الأساس؛ وتختلف القواعد المتعلقة بالتوقيت والجهة والسعر.
ما الذي قد يحدث من مشكلات
يُعدّ السكّ من العمليات الأكثر عرضة للإخفاق التي يواجهها المستخدم الجديد، ويرجع ذلك غالبًا إلى أنه يحدث تحت ضغط الوقت وعلى مرأى الجميع.
- المعاملات الفاشلة تظل تكلّف رسوم غاز. إذا أُبطلت معاملة السكّ — بسبب نفاد المعروض، أو عدم إدراجك في القائمة المسموح لها، أو حدوث خطأ في العقد — فستظل الشبكة تفرض عليك رسومًا مقابل العمل الذي أنجزته قبل إبطالها.
- الاستباق. في عمليات الطرح الرائجة، تراقب الروبوتات مجمّع المعاملات غير المؤكدة وتدفع رسوم أولوية أعلى لتتقدم على المشترين البشر. تضغط على «تأكيد»، فيُباع المعروض بالكامل، ثم تُدرج معاملتك في كتلة لاحقة بعد أن يصبح الطابور فارغًا.
- معاملات سكّ عالقة. إذا حددت سعر غاز منخفضًا جدًا مقارنةً بطلب الشبكة، فستبقى معاملتك في مجمّع المعاملات غير مؤكدة من دون تعدينها. تتيح لك معظم المحافظ إما تسريعها (باستبدالها بنسخة ذات رسوم أعلى) أو إلغاؤها (باستبدالها بتحويل قيمته صفر إلى نفسك باستخدام الرقم التسلسلي نفسه).
- إعادة استخدام التوقيع في السكّ الكسول. قد يسمح عقد القسائم سيئ الصياغة باسترداد التوقيع نفسه مرتين. أما العقود المكتوبة جيدًا فتسجل القسائم المستهلكة باستخدام رقم تسلسلي أو جدول ربط، وترفض تكرارها.
- المستلم الخطأ مع
_mint. إذا استخدم العقد_mintالعادي بدلًا من_safeMint، وسكّ مشترٍ الرمز إلى محفظة عقد ذكي لا تنفّذ واجهة استقبال ERC-721، فسيظل الرمز عالقًا فيها. ولهذا لا تشجع OpenZeppelin صراحةً على استخدام_mintالمجرّد في التدفقات الموجهة للجمهور.
لا شيء من هذه المشكلات غريب أو نادر. إنها جزء من واقع السكّ اليومي على شبكة عامة، ويسهل التعرّف على كل واحدة منها بعد أن ترى التغيير الذي طرأ على الحالة.
أهم النقاط
- السكّ هو استدعاء دالة محدد يضيف سجلًا جديدًا واحدًا إلى جدول ربط الملكية، ويصدر حدث
Transferمن العنوان الصفري. أما العمل الفني والمزاد فهما عناصر تحيط بتلك اللحظة. - يُعدّ
_safeMintمن OpenZeppelin الخيار الافتراضي للإنتاج، لأنه يمنع بقاء الرموز عالقة في عقود لا تستطيع الاحتفاظ بها. فضّله على_mint. - يكتب سكّ السوق الأولية بيانات تخزين جديدة (مكلف)، بينما لا تعيد التحويلات في السوق الثانوية سوى إسناد المؤشرات (أقل كلفة بكثير). لذلك تتحول أيام السكّ إلى حروب رسوم غاز، بينما لا تكون إعادة البيع كذلك عادةً.
- يستخدم السكّ الكسول قسائم موقعة وفق EIP-712 لتأجيل الكتابة على السلسلة إلى حين الشراء الأول. فلا يدفع المنشئ شيئًا مقابل المخزون غير المباع، ويدفع المشتري رسوم الغاز التي كان سيدفعها على أي حال.
- تظل معاملات السكّ الفاشلة تكلّف رسوم غاز، ويمكن استبدال المعاملات العالقة، والاستباق سمة من سمات مجمّعات المعاملات العامة، لا خللًا فيها. ضع ميزانية مناسبة ولا تُجرِّ عملية السكّ بدافع الذعر.



