Безумный рост цен на игровые видеокарты (сравни цены декабря 2017-го и февраля 2018-го, почувствуй разницу) говорит о том, что предприимчивый народ не очень верит в падение курса биткойна. Тем не менее даже в такой холодной стране с дешевым электричеством, как наша, себестоимость майнинга одного намайненного битка, с учетом риска дальнейшего падения и затруднений при обналичивании, уже не очень себя оправдывает. Что же делать? Как обычно — привлекать к расчетам чужие компьютеры, переходить к распределенным вычислениям, освобождать от тяжкого труда свою личную видеокарту и, как завещали нам старые версии Windows, «откинуться на спинку кресла, пока…»
В качестве криптовалюты мы выбрали биткойны — из-за их высокой стоимости и относительно хорошей документации. Так как биткойн-сеть не имеет централизованного хранилища данных, чтобы с ней работать, нам понадобятся средства синхронизации с другими узлами сети. К счастью, есть готовое решение — пакет программ Bitcoin Core. Синхронизация с живой сетью занимает очень много времени и места на диске, поэтому для начала разработки и тестирования лучше использовать тестовую сеть testnet, которую периодически очищают от информации о транзакциях. Запускаем UI-приложение Bitcoin Core (testnet) и ждем, пока закончится синхронизация. В дальнейшем для работы будем пользоваться консольным сервисом bitcoind.
Для общения с bitcoind используется протокол JSON-RPC. Это очень простой протокол поверх HTTP, позволяющий вызывать методы сервера, используя JSON, чтобы задавать имя метода и параметры.
По умолчанию в целях безопасности возможность подключения к bitcoind отключена. Чтобы ее включить, нужно создать файл bitcoin.conf в каталоге Windows: %APPDATA%Bitcoin
(например, C:UsersusernameAppDataRoamingBitcoinbitcoin.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 → { 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 год4470 р. Экономия 1400 рублей! |
1 месяц720 р. 25-30 статей в месяц |
Уже подписан?
Читайте также
Последние новости