Программа лояльности на блокчейне Minter за один день

4 года назад 0

В этом материале мы разберем, каким образом с помощью Minter можно за один день создать программу лояльности для любого сообщества. За пример возьмем интеграцию в Twitter.

С помощью Minter вы можете легко создать несколько типов программ лояльности:

  1. Локальные. “Неликвидные” брендированные монеты для вашего сообщества. По количеству монет у пользователей можно строить рейтинг топ-участников сообщества, а розыгрыш ценных призов среди держателей позволит повысить лояльность к вашему бренду. Можно обменивать монеты на скидки или товары вашего бренда, либо создайте собственную логику внутри сообщества.
  2. Глобальные. Глобальные брендированные монеты имеют моментальную ликвидность в блокчейне. А это означает, что получивший их пользователь может меньше чем за минуту потратить монету в каталоге услуг.

Полная документация о том, как создать свою монету, доступна на сайте minter.network/docs. Там же вы можете найти документацию по SDK и API Minter.

В создаваемом приложении мы будем выдавать монеты за лайк и ретвит выбранного поста. К участию допустим все аккаунты старше 1 года. Полученные монеты пользователи смогут моментально потратить, либо сохранить у себя в кошельке. Монеты будут отправляться через Minter Push.

Minter Push — это возможность быстро отправить средства другому человеку, которому даже не обязательно скачивать кошелек или где-то регистрироваться. Получатель может потратить средства на необходимые ему услуги и товары из подключенных магазинов.

Код приложения можно посмотреть на github: https://github.com/danil-lashin/twitter-rewards. Live-версия: https://twitter.lashin.io/

Инструменты

  1. Язык программирования — Golang
  2. SDK для взаимодействия с Minter: github.com/MinterTeam/minter-go-sdk
  3. Модуль авторизации через соц сети: github.com/markbates/goth
  4. SDK для запросов к Twitter: github.com/dghubble/go-twitter
  5. Веб-фреймворк: github.com/gin-gonic/gin
  6. База данных: github.com/syndtr/goleveldb
  7. UI: getbootstrap.com
  8. JS фреймворк: vuejs.org

Конфигурация приложения

Конфигурацию будем хранить в json формате. Для этого опишем структуру Config с нужными нам полями:

  • TwitterKey, TwitterSecret — ключи API twitter.
  • TwitterCallback — публичный адрес нашего сервиса. На него Twitter будет перенаправлять пользователя после авторизации.
  • MinterMnemonic— мнемоническая фраза адреса, с которого будем раздавать монетки.
  • MinterPushBearer — Токен доступа для https://minterpush.com/
  • Coin, Amount, Sender — Монета, которую будем раздавать, ее количество и имя отправителя.
  • TweetID — id поста, который нужно лайкнуть и ретвитнуть.
  • ListenAt — хост и порт, который будет слушать HTTP сервис приложения.

Читать конфигурацию будем из указанного файла простой функцией:

HTTP сервис

Для создания HTTP сервиса воспользуемся пакетом gin. Для полноценной работы сервиса нам нужно имплементировать логику обращения по трем путям:

  • /callback — Обработка авторизации пользователя, проверка условий выдачи монет, создание push-ссылки
  • /login — Перенаправление пользователя на авторизацию через Twitter
  • / — Домашняя страница

Авторизация через Twitter

Чтобы узнать, выполнил ли пользователь условия, нам нужно авторизовать его через Twitter. Самый простой способ — воспользоваться пакетом goth:Конфигурация сервиса

Проверка выполнения условий

0. Перенаправляем пользователя на Twitter для авторизации с помощью goth:

  1. Авторизуем пользователя:

2. Проверим дату регистрации. Если аккаунту меньше года, то откажем в получении награды.

3. Получим через API Twitter информацию о нашем посте. Проверим лайк и ретвит пользователя.

4. Проверим, не получал ли уже пользователь награды и запишем факт получения в базу.

Выплата монет

Для выплаты монет нам нужно создать Push-ссылку и отправить ее фронтенд части приложения.

Процесс создания push-ссылки состоит из трех этапов

  1. Отправляем запрос на создание нового контейнера и получаем адрес для пополнения (1 строка)
  2. Отправляем монеты на полученный адрес (3 строка)
  3. Активируем контейнер (5 строка)

Процесс отправки монет

  1. Собираем задачи на отправку монет из канала:

2. Получаем nonce аккаунта, с которого будем отправлять монеты:

3. Создаем multisend-транзакцию (отправка монет на несколько адресов) и подписываем ее нашим приватным ключом:

4. Отправляем транзакцию в Minter и дожидаемся, пока она будет включена в блок:

5. Выполняем коллбеки заданий, в которых активируются наши push-ссылки:

UI

Работа UI довольно примитивна, код можно посмотреть тут. Основная логика:

  1. Перенаправить пользователя на /login
  2. Получить данные от Twitter
  3. Отправить полученные данные на /callback
  4. Получить ответ, обработать ошибки
  5. В случае отсутствия ошибок дождаться зачисления монеты и открыть push-ссылку

Нам очень интересно ваше мнение! Оставьте свой комментарий пожалуйста!