Падение курса Bitcoin привело к тому, что даже в нашей холодной стране с дешевым электричеством майнить стало значительно менее выгодно. Что остается делать энтузиастам криптовалют? Особо предприимчивые стали привлекать к расчетам чужие компьютеры и, так сказать, переходить к распределенным вычислениям.

Выбираем валюту и готовим инструментарий

В качестве криптовалюты мы выбрали биткойны — из-за их высокой стоимости и относительно хорошей документации. Так как биткойн-сеть не имеет централизованного хранилища данных, чтобы с ней работать, нам понадобятся средства синхронизации с другими узлами сети. К счастью, есть готовое решение — пакет программ Bitcoin Core. Синхронизация с живой сетью занимает очень много времени и места на диске, поэтому для начала разработки и тестирования лучше использовать тестовую сеть testnet, которую периодически очищают от информации о транзакциях. Запускаем UI-приложение Bitcoin Core (testnet) и ждем, пока закончится синхронизация. В дальнейшем для работы будем пользоваться консольным сервисом bitcoind.

Для общения с bitcoind используется протокол JSON-RPC. Это очень простой протокол поверх HTTP, позволяющий вызывать методы сервера, используя JSON, чтобы задавать имя метода и параметры.

По умолчанию в целях безопасности возможность подключения к bitcoind отключена. Чтобы ее включить, нужно создать файл bitcoin.conf в каталоге Windows: %APPDATA%\Bitcoin\ (например, C:\Users\username\AppData\Roaming\Bitcoin\bitcoin.conf) или Linux: $HOME/.bitcoin/ (например, /home/username/.bitcoin/bitcoin.conf). Готовый файл можно взять с GitHub. Находим в нем и редактируем следующие параметры:

## Говорим серверу использовать тестовую сеть, а не настоящую
testnet=1 
## Имя пользователя и пароль, конечно же, нужно поменять на сложные
rpcuser=rpcuser
rpcpassword=rpcpassword

Ты хотел бы сделать свой пул для майнинга?

Загрузка ... Загрузка ...

Чтобы проверить настройки, можно воспользоваться готовым клиентом bitcoin-cli. Например, выполнив команду getinfo (предварительно запустив bitcoind). Подробное описание всех команд можно посмотреть тут.


Наш JSON-RPC-клиент напишем, используя фреймворк Vert.x, потому что он простой, код занимает мало места и в нем реализованы все необходимые нам функции.

Итак, создаем HTTP-клиент. Bitcoind использует базовую аутентификацию, поэтому конвертируем в Base64 строку с логином и паролем.

client = vertx.createHttpClient();
requestOptions = new RequestOptions()
        .setHost(host)
        .setPort(port)
        .setURI("/");
base64Key = Base64.getEncoder().encodeToString((user + ':' + password).getBytes());

Пишем простой метод для вызова методов bitcoind. Будем передавать в него команду в JSON-формате и handler, чтобы реагировать на полученный ответ от сервера.

private void executeRpc(String command, final Handler<Buffer> handler) {
    client
        .post(requestOptions, result &rarr; {
            if (result.statusCode() == 200) {
                result.bodyHandler(handler);
            } else {
                System.out.println("Failed do post because " + result.statusMessage());
            }
        })
        .putHeader(HttpHeaders.CONTENT_TYPE, "application/json")
        .putHeader(HttpHeaders.AUTHORIZATION, "Basic " + base64Key)
        .putHeader(HttpHeaders.CONTENT_LENGTH, String.valueOf(command.length()))
        .write(command)
        .end();
}

Основные команды, которые нам понадобятся, — это получить работу и отправить работу. Но прежде чем приступать к их реализации, рассмотрим подробнее процесс майнинга. Как известно, биткойн базируется на цепочке блоков, в которых хранится информация обо всех транзакциях. Каждый блок состоит из заголовка и списка транзакций. Задача майнера — получить хеш заголовка блока, значение которого меньше заданного. За это он вознаграждается некоторой суммой криптоденег.

Заголовок состоит из нескольких полей:

Продолжение доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все материалы на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи один материал

Заинтересовала информация, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для материалов, опубликованных более двух месяцев назад.


7 комментариев

  1. Владиславище

    26.02.2018 at 13:00

    Это необходимо сделать в организации, где ты работаешь СисАдмином на подряде!!! И запретить на ночь выключать компы! :)))

  2. john_

    09.03.2018 at 19:56

    Был интересный случай в московском аэропорту, где сисадмин решил майнить крипту и его поймали из за возросшего потребления электричества ))

  3. valpamaxim

    15.03.2018 at 14:03

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

  4. renok

    09.04.2018 at 14:42

    Уважаемый автор, очень актуальная статья получилась (если bitcoin на hodlcoin поменять), к сожалению очень трудно оказалось повторить, то что в ней описано. Будет ли работать код в Vert.x 3, как подключить библиотеку bitcoinj, в каком приложении можно отладить сей код?

  5. mrbl

    16.04.2018 at 01:25

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

  6. mrbl

    16.04.2018 at 01:32

    Зачем для майнинга широкий канал и место на диске? Самому майнеру, участвующему в пуле, не нужно синхронизировать блокчейн и хранить его, а нужно только оперативно получать обновленные задания, когда в блокчейне появляется новый блок, т.е. в среднем раз в 10 минут. Хозяин пула хранит блокчейн, а вот широкий канал ему после окончания синхронизации тоже не нужен, нужно только получать из распределенной сети новые блоки, т.е. по мегабайту раз в 10 минут

Оставить мнение

Check Also

Эксплоиты в десятку. Обзор самых интересных докладов с мировых ИБ-конференций

В последние годы мы отучились воспринимать Windows как нечто невероятно дырявое. Эта опера…