Мы разработали плагин для Unlock Protocol для Discourse. Он позволяет закрывать темы за «крипто»-платным доступом.
Пользователи должны купить ваш NFT с помощью криптокошелька (MetaMask, WalletConnect), чтобы получить доступ к темам. Вы можете настроить его с любым токеном ERC20 в сетях Ethereum, xDai, Polygon… С прошлой недели также доступна разблокировка через оплату банковской картой.
Интересно, неужели существует финансовый инструмент, который можно было бы создать в Ethereum (или других криптоплатформах) для повторяющихся транзакций? Было бы здорово предложить подписку, где вы можете выбрать оплату X каждый месяц.
Можно ли настроить разблокировку для комментариев? Только первый комментарий или второй, но не заголовок темы и основной текст?
И можно ли добавить оплату в долларах через Visa или PayPal, а не через криптовалюту?
Основной механизм заключается в использовании механизма «одобрения» (approval), который предоставляют контракты ERC20.
Суть идеи в том, чтобы одобрить контракт третьей стороны, называемый «покупателем» (purchaser), чья единственная задача — приобретать членства от имени пользователей, когда они истекают (или скоро истекут). Таким образом, членство может быть «возобновлено» только тогда, когда оно почти истекло или уже полностью истекло.
Одной из проблем, которую мы пытаемся решить, является поиск того, кто будет инициировать транзакцию в контракте покупателя. Прямо сейчас подход заключается в том, чтобы сделка покупки «возмещала» расходы тому, кто инициирует транзакцию, покрывая таким образом комиссии за газ (gas fees). Я думаю, мы можем использовать возможности «Flashbots», которые занимаются арбитражем, для решения этой задачи!
Это определенно одна из задач, над которыми мы сейчас работаем!
Удивительно, некоторые финансовые инструменты, предлагаемые смарт-контрактами, меня просто завораживают. Я думаю, это может стать чрезвычайно мощным способом финансирования правильных сообществ.
В частности, у нас уже есть Discourse Subscriptions Plugin, поэтому, возможно, PR, добавляющий режим «Разблокировка» вместо «Stripe», может стать интересным путём развития.
Я создал два контракта блокировки в панели управления Unlock:
A. Блокировка для пользователей, у которых есть токены (1000 < количество < 5000)
B. Блокировка для пользователей, у которых более 5000 токенов
Для A я хочу добавить их в group A на Discourse.
Для B я хочу добавить их в group B на Discourse.
В настоящее время плагин Unlock поддерживает только один контракт блокировки на Discourse. Есть ли какой-то способ достичь этой цели?
Так как это неофициальный плагин, я переместил ваш пост в тему плагина Unlock, поскольку считаю, что это лучшее место для получения поддержки от людей, которые лучше разбираются в нём.
К сожалению, из-за праздничного сезона поддержка этого плагина несколько ограничена, но (на всякий случай) я только что установил его на свой тестовый сайт и тоже столкнулся с блокировкой и ошибкой «Oops - Error 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/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'
Похоже, что-то конфликтует с плагином Chat. Если отключить Chat через консоль Rails, я могу получить доступ к своему сайту в обычном режиме (включая страницу /admin/plugins/discourse-unlock).