Майнинг и как он работает: матчасть
Привет, %username%!
Я расскажу и покажу как работает основа генерации денег в криптовалютах — майнинг. Как создается первый блок, новые блоки и как появляются деньги из ниоткуда.
Чтобы было проще понять, мы напишем свой импровизированный майнер для импровизированной криптовалюты HabraCoin.
Сначала упрощенный ликбез, куда без него.
Кошельки
Каждый кошелек — это случайно сгенерированная пара ключей. Собственно, адрес кошелька — это хэш от публичного ключа. Так его можно однозначно идентифицировать.
Транзакция
Это запись о том, с какого кошелька на какой какая сумма переводятся. А так же, время и дата операции. Эта запись (её хэш) подписывается закрытым ключом отправителя и рассылается всем в округе в ожидании подтверждения.
Подтверждение
Чтобы о транзакции узнали и все себе её записали, необходимо её подтверждение, которое получается в результате создания нового блока.
Блок
Это служебные данные + список транзакций + номер кошелька майнящего + волшебное число.
Цепочка блоков
Последовательность, в которой каждый следующий блок включает в себя Id предыдущего.
Начало
Итак, есть некоторое количество народа, можно один. Назовём его Хаброша. Он решает запустить свою систему криптовалюты HabraCoin.
Поскольку выделенных серверов у этой валюты нет, то все её участники равноправны и должны как-то договариваться о валидности транзакций. То есть, нужен механизм, который обеспечит:
- Неотвратимость транзакций.
- Возможность любому проверить их валидность.
Для этого он формирует блок из существующих на данный момент неподтвержденных транзакций, номера предыдущего блока, номера своего кошелька и т.д. Для самого первого блока транзакций у нас нет, номера предыдущего блока у нас нет, ничего толком нет. Только адрес кошелька Хаброши да дата со временем.
Так же, в алгоритме HabraCoin указаны следующие вещи.
- Желательно, чтобы новые блоки создавались раз в 10 минут. Если через какое то время мы посмотрим, и окажется, что их больше чем надо было, то рассчитать новую сложность их генерации каждые 100 блоков
- За то, что кто-то создает валидный блок, ему полагается награда в 50 HabraCoins + комиссия
- «Побеждает» тот блок, в котором больше всех транзакций
Ограничение скорости
Как мы видим, сам факт создания блока говорит о том, что его создатель получает за это вознаграждение. И чтобы это вообще имело смысл, скорость и сложность создания блоков следует ограничить. Иначе сами понимаете, тонны блоков из ничего и никакого толку.
В криптовалютах используется способ ограничения сложности, который заключается в проблеме вычисления хэша заданного значения. Если быть точнее, то меньше определенного значения.
Если кто не в курсе, хэш, например f7c9f52d1ebf8c6aef8986fb127ba1bdeec58521f7eb46f026b708df26a40912 — это какое никакое, а число. В десятичной системе оно выглядит как 112078102004378042284884826242280406284022042488488848628408208468422468268028. То есть, хэши можно сравнивать, складывать вычитать и всё такое.
Так вот. Чтобы все признали блок валидным, его хэш должен быть меньше максимально возможного минус определеного всеми значения, называемого сложностью .
Например, хэш у нас 4 байта, максимально возможное значение его FFFFFFFF16. А сложность, допустим, 10010. Вычитаем одно из другого, получается, наш хэш должен быть меньше чем FFFFFF9B16
Как этого добиться?
Если помните, все блоки состоят из нескольких полей. Мы берем эти поля, конкатенируем, получаем из них массив байт. Это массив байт отдаем хэш функции, получаем результат и смотрим: меньше то, что получилось с учетом текущей сложности, или нет?
Если нет, то изменяем этот массив байт до тех пор, пока не получим нужное значение. А именно:
В каждом блоке есть поле, называемое nonce. Это число размером несколько байт, которое нужно увеличивать на единицу, дописывать к блоку и опять считать от него хэш. Поскольку хорошие хэш функции выдают более-менее равновероятностные значения, то мы не знаем заранее, сколько раз придется повторять процесс. Может 1-2 раза, а может миллиарды.
Тот, кому удалось получить хэш, удовлетворяющий условиям сложности, рассылает всем блок с включенными в него транзакциями. На случай, если несколько человек сделали это одновременно, вводится условие, что несколько цепочек блоков существовать вместе не могут, а побеждает самая длинная. Таким образом, если у нас есть две цепочки:
Block1->Block2->Block3A
Block1->Block2->Block3B
то победит та, для которой 4й блок найдут раньше времени. А меньшая цепочка выкидывается и её транзакции снова попадают в очередь на подтверждение.
Комиссия
Все у себя в кошельках видели поле «комиссия» при совершении транзакции. Эта комиссия идет людям, занимающимся генерацией блоков. То есть, они в первую очередь будут выбирать из всех транзакций, ожидающих подтверждения, те, которые содержат в себе комиссию. После формирования блока считается, что вся комиссия, содержащаяся в транзакциях, отходит к его (блока) создателю.
То есть, когда кончится вознаграждение за генерацию блока (если это прописано в алгоритме валюты), то майнерам останется лишь комиссия, а халявные транзакции могут быть никогда не обработаны.
Давайте смоделируем ситуацию и поможем Хаброше скрафтить какой нибудь блок.
Под спойлером программа (в виде Junit теста), которая ради приличия генерирует 2 случайных пары ключей, формирует какое то подобие транзакции (даже подписывает её, все по честному!), а потом ищет такую к ней добавку, чтобы первые 2 байта хэша были нулевыми. Типа сложность такая. Работает пару минут, а потом действительно выдает хэш, который можно быстро проверить, сконкатенировав байты транзакции и счетчика.
Код программы
package com.paranoim.money; import java.math.BigInteger; import java.util.Arrays; import junit.framework.TestCase; import org.bouncycastle.crypto.params.ECPublicKeyParameters; import org.bouncycastle.crypto.util.Pack; import org.bouncycastle.math.ec.ECPoint; import com.paranoim.TestsAll; import com.paranoim.crypto.assymetric.ECDSA; import com.paranoim.crypto.digest.SHA3_512; import com.paranoim.crypto.utils.ByteUtils; public class MiningTest extends TestCase < private byte[] counter = new byte[4]; private byte[] getAddressFromPublicKey(ECPublicKeyParameters publicKey) < ECPoint q = publicKey.getQ(); byte[] encoded = q.getEncoded(true); return SHA3_512.process(encoded); // reciever's address is it's pubkic key hash >public void testMining() < ECPublicKeyParameters fromKey = (ECPublicKeyParameters) TestsAll.ALICE.getPublic(); ECPublicKeyParameters toKey = (ECPublicKeyParameters) TestsAll.BOB.getPublic(); byte[] from = getAddressFromPublicKey(fromKey); byte[] to = getAddressFromPublicKey(toKey); int amount = 100; //100 HabraCoin long now = System.currentTimeMillis(); //compose the message for signing byte[] fromTo = ByteUtils.concat(from, to); byte[] bAmount = Pack.intToBigEndian(amount); byte[] bTime = Pack.longToBigEndian(now); byte[] amountAndTime = ByteUtils.concat(bAmount, bTime); byte[] msg = ByteUtils.concat(fromTo, amountAndTime); BigInteger[] sigCoords = ECDSA.signDigest(TestsAll.ALICE.getPrivate(), SHA3_512.process(msg)); byte[] signature = ByteUtils.concat(sigCoords[0].toByteArray(), sigCoords[1].toByteArray()); // MSG contains from, to, amount, time and signature msg = ByteUtils.concat(msg, signature); ECPublicKeyParameters minersKey = (ECPublicKeyParameters) TestsAll.ALICE1.getPublic(); byte[] bminersKey = getAddressFromPublicKey(minersKey); //msg = msg + miner's address msg = ByteUtils.concat(msg, bminersKey); byte[] hash = doTheMining(msg); msg = ByteUtils.concat(msg, counter); assertTrue(Arrays.equals(hash, SHA3_512.process(msg))); >private byte[] doTheMining(byte[] msg) < byte[] hash = SHA3_512.process(ByteUtils.concat(msg, counter)); while(hash[0] != 0 || hash[1] != 0 ) < incrementCounter(); hash = SHA3_512.process(ByteUtils.concat(msg, counter)); >return hash; > private void incrementCounter() < for (int i = 0; i < counter .length; i++) < counter[i]++; if (counter[i] != 0) break; >> >
Пример получившегося блока:
1824B9ADF09908222CF65069FDE226D32F165B3CF71B7AA0039FDFEF75EAA61610909EBFFBAC023480FC87FCF640C4A
009B82C4A6D25A0F4B8A732AE54EF733E792681137BA378577DFDC2732D192DAF323966EAD4ADC9635D7A12EDD50E34
9F660622D186AF3C03BF7D265F2AA7EB125056F4BF45BE519E8B22B845B28065110000006400000142E5D667CB01CEE
EDD0AC15EC4C491819A99030BD5FEF7CD2B469F2B90BA13D7981EDCD0708353D13390B8564F496C44FAC2777B0AF79D
C94CBF36D0CC0F047E807889F34C4DC5FEB724699C257391F84F3DDD70B84F841D115F4EFEAF4E58779042F35257E5C
035046037DE740718D199A8F06AD7A58E37CCCD4CC5E95295DCC2C5F3C70847BD59FA57BCC5FF4B208F93948FCFD763
EC1E5C85B61C43EB64B77A9F53B28785D7DE2335333003260A0839D53927976751A8D8967B2BB325909D86E82BC4125
2A28ECF6F0E7476BB99B29585EB0E75410000
000008ACF935A8E3E453AC538706F560155943C6B0A77E5F5FCA7939D5FFE589676A6B3CD7AC78845786C50449D1A6F
91003EDCA7B5D8B12AC36CCA36A00844A
Вот мы и заработали пару хабракоинов для Хаброши. Статья конечно поверхностная, так что готов к вашим вопросам.
- Криптография
- Алгоритмы
Обзор популярного ПО для майнинга Bitcoin
Вы можете подумать, что майнить Bitcoin не очень выгодно, так как его курс не так давно значительно упал. Тем не менее, в настоящий момент Bitcoin быстро возвращается в нормальное состояние, поэтому сейчас самое подходящее время, чтобы снова начать его майнить. И, очевидно, это лучше делать, используя соответствующее программное обеспечение.
Существует так много операционных систем для управления процессом майнинга Bitcoin, что сделать выбор может быть довольно сложно. Эта статья поможет вам — в ней рассматриваются характеристики, преимущества и недостатки самых популярных ПО. Продолжайте читать, чтобы найти свое идеальное программное обеспечение для управления майнингом Bitcoin.
Hive OS: решение для тех, кто ищет все в одном
Hive OS это стабильная и безопасная платформа для майнинга, основанная на дистрибутиве Linux Ubuntu. Её легко установить, настроить и использовать — для этого вам не нужны технические знания. Есть обширная база знаний или связаться со службой поддержки. Круглосуточная поддержка.
Hive OS упрощает управление фермами любого размера. Автофан контролирует температуру, в то время как команды могут выполняться автоматически, по вашему собственному расписанию. Переключение между пулами, кошельками или монетами занимает около секунды. Список майнеров регулярно обновляется, и то же относится к списку функций. А воркерами можно управлять дистанционно, из любой точки мира.
Hive OS позволяет майнить Bitcoin как на GPU ригах, так и на ASICах, обладает своим пулом (а также поддерживает множество других пулов), и предлагает кастомную прошивку для ASICов.
Cudo Miner: подходящий вариант для новичков
Cudo Miner — это простая в использовании платформа для майнинга криптовалют. Удаленное управление, разгон, мониторинг и другие традиционные функции доступны. Кроме того, Cudo Miner предлагает автоматический майнинг и автоматическое переключение между монетами, что довольно удобно. В случае необходимости вы можете создавать собственные шаблоны для повышения производительности вашего оборудования.
Однако, как и Cudo Miner не поддерживает ASICи. Кроме того, комиссия основывается на сумме криптовалюты, добытой за последние 30 дней, и она довольно высока. Например, для менее чем 0.005 BTC комиссия составляет целых 6.5%.
SimpleMining: выбор владельцев GPU ригов
SimpleMining это платформа для майнинга, поддерживающая все современные графические процессоры AMD и Nvidia. Она предлагает множество майнер-программ, и вы также можете добавить кастомный майнер, если у вас есть особые требования. Кроме того, с помощью SimpleMining можно выполнять массовые действия на множестве ригов сразу, что актуально, если у вас много устройств. Традиционные функции, такие как разгон и даунвольтинг, также доступны, так что вы сможете увеличить свою прибыль, потребляя меньше энергии. Однако, платформа на позволяет совмещать AMD и Nvidia в одном риге.
СGMiner: подходит опытным владельцам карт AMD
CGMiner — это майнер с открытым исходным кодом, ориентированный именно на майнинг Bitcoin (хотя некоторые другие монеты, например, Monero, также доступны). CGMiner позволяет майнить на ASICах, GPU ригах и CPU, и совместим с несколькими платформами: Windows, Linux и OS X. При использовании всех традиционных функций, таких как разгон и мониторинг, вам не придется оплачивать комиссию разработчика (dev fee).
С другой стороны, CGMiner не очень хорошо работает с картами Nvidia. Помимо этого, он вряд ли подойдет неопытным пользователям — вы должны быть по крайней мере знакомы с GitHub.
Awesome Miner: подходит для централизованного управления майнингом
Awesome Miner это решение для управления и мониторинга майнинговых операций на GPU ригах и ASICах (CPU-майнинг также доступен). Кроме того, можно выполнять операции как для отдельных майнеров, так и для групп. Вы можете создавать шаблоны для более легкой настройки и даже использовать Awesome Miner бесплатно. Но при этом вы сможете иметь не более 2 майнеров. Список доступных функций также будет ограничен.
Учтите, что Awesome Miner работает только в Windows (но он все еще может подключаться к программному обеспечению для майнинга, работающему в Linux). Также, его интерфейс не очень удобен, и у нового пользователя могут возникнуть некоторые трудности с пониманием того, как именно все работает.
Hashr8: для пользователей, знающих о майнинге всё
Hashr8 — это операционная система, подходящая как для ASICов, так и для GPU ригов. Система также поддерживает множество пулов и майнеров. Мониторить устройства можно не только в веб-интерфейсе, но и через мобильное приложение. Поддержка предоставляется круглые сутки. Кроме того, Hashr8 можно использовать бесплатно — такой вариант доступен майнерам, использующим до 3 устройств включительно. При этом нет никаких других ограничения — бесплатные пользователи могут использовать все функции системы.
Впрочем, несмотря на вышеперечисленные преимущества, Hashr8 также обладает некоторыми недостатками. Во-первых, связаться со службой поддержки можно только при помощи формы на сайте или по email — таким образом, вы вряд ли получите помощь мгновенно. На сайте также отсутствует FAQ, так что если у вас возникнет какая-то проблема, существует вероятность, что вам придется решать её самостоятельно. Во-вторых, Hashr8 является достаточно нестабильной системой, что может повлиять на ваши доходы.
Какое программное обеспечение выбрать?
Окончательное решение зависит от ваших потребностей, но мы рекомендуем выбрать стабильную и универсальную систему, которая поддерживает и ASICи, и GPU риги. Таким образом, у вас будет свобода действий, что особенно актуально, если у вас много устройств. То же касается GPU ригов — лучше выбрать систему, которая отлично работает как с картами AMD, так и Nvidia.
Выбирайте с умом, и удачного Bitcoin-майнинга!
Лучшие программы для майнинга
Для управления процессом майнинга, майнеры используют определённые программа для майнинга. Таких программ в интернете огромное множество. В основном их можно установить бесплатно. Они отличаются между собой поддержкой определённое оборудование. В этой статье мы рассмотрим следующие пункты:
- Виды программ для майнинга, их плюсы и минусы
- Самый популярные программы среди майнеров
- Майнинг программы для начинающих
- Какую же программу выбрать для комфортного майнинга
Лучшие программы для майнинга
CGMiner
Данная плагин представляет из себя написанный на “C (Си)” голый код. CGMiner предоставляет возможность майнинга таких криптовалют как: Ethereum, Bitcoin, Litecoin и прочие. Так же, при его помощи можно управлять охлаждающей системой. Способен функционировать с видеокартами – AMD, FPGA и ASIC. Программа работает на алгоритме “NeoScrypt”, именно он отвечает за функционал всех операций. Он способен обрабатывать транзакции без задержки, даже при сильных нагрузках системы. Чтобы этого добиться разработчики придумали crypto-сеть. Каждому участнику которой, после аутентификации присваивается свой собственный шифр. Благодаря этому шифру обрабатываются данные учётной записи.
Плюсы плагина CGMiner:
- Способность функционирования с ОС: Linux и Windows;
- Возможность настройки скорости вращения системы охлаждения;
- Оснащён планировщиком пакетов, который приводит к минимуму траты электроэнергии, а также повышает хэшрейт;
- Имеет proxy сервер, который предназначен для соединения пользователя с основным сервером.
Минусы плагина CGMiner:
- Существует только на английском языке;
- Отсутствие встроенного графического интерфейса.
MultiMiner
MultiMiner – Компьютерная программа предназначенная для майнинга криптовалют. Он совместим с такими операционными системами как: MacOS, Windows и Linux. Данный софт предоставляет возможность быстрого переключения между майнинг-системами (ASIC, FPGA, GPU), а также между криптовалютами которые ими добываются. В программу MultiMiner вшит механизм BFGMiner, (Написанный также на коде: “C (Си)”) который обнаруживает оборудование. Монеты для майнинга выбираются в самом интерфейсе.
Плюсы плагина MultiMiner:
- Предоставление плагином, новостей в сфере технологий;
- Функция удалённого интерфейса и удалённого мониторинга;
- Понятна для пользователей с любым уровнем знаний.
Минусы плагина MultiMiner:
Awesome Miner
Awesome Miner – софт который отлично подходит для майнинга на GPU и ASIC. Операции в ней можно производить как для групп майнеров, так и для определённых майнеров. Она способна показывать загруженность и температуру подключённого оборудования.
Плюсы плагина Awesome Miner:
- Совместимость с такими алгоритмами как: Scrypt, Ethereum, Zcash и другие;
- Возможность работы сразу с несколькими видами оборудования;
Минусы плагина Awesome Miner:
- Работает только с ОС Windows;
- Неудобный интерфейс для новичков.
BFGMiner
BFGMiner – является весьма гибкой в плане настройки программы. Используется для майнинга на ASIC, FPGA или же видеокарте. Программа включается в себя встроенный proxy-сервер, такой как stratum и getwork, данные сети разделяются на разные потоки для того, чтобы не мешаться между собой. BFGMiner использует для майнинга, протокол getblocktemplate, с его помощью незадействованные потоки выполняют перезагрузку, для исключение сбоев при зависании. Программа способна предоставлять отчёт о сбоях, эффективности работы майнера. А также контролирует температуру устройств.
Плюсы плагина BFGMiner:
- Возможность управления оборотностью охлаждающих вентиляторов;
- Установка режима одновременной работы сразу нескольких пулов;
- Поддержка различных устройств.
Минусы плагина BFGMiner:
- Слишком сложна в освоении для новичков;
- Нет поддержки графического интерфейса
Самые популярные программы для майнинга
Kryptex
Программа Kryptex имеет широкое распространение среди майнеров. Всё благодаря – минималистичному интерфейсу, простой настройке, а также возможности регулирования скорости вентилятора. В том числе программа обладает следующими возможностями: Подключение сразу нескольких ПК к единому аккаунту, автоматическая выборка прибыльной криптовалюты для майнинга, простой процесс вывода денежных средств на счёт. Майнинг на Kryptex
Computta
Программа для майнинга на домашнем ПК. Данное приложение обладает одной из лучших реферальных программ. Режим smart даёт возможность работать за компьютером во время его использования.
Майнинг программы для начинающих
NiceHash Miner
NiceHash Miner – это универсальный драйвер, не имеющий ограничений в количестве ригов. Хорош, для тех, кто не планирует тратить много времени на настройку крипто-операций. Выплата вознаграждений производится только в Биткоинах. Этот драйвер весьма понятен и прост когда речь заходит о выводе средств, как для опытных майнеров, так и для новичков в сфере майнинга. Имеется возможность перевода софта на русский язык.
Плюсы NiceHash:
- Возможность подключения двухфакторной аутентификации;
- Автоматическое переключение майнинга, на более выгодную криптовалюту, в настоящее время;
- Поддерживается такими ОС как: Windows, MacOs и Linux;
- Простая настройка.
Минусы NiceHash:
- Большая комиссия (от 2-х до 5-ти процентов);
- Меньше выручки по сравнению с другими программами и пулами;
- Процесс добычи криптовалюты не может контролироваться пользователем.
Hive OS
Hive OS – это программа работающая на разных платформах (начиная с компьютеров, заканчивая мобильными устройствами). Она даёт возможность регулировать процесс майнинга криптовалюты. Для начала майнинга, в необходимо лишь установить данное ПО, оно само обнаружит подключённые устройства, и создаст соединение между ними. Панель управления ОС, даёт возможность следить за сетевым статусом, хэшрэйтом, ошибками, энергопотреблением, а также настройками пула. Присутствует возможность удалённой перезагрузки процессоров. В числе возможностей есть такие как: Настройка каждого подключённого устройства, быстрая смена пулов, кошельков, а также криптовалют. Настройка Hive OS
Плюсы Hive OS:
- Возможность майнинга сразу нескольких криптовалют, на различных пулах;
- Удобный интерфейс кабинета;
- Присутствие удалённого мониторинга показателей.
Минусы Hive OS:
- Отсутствуют.
Заключение
Даже при таком огромном множестве различных программ для майнинга, нет единого варианта, который подойдёт для всех. Майнер в праве сам подбирать тот софт, который будет соответствовать всем его задачам. Рекомендуется устанавливать программы, которые имеют больше возможностей. Отличным вариантами можно считать такие как: Hive OS, Kryptex, MultiMiner. Но окончательный выбор остаётся за майнером.
При подготовке материала использовались источники:
https://habr.com/ru/articles/204008/
https://habr.com/ru/articles/511902/
https://ibmm.ru/news/kriptoindustriya/programma-dlya-majninga/