Как установить скрытый или видимый майнер на свой сайт
extra_toc

 

Несомненным лидером майнинга через браузер является сервис coinhive.com. Данный сервис специализируется на добычи криптовалюты Monero (XMR), так как она наилучшим образом подходит для майнинга через браузер. Скрипт coinhive.com будет запускаться в браузере ваших посетителей. Таким образом можно отказаться, например, от показа рекламы на сайте. 

Видимый майнинг

В настоящее время coinhive.com предлагает несколько вариантов открытого майнинга на Вашем сайте:

  1. CAPTCHA - переход по ссылке будет невозможен, пока ПК пользователя не решит заданное число хешей.
  2. Короткие ссылки - аналогично капче, только дополнительно будет произведен переход на промежуточную страницу, где ПК пользователя решит заданное количество хешей.
  3. Simple Miner UI - на Ваш сайт встраивается визуальный майнер, заданного размера. Если пользователь Вашего ресурса захочет Вас поддержать, то может сам запустить майнер, чтобы Вы немного заработали.
  4. JavaScript Miner - в таком варианте пользователю будет предложено запустить майнер или нет при переходе на Ваш сайт

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

Загрузка майнера Coinhive происходит с другого домена (authedmine.com) и отключает начало майнинга miner.start();  до разрешения пользователя использовать его вычислительные ресурсы.

opt in screenshot

Скрытый майнинг

Вы можете загрузить майнер по старому адресу https://coinhive.com/lib/coinhive.min.js если не хотите уведомлять пользователей об использовании майнера на сайте. С таким скрытым майнингом активно и успешно борются блокировщики рекламы, разработчики браузеров, антивирусов и поисковиков.

Краткие примеры настройки Coinhive

Загрузка майнера Coinhive и начало майнинга с использованием настроек – 70% нагрузка на процессор, не запускать на мобильных устройствах:

  1. <script src="https://authedmine.com/lib/authedmine.min.js"></script>
  2. <script>
  3. var miner = new CoinHive.Anonymous('siteKey', {throttle: 0.3});
  4. if (!miner.isMobile() && !miner.didOptOut(14400)) {
  5. miner.start();
  6. }
  7. </script>

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

  1. <script>
  2. // Слушаем события
  3. miner.on('found', function() { /* Хеш найден */ })
  4. miner.on('accepted', function() { /* Хеш подтвержден пулом */ })
  5.  
  6. // Обновление статистики раз в секунду
  7. setInterval(function() {
  8. var hashesPerSecond = miner.getHashesPerSecond();
  9. var totalHashes = miner.getTotalHashes();
  10. var acceptedHashes = miner.getAcceptedHashes();
  11.  
  12. // Вывод в HTML элементы...
  13. }, 1000);
  14. </script>

Справка по Coinhive API

Конструкторы

CoinHive.Anonymous(siteKey [, options])

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

CoinHive.User(siteKey, userName [, options])

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

CoinHive.Token(siteKey, targetHashes [, options])

Создается майнер и прекращает майнинг после нахождения определенного количества хешей (targetHashes). По умолчанию пул использует сложность 256, поэтому значение должно быть кратно 256. Минимум: 256, не советую ставить больше 1024, т.к. чем больше значение, тем дольше процесс вычисления.

Опции [options]

threads Число потоков, которое должен использовать майнер. Это означает сколько ядер процессора задействовать для майнинга.
throttle Время, в течении которого потоки должны простаивать. По умолчанию 0.
forceASMJS Если true, то будет использоваться  asm.js реализация. Если false, то будет использоваться более быстрая WebAssembly версия. По умолчанию “false”.
theme Цвет темы для всплывающего окошка с вопросом о разрешении майнинга пользователям – работает только с https://authedmine.com/lib/authedmine.min.js. Можно выбрать “light” или “dark”. По умолчанию “light”.
language Язык, на котором будет задаваться вопрос о разрешении майнинга пользователям – работает только с https://authedmine.com/lib/authedmine.min.js. Поддерживаемые языки: ab, af, ar, be, bg, bs, ca, cs, da, de, el, en, eo, es, et, eu, fa, fi, fr, he, hi, hr, hu, id, it, ja, ka, ko, lt, lv, mr, ms, nb, nl, nn, no, os, pl, pt, pt-BR, ro, ru, si, sl, sq, sr, sv, ta, th, tr, uk, vi, yo, zh.

Пример использования настройки Coinhive майнера:

  1. var miner = new CoinHive.User('siteKey', 'poboq', {
  2. threads: 4,
  3. throttle: 0.8,
  4. forceASMJS: false,
  5. theme: 'dark',
  6. language: 'auto'
  7. });

Методы

.start([mode])

Соединяет с пулом и начинает майнинг. Есть несколько режимов работы:

CoinHive.IF_EXCLUSIVE_TAB Майнер начнет работу если в других вкладках нет работающих майнеров.
CoinHive.FORCE_EXCLUSIVE_TAB Майнер начнет работу в любом случае и остановит все майнеры в других вкладках, кроме майнеров CoinHive.FORCE_MULTI_TAB
CoinHive.FORCE_MULTI_TAB Майнер будет работать всегда. Майнеры в других вкладках не останавливаются и данный майнер не смогут отключить другие майнеры.

Пример:

  • miner.start(CoinHive.IF_EXCLUSIVE_TAB);

.stop()

Останавливает майнер и отключает от пула

.isRunning()

Возвращает значение true|false. Определяет запущен майнер или нет.

.isMobile()

Возвращает значение true|false. Проверяет с какого устройства зашел пользователь на сайт. Можно использовать только для запуска майнера на ПК.

Пример:

  • // Запускает майнер только на ПК
  • if (!miner.isMobile()) {
  • miner.start();
  • }

.didOptOut(seconds)

Возвращает значение true|false. Если пользователь отказался запускать майнер, то в течение следующих N секунд ему не будет предлагаться запустить майнер. По умолчанию 14400 секнд (4 часа). Используется для повторного отображения всплывающего окна с вопросом о запуске майнера.

Пример:

  • // Майнер запустится только если разрешит пользователь,
  • // повторное отображение всплывающего окна через 4 часа:
  • if (!miner.didOptOut(60 * 60 * 4)) {
  • miner.start();
  • }

.on(event, callback)

Вызов функции при определенном событии.

Пример:

  • miner.on('authed', function(params) {
  • console.log('Token name is: ', miner.getToken());
  • });
  •  
  • miner.on('error', function(params) {
  • if (params.error !== 'connection_error') {
  • console.log('The pool reported an error', params.error);
  • }
  • });
  •  
  • miner.on('optin', function(params) {
  • if (params.status === 'accepted') {
  • console.log('User accepted opt-in');
  • }
  • else {
  • console.log('User canceled opt-in');
  • }
  • });

.hasWASMSupport()

Возвращает значение true|false. Проверяет поддержку WebAssembly браузером пользователя. Если не поддерживается, то будет использоваться более медленный способ asm.js.

.getNumThreads()

Возвращает количество потоков. Можно использовать для оптимальной настройки майнера до его запуска.

.setNumThreads(numThreads)

Устанавливает количество потоков. По умолчанию 1. Не рекомендуется использовать большие значения.

.getThrottle()

Возвращает значение throttle.

.setThrottle(throttle)

Устанавливает время простоя потоков. Значение 0.5 означает, что потоки будут простаивать 50% времени, 0.8 — 80%.

.getToken()

Возвращает имя токена, если майнер сделан с использованием CoinHive.Token

.getHashesPerSecond()

Возвращает количество хешей в секунду. Обновление происходит 1 раз в секунду.

.getTotalHashes([interpolate])

Возвращает количество вычисленных хешей.

.getAcceptedHashes()

Возвращает количество принятых хешей.