Децентрализованные лайки - GetLoginEth/like GitHub Wiki
Общая информация
Система децентрализованных лайков работает на основе GetLogin и позволяет ставить лайки для любого контента. Вся информация о лайках хранится в блокчейне Ethereum в тестовой сети Rinkeby.
Лайки встраиваются разработчиком на собственный веб-сайт и привязываются к определенным идентификаторам контента (URL, запись в блоге, изображение и проч.). При посещении страницы со встроенными лайками, пользователь может видеть какое количество людей ставило лайки и ставил ли он сам лайк.
Для того, чтобы получать информацию о лайках на любом ресурсе, можно использовать Chrome расширения лайков.
Видео-демонстрация https://youtu.be/9tqukUh-euc
Как работает встраиваемый лайк
Лайки состоят из смарт-контрактов и javascript файлов для встраивания интерфейса лайков.
Для определения информации о количестве лайков и для совершения лайка используется хэшированный с помощью keccak256 идентификатор ресурса.
При посещении страницы со встроенными лайками, первым загружается скрипт LikeInjector.js, который находится на стороне владельца лайков.
После загрузки, скрипт с помощью переданных параметров определяет куда и какое количество лайков нужно встраивать. Для каждого лайка создается iframe с module.html, в который передается информация об идентификаторе ресурса.
Независимо от количества iframe для лайков, создается еще один iframe для встраивания GetLogin.
Фреймы лайков и GetLogin обмениваются информацией между собой с помощью механизма postMessage. Все фреймы изолированы между собой для исключения несанкционированных действий со стороны сайта, на который они встраиваются.
Как работает лайк в Chrome расширении
Во время работы расширения, открывается фоновая страницы с GetLogin. С помощью нее проверяется наличие доступа к аккаунту пользователя в расширении.
При посещении любой страницы через браузер, расширение хэширует ссылку с помощью keccak256 и запрашивается информацию по этому хэшу из контракта лайков с помощью GetLogin.
Информация о количестве лайков и делал ли лайк текущий пользователь, выводится в иконке расширения.
По нажатию на иконку расширения, открывает небольшое окно, в котором предлагается сделать лайк/убрать лайк для текущей страницы в браузере.
Информация о совершаемых действиях передается с помощью postMessage в GetLogin.
Отдельная ситуация для видео с Youtube. Расширение совершает лайк не по URL, а по id видео. Таким образом, информация о видео открытом на разных доменах (www.youtube.com, youtube.com, youtu.be) будет одна и та же.
Как лайки получают доступ к GetLogin
Получение информации о лайках из блокчейна и отправка транзакций происходит через GetLogin. Для этого конечный пользователь должен дать доступ к своему аккаунту по специальной ссылке. Переход по этой ссылке осуществляется при первом нажатии на лайк.
Ссылки
Пример встраиваемых на страницу Лайков. Отображение работает корректно только для авторизованных в GetLogin пользователей: https://swarm-gateways.net/bzz:/96d84e31f04fcf8265c3f887f912a0b29a5651adac75a6e1e269bdee8db39c66/example.html
Репозиторий Лайков: https://github.com/GetLoginEth/like
Репозиторий Chrome расширениия Лайков: https://github.com/GetLoginEth/like-chrome