Программа лояльности за день
В этом материале мы разберем, каким образом с помощью Minter можно за один день создать программу лояльности для любого сообщества. За пример возьмем интеграцию в Twitter.
С помощью Minter вы можете легко создать несколько типов программ лояльности:
- Локальные. “Неликвидные” брендированные монеты для вашего сообщества. По количеству монет у пользователей можно строить рейтинг топ-участников сообщества, а розыгрыш ценных призов среди держателей позволит повысить лояльность к вашему бренду. Можно обменивать монеты на скидки или товары вашего бренда, либо создайте собственную логику внутри сообщества.
- Глобальные. Глобальные брендированные монеты имеют моментальную ликвидность в блокчейне. А это означает, что получивший их пользователь может меньше чем за минуту потратить монету в каталоге услуг.
Благодаря обширной экосистеме Minter создание подобного сервиса заняло у меня меньше одного рабочего дня.
Полная документация о том, как создать свою монету, доступна на сайте minter.network/docs. Там же вы можете найти документацию по SDK и API Minter.
В создаваемом приложении мы будем выдавать монеты за лайк и ретвит выбранного поста. К участию допустим все аккаунты старше 1 года. Полученные монеты пользователи смогут моментально потратить, либо сохранить у себя в кошельке. Монеты будут отправляться через Minter Push.
Minter Push — это возможность быстро отправить средства другому человеку, которому даже не обязательно скачивать кошелек или где-то регистрироваться. Получатель может потратить средства на необходимые ему услуги и товары из подключенных магазинов.
https://vc.ru/crypto/136781-kak-pravilno-zapuskat-nagrady-polzovatelyam-na-primere-reddit-i-minter
Код приложения можно посмотреть на github: https://github.com/danil-lashin/twitter-rewards. Live-версия: https://twitter.lashin.io/
Инструменты
- Язык программирования — Golang
- SDK для взаимодействия с Minter: github.com/MinterTeam/minter-go-sdk
- Модуль авторизации через соц сети: github.com/markbates/goth
- SDK для запросов к Twitter: github.com/dghubble/go-twitter
- Веб-фреймворк: github.com/gin-gonic/gin
- База данных: github.com/syndtr/goleveldb
- UI: getbootstrap.com
- 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:
- Авторизуем пользователя:
2. Проверим дату регистрации. Если аккаунту меньше года, то откажем в получении награды.
3. Получим через API Twitter информацию о нашем посте. Проверим лайк и ретвит пользователя.
4. Проверим, не получал ли уже пользователь награды и запишем факт получения в базу.
Выплата монет
Для выплаты монет нам нужно создать Push-ссылку и отправить ее фронтенд части приложения.
Процесс создания push-ссылки состоит из трех этапов
- Отправляем запрос на создание нового контейнера и получаем адрес для пополнения (1 строка)
- Отправляем монеты на полученный адрес (3 строка)
- Активируем контейнер (5 строка)
Процесс отправки монет
- Собираем задачи на отправку монет из канала:
2. Получаем nonce аккаунта, с которого будем отправлять монеты:
3. Создаем multisend-транзакцию (отправка монет на несколько адресов) и подписываем ее нашим приватным ключом:
4. Отправляем транзакцию в Minter и дожидаемся, пока она будет включена в блок:
5. Выполняем коллбеки заданий, в которых активируются наши push-ссылки:
UI
Работа UI довольно примитивна, код можно посмотреть тут. Основная логика:
- Перенаправить пользователя на /login
- Получить данные от Twitter
- Отправить полученные данные на /callback
- Получить ответ, обработать ошибки
- В случае отсутствия ошибок дождаться зачисления монеты и открыть push-ссылку