Настройки Coinhive для майнинга Monero на сайте

coinhive

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

Coinhive — javascript для майнинга Monero, который вы можете встроить на свой сайт. Скрипт будет запускаться в браузере ваших посетителей. Таким образом можно отказаться, например, от показа рекламы на сайте. Подробнее я писал о нем в статье «Coinhive – javascript для майнинга Monero на вашем сайте».

Javascript майнер

Coinhive JavaScript майнер позволяет встроить майнер Monero прямо в ваш сайт. Майнер не имеет пользовательского интерфейса, поэтому в ваших интересах предупреждать пользователей сайта о его наличии, чтобы не потерять свою аудиторию.

Если вам необходим простой вариант встраивания майнера, то данную статью можно дальше не читать, а воспользоваться кодом ниже, не забыв поменять siteKey на свой. При этом никакие настройки Coinhive мы не делаем и используем все по умолчанию:

<script src="https://coinhive.com/lib/coinhive.min.js" type="text/javascript"></script>
<script type="text/javascript>
var miner = new CoinHive.User('KOEPJ7apFGDo85uf5vrjD3XvK90AdOdO', 'pogrommist');
miner.start();
</script>

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

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

<script src="https://authedmine.com/lib/authedmine.min.js" type="text/javascript"></script>
<script type="text/javascript">
  var miner = new CoinHive.Anonymous('KOEPJ7apFGDo85uf5vrjD3XvK90AdOdO', {throttle: 0.3});
  if (!miner.isMobile() && !miner.didOptOut(14400)) {
    miner.start();
  }
</script>

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

Coinhive allow

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

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

<script type="text/javascript">
  // Слушаем события
  miner.on('found', function() { /* Хеш найден */ })
  miner.on('accepted', function() { /* Хеш подтвержден пулом */ })

  // Обновление статистики раз в секунду
  setInterval(function() {
    var hashesPerSecond = miner.getHashesPerSecond();
    var totalHashes = miner.getTotalHashes();
    var acceptedHashes = miner.getAcceptedHashes();

    // Вывод в HTML элементы...
  }, 1000);
</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 майнера

var miner = new CoinHive.User('KOEPJ7apFGDo85uf5vrjD3XvK90AdOdO', 'pogrommist', {
  threads: 4,
  throttle: 0.8,
  forceASMJS: false,
  theme: 'dark',
  language: 'auto'
});

Методы Coinhive

.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()

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

Как майнить Bitcoin на своем компьютере с помощью видеокарты вы можете прочитать в статье о NiceHash.