لقد قمنا بتطوير إضافة لـ بروتوكول Unlock لمنصة Discourse. تتيح هذه الإضافة لك قفل المواضيع خلف جدار دفع يعتمد على “العملات المشفرة”.
يتعين على المستخدمين شراء NFT الخاص بك عبر محفظتهم المشفرة (مثل MetaMask أو WalletConnect) للوصول إلى المواضيع. يمكنك تكوين الإضافة باستخدام أي عملة ERC20 على شبكات Ethereum أو xDai أو Polygon… ومنذ الأسبوع الماضي، أصبح بإمكانك أيضًا فتح المحتوى عبر الدفع ببطاقة الائتمان.
مثير للاهتمام، أتساءل عما إذا كان هناك أداة مالية يمكن تصميمها على إيثريوم (أو محركات التشفير الأخرى) للتعامل مع المعاملات المتكررة. سيكون الأمر رائعًا إلى حد ما تقديم خدمة اشتراك حيث تختار دفع مبلغ X كل شهر.
هل يمكننا إعداد فتح القفل للتعليق؟ هل هو فقط التعليق الأول أو التعليق الثاني وليس عنوان الموضوع ومحتواه الرئيسي؟
وهل يمكننا إضافة الدفع بالدولار عبر Visa أو PayPal وليس العملات المشفرة؟
الآلية الأساسية هي استخدام آلية “الموافقة” التي توفرها عقود ERC20.
الفكرة الأساسية هي الموافقة على عقد طرف ثالث يُسمى “المشتري”، ومهمته الوحيدة هي شراء العضويات نيابةً عن المستخدمين عندما تنتهي صلاحيتها (أو تكون على وشك الانتهاء). لذا، بشكل أساسي، لا يمكن “تجديد” العضوية إلا عندما تكون على وشك الانتهاء أو منتهية الصلاحية تمامًا.
واحد من التحديات التي نسعى لحلها هو تحديد من سيُفعّل المعاملة في عقد المشتري. حاليًا، النهج المتبع هو جعل عملية الشراء “تُعوّض” الشخص الذي يُفعّل المعاملة، بحيث تغطي رسوم الغاز. أعتقد أننا يمكننا الاستفادة من “Flashbots” الذين يقومون بالمراجحة لتحقيق ذلك!
بما أنه مكون إضافي غير رسمي، فقد نقلت مشاركتك إلى موضوع المكون الإضافي Unlock حيث أعتقد أنه سيكون مكانًا أفضل للحصول على الدعم من الأشخاص الذين يعرفون المزيد عنه.
أخشى أن الدعم لهذا المكون الإضافي قليل جدًا بسبب موسم العطلات، ولكن (على أي حال) لقد قمت للتو بتثبيته على موقع الاختبار الخاص بي وأواجه أيضًا مشكلة في الوصول مع ظهور رسالة “عذرًا - خطأ 500” مع نفس الخطأ المسجل:
رسالة
HasCustomFields::NotPreloadedError (تمت محاولة الوصول إلى حقل مخصص غير محمل مسبقًا 'unlock-lock' على الفئة 'Category'. هذا محظور لمنع استعلامات N+1.)
app/models/concerns/has_custom_fields.rb:175:in `[]'
(eval):37:in `_fast_attributes'
(eval):6:in `_fast_attributes'
app/controllers/application_controller.rb:637:in `preload_current_user_data'
app/controllers/application_controller.rb:437:in `preload_json'
app/controllers/application_controller.rb:413:in `block in with_resolved_locale'
app/controllers/application_controller.rb:413:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/middleware/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:368:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:209:in `call'
تتبع الأخطاء
app/models/concerns/has_custom_fields.rb:175:in `[]'
plugins/discourse-unlock/plugin.rb:63:in `block (2 levels) in activate!'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:375:in `include?'
(eval):37:in `_fast_attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:456:in `attributes'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:480:in `_serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:359:in `serializable_hash'
active_model_serializers (0.8.4) lib/active_model/serializer.rb:347:in `as_json'
plugins/chat/app/serializers/chat_channel_serializer.rb:51:in `chatable'
(eval):6:in `_fast_attributes'
أعتقد أن هناك تعارضًا مع المكون الإضافي للدردشة بطريقة ما. إذا قمت بتعطيل الدردشة عبر وحدة تحكم rails، فيمكنني الوصول إلى موقعي كالمعتاد (بما في ذلك الصفحة /admin/plugins/discourse-unlock).