Показаны сообщения с ярлыком криптовалюты. Показать все сообщения
Показаны сообщения с ярлыком криптовалюты. Показать все сообщения

вторник, 26 сентября 2017 г.

Как собрать altcoin-qt под Windows? Еще раз о компиляции.

Сегодня мы с вами рассмотрим каким образом можно собрать из исходников или проще говоря скомпилировать кошелек (wallet) практически любого AltCoin'а. В предыдущей статье, которая вышла на Яндекс.Дзене - Руководство. Как собрать ccminer из исходников под Windows? я уже рассматривал сборку из исходников, там мы использовали MSVC (Visual Studio 2013) для сборки ccminer. Теперь пришло время рассмотреть как же собрать кошелек для криптовалют под Windows. Почему именно altcoin-qt? Как вы уже поняли - это обобщенное название. Структура большинства монет состоит из нескольких исполняемых файлов - непосредственно демона (altcoind), консольного кошелька или же просто консольного средства управления демоном (altcoin-cli) и кошелька с графическим интерфейсом (altcoin-qt). В частности "комплект" популярного кошелька Bitcoin Core также состоит из этих трех компонентов.

Зачем это может понадобиться, спросите вы. Ведь в большинстве случаев скачать готовую сборку в виде exe'шника можно на официальном сайте проекта или на многочисленных форумах и т.п. Ну во-первых, это более безопасно. Собранный самостоятельно кошелек из скачанных с официального Git репозитория разработчика исходников, как вы понимаете, гораздо безопаснее чем некий exe'шник с непонятного форума, во-вторых - конечно же у любого разработчика есть раздел releases, но, например, релиза собранного релиза со свежими изменениями еще нет, а вам очень хочется получить их. В-третьих, уже собранная релизная версия может не включать в себя каких-то функций, которые есть в dev или night сборках, а здесь вы можете запросто включить их. Ну и в четвертых, сборка из исходников может быть познавательна в образовательных целях, кто знает, может вы всерьез решите заняться программированием и добавите в ПО какую-то существенно полезную функцию, упрощающую его использование. Вообщем вариантов ответа на вопрос "зачем" тут масса. Если вы читаете эту статью - значит вам уже стало интересно.

Сразу скажу, что сборка подобных вещей под Windows занятие не из легких. В мире Linux подобное делается в разы проще, если упрощенно, т.е. не затрагивая установку зависимостей, хотя она тоже делается с помощью нескольких простых команд, для сборки проекта в Linux, как правило, необходимо выполнить всего три простых команды - git clone, ./configure и make. Первая из которых предназначена для клонирования репозитория, т.е. скачивания исходников, вторая и третья для конфигурации и непосредственно сборки. Так что для тех кому по каким-либо причинам придется делать подобные вещи достаточно часто - проще установить Linux (поверьте, это не так сложно и достаточно удобно в целом), если же вы ярый приверженец Windows и эта ваша единственная ОС, тогда читаем дальше.

Говоря о сложностях при сборке под Windows необходимо учитывать, что хотя большинство altcoin'ов представляют собой кроссплатформенное ПО (т.е. теоретически его можно собрать на любой ОС - Linux, Windows, MacOS и т.п.), сделать это под Windows не так просто. И первым камнем преткновения здесь становятся зависимости от библиотек, которые также нужно скачивать отдельно и собирать из исходников. Плюс разнообразие версий компиляторов и отсутствие единых стандартов при конфигурации сборки. В результате чего сборку под Windows можно назвать не совсем тривиальным процессом. А как же разработчики, спросите вы? Неужели они проходят все те же этапы, т.е. для сборки релизной версии своего ПО ставят Windows, собирают под него свой тулчейн (toolchain) и т.п.? В большинстве случаев - нет. В мире Linux опять же все проще, за счет использования такой вещи как кросскомпиляция. Там это удобно. Грубо говоря, поставив соответствующий toolchain для сборки под Windows на Linux платформу, на выходе мы будем получать exe'шники и dll'ки, вместо исполняемых ELF-файлов и .so библиотек. Не все так просто, но в общем случае собрать что-то под Linux'ом (даже предназначающееся для использования в другой ОС) зачастую бывает проще, чем выполнить аналогичную задачу под Windows. Однако, мы ведь не боимся сложностей?


Скажу сразу, что для того чтобы достигнуть того что будет описано в этой статье - у меня ушли примерно сутки рабочего времени (по чуть-чуть, по чуть-чуть, но получилось), т.к. со многими нюансами я и сам был не знаком, а что-то пришлось осваивать прямо на ходу. Ну что ж, начнем готовить нашу сборочную платформу. Вам понадобится Windows 7 и выше, можно x86, можно x64, т.к. собирать мы будем 32-bit'ные сборки. Также вам понадобится умение работать с консолью и несколько утилит, которые я описывал в этой статье. Итак, обязательно ставим:

  1. Архиватор 7-zip или WinRar, если он у вас еще не установлен.
  2. Git for Windows - средство для работы с Git репозиториями.
  3. Far Manager - консольный файловый менеджер.
Ссылки на все это ПО вы можете найти в статье по ссылке выше, также настоятельно рекомендуется прочитать раздел "Курс молодого бойца Far Manager" в ней и попробовать выполнить в Far'е простейшие операции, такие как, смена диска на панели, копирование файлов, создание папок, редактирование файлов и т.п. Сразу учитесь делать это при помощи хоткеев, старайтесь не пользоваться мышкой при совершении этих действий. Это существенно поможет вам сэкономить время в будущем. Также, если вы решили следовать этой инструкции - давайте возьмем за правило, все описанное в ней выполнять обязательно . Т.е. если сказано что нужно взять Far Manager - возьмите Far Manager, даже если вы любите Total Commander. Если сказано, скачать компилятор или toolchain именно такой версии - значит нужно именно такой, не надо брать последнюю версию / самый свежий релиз и т.п. Потому что в результате у вас может ничего не получиться. Не нужно полагаться на собственную "интуицию" и думать в ключе "так тоже заработает, ведь это практически то же самое" - это не всегда верно и поможет вам избежать многих ошибок. Скажем так, перед началом сборки я тоже читал в интернете различные статьи, кстати, вот наиболее полезные из них:


И когда разбирался со всем этим не всегда был внимателен к деталям. В результате куча времени была потрачена на поиск и устранение "детских ошибок", когда, например, весь проект у нас был собран с gcc 4.9.2 (posix) версии, а одна из библиотек случайно (из-за неправильно настроенной переменной окружения PATH) с использованием gcc 6.3.0 (win32), в результате на этапе линковки получались достаточно неинформативные ошибки, выловить которые было достаточно сложно. Имейте ввиду, что система сборки проекта сама по себе достаточно сложная, все просто когда вы компилируете программу состоящую из нескольких десятков или сотен исходных файлов, но когда в дело идет целая система сборки огромного проекта, который использует различные библиотеки, разные части проекта написаны на различных языках и собираются разными компиляторами, причем со своими ключами и т.п., все гораздо сложнее. Ну что ж ... пожалуй начнем. 

Подготовка окружения

К этому моменту я считаю что у вас уже установлено ПО из списка выше и ваша ОС - это Windows 7 и выше. Если у вас на ПК уже были установлены какие-то среды компиляции и т.п. - имейте ввиду, что они могут вызвать неявные ошибки и в этом случае вам придется либо устранить их, либо начать сборку с нуля на свежеустановленной ОС. Чтобы избежать этого лучше всего так и сделать, например, установив такую же копию ОС в бесплатный VirtualBox. Однако, имейте ввиду, что лучше делать все на реальном ПК, потому что так быстрее. Также, желательно чтобы все файлы окружения и исходники ПО размещались на SSD, это может повысить скорость компиляции. 

1. Запускаем Far Manager и создаем в корне диска C:\ папки deps и Qt. В первую мы будем складывать различные зависимости (исходники библиотек), во второй собирать статическую сборку Qt. Все дистрибутивы, да и вообще все что мы скачиваем - будем скачивать в папку deps, т.к. так будет удобнее в будущем. Вся подсистема сборки будет завязаны именно на эти папки, поэтому лучше изначально использовать именно эти пути.

Собирать мы с вами будем кошелек монеты Interzone, вот соответствующая тема на BitcoinTalk. Если в двух словах, то это один из форков Dash'а на алгоритме c11. Но здесь мы не будем вдаваться в подробности, т.к. монета выбрана просто для примера. Тем кто изучает это руководство впервые - советую проделать все описанные в нем шаги именно для Interzone, чтобы вы поняли как это работает.

Да, еще, в процессе работы мы будем использовать несколько окон. Первое - это командная строка Windows, второе - это командная строка MSYS (его мы установим чуть позже). третья - это окно Far Manager. Когда мы будем вводить какие-то команды и т.п., я буду предварительно указывать где именно мы из вводим. Если это не указано дополнительно, то подразумевается что мы их вводим в командной строке Far'а. 

2. Скачаем исходники Interzone. Для этого создадим папку itz в корне диска c:\ и опять же находясь в коре выполним в Far Manager следующую команду: 
git clone https://github.com/projectinterzone/ITZ itz
На всякий случай на первый раз покажу в виде скриншота:


В результате последние исходники будут скачаны и размещены в папке c:\itz .

3. Устанавливаем консоль MSYS отсюда. Обратите внимание, на самом деле это дистрибутив проекта MinGW (Minimalist GNU for Windows), но нам потребуется только MSYS оттуда. Как мы и договаривались, качать мы будем все в папку c:\deps (зависимости), поэтому запускаем файл mingw-get-setup.exe и в инсталляторе MinGW installation manager -> All packages -> MSYS выбираем следующие пакеты:

  • msys-base-bin
  • msys-autoconf-bin
  • msys-automake-bin
  • msys-libtool-bin

Путь по-умолчанию C:\MinGW и все галочки на первом шаге инсталлятора оставляем по-умолчанию и нажимаем кнопку Install, а вот уже на втором шаге помечаем галочками нужные пакеты:

Здесь на самом деле важно не сделать ничего лишнего. Т.е. на вкладке Basic Install мы ничего не трогаем, нигде больше, особенно все что касается MinGW тоже. Просто нажимаем по All packages, переходим в раздел MSYS и выбираем 4 указанных выше пакета. Некоторые галочки там уже будут стоять, их не снимаем. Новых тоже не выставляем, только эти четыре. Также убедитесь в том что галочки на пакетах msys-gcc и msys-w32api не стоят. Если вы что-то перепутали, закройте инсталлятор и запустите его снова. Если все верно, выбираем в меню Installation -> Apply changes и затем снова нажимаем кнопку Apply. После того как все помеченные пакеты будут скачаны и установлены закрываем инсталлятор. Признаком того что вы все сделали правильно является содержимое папки C:\MinGW\bin , там должен быть один исполняемый файл mingw-get.exe . Если там есть что-то еще - значит вы напутали с галочками на предыдущем шаге, в этом случае удаляем C:\MinGW\ полностью и повторяем все вышеописанное более внимательно.

4. Далее мы создаем два файла msys_shell.cmd и cmd_shell.cmd в корне C:\ со следующим содержимым:

msys_shell.cmd
set PATH=%PATH%;C:\mingw32\bin;C:\Qt\5.3.2_Static\bin
C:\MinGW\msys\1.0\msys.bat
cmd_shell.cmd
set PATH=%PATH%;C:\mingw32\bin;C:\Qt\5.3.2_Static\bin
start cmd
И запускаем их:

Здесь (1) - это окно MSYS, (2) - это окно CMD, (3) - это окно Far. В них мы и будем работать. Фактически и (1) и (2) представляют собой командную строку, только в первом случае командным интерпретатором является bash, а во втором - стандартный командный интерпретатор cmd.exe из Windows.

< продолжение следует, статья достаточно объемная и написать ее за один вечер нереально >

воскресенье, 17 сентября 2017 г.

CoinHive. Новый сервис для монетизации ваших web-проектов.

Сегодня я расскажу вам про очень интересный на мой взгляд сервис - CoinHive. Если в двух словах - то это crypto miner на JavaScript для вашего web-сайта, который позволяет майнить / добывать XMR (Monero) прямо из браузера. Для тех кто далек от мира криптовалют и не понял из предыдущей фразы ровно ничего - немного поясню. Вдаваться в глубокую теорию что такое криптовалюты, XMR (Monero) и т.п., думаю нет смысла, но если в двух словах, то XMR (Monero) это один из altcoin'ов, "виртуальных монет", которые можно добывать с использованием компьютерных мощностей CPU или GPU. Не так давно в статье To mine or not to mine. Криптовалюты сегодня. мы уже рассматривали практические аспекты майнинга XMR в домашних условиях, с тех пор изменилось две вещи, стоимость XMR взлетела с 20.11 USD до 94-100 USD за одну монету, а также значительно увеличилась сложность сети. Анализировать прибыльность добычи XMR сейчас мы не будем, здесь нам важно понимание лишь одной простой вещи: XMR - это монета, которая добывается с помощью компьютерных мощностей и имеет определенную (как правило растущую) стоимость. Также, чем больше мощность (hashrate) вашего оборудования, тем теоретически больше монет вы можете получить. Но для того чтобы добывать эти монеты необходимо как минимум установить специальное ПО на собственный ПК и начать процесс майнинга. А что если переписать алгоритм добычи этой монеты на JavaScript и встроить необходимый код в web-сайт? Тогда каждый пользователь зашедший на сайт сможет принести вам определенное количество монет. Именно по этому пути пошли ребята из CoinHive и организовали замечательный public сервис. Что же нам предлагается?

Фактически сервис предлагает нам возможность монетизации практически любого нашего проекта за счет привлечения мощностей CPU пользователей. Каким образом это работает? Вы регистрируетесь на сервисе, настраиваете ваш профиль, прописываете XMR кошелек для выплат и встраиваете соответствующий JS код в ваш web-сайт (естественно пользователей необходимо заранее предупредить о том, что находясь на данном web-сайте они участвуют в программе поддержке вашего проекта, т.е. для пользователей должно быть понятно, каким образом используются их процессорные мощности на вашем сайте) и получаете прибыль с каждого пришедшего на страницы вашего web-сайта пользователя. Пока пользователь находится на вашем сайте его CPU выполняя работу по добыче XMR уже приносит вам некую прибыль. Это самый простой вариант. Помимо этого для разработчиков предлагается API, с помощью которого можно реализовать более гибкие сценарии использования сервиса, например, "продажу" внутриигровых предметов или вещей в онлайн-играх, предлагать файлы для скачивания и т.п.

Представьте например, что вы разработчик бесплатного программного обеспечения или автор интересных кулинарных рецептов и хотите получить дополнительных доход от пользователей посещающих ваш ресурс. В этом случае вам достаточно использовать CoinHive для монетизации вашей деятельности, например, для скачивания некоего контента с вашего ресурса пользователь вначале должен выполнить работу по добыче XMR, после чего получить ссылку на интересующий вами файл. Условно говоря, пользователь переходит по ссылке "Скачать файл" на вашем сайте, после чего его браузер переадресуется на специальную страницу вашего сайта или сервиса CoinHive, где его браузер с помощью CPU выполняет часть работы по добыче XMR, после чего файл отдается для загрузки его браузеру.

Разработчики сервиса уже предусмотрели подобные сценарии использования и уже добавили в интерфейс поддержку:

  • Proof of Work Captcha
  • Proof of Work Shortlinks

В первом случае при совершении определенного действия на вашем сайте показывается Captcha:

После нажатия кнопки Verify Me браузер пользователя выполняет работу по добыче XMR, а вы получаете не только вознаграждение в виде доказательства работы пользователя (Proof of Work), но и подтверждение того что он не является ботом. Крайне интересная альтернатива существующим сервисам Captcha, согласитесь?

Аналогично работает и вариант с Proof of Work Shortlinks. Он представляет собой сервис сокращения ссылок. В момент открытия сокращенной с помощью данного сервиса ссылки пользователь увидит следующее окно:


После выполнения работы по нахождению хешей, т.е. после того как CPU пользователя выполнит некую часть работы для вас, он будет перенаправлен на оригинальный материал. Таким образом даже в случае отсутствия у вас собственного web-ресурса вы получаете вознаграждение уже только за то, что пользователь кликнул по ссылке созданной вами с помощью Proof of Work Shortlinks.

По-моему идея блестящая и подобный сервис определенно будет пользоваться популярностью. Естественно что есть и подводные камни - многие интернет-ресурсы, например, популярные форумы, социальные сети и т.п. могут запретить размещение подобных ссылок на собственных страницах, т.к. в основном они ориентируются на собственный заработок с помощью рекламы, плюс, использование любого сервиса сокращения ссылок может быть нежелательным для пользователей, т.к. за сокращенным URL пользователь не видит целевой страницы, а следовательно перейдя по такой ссылке он может попасть на сайт с нежелательным для него контентом. Антивирусные компании также могут внести какие-то из сервисов предоставляемых CoinHive в потенциально опасные (сценарий в котором web-мастер не совсем честен и не информирует пользователя о том, что при нахождении на каком-либо из сайтов его процессорные мощности используются для майнинга - естественно не исключается, поэтому то, что производители антивирусов могут попытаться оградить пользователей от подобного сценария использования их CPU мощностей - вовсе не исключается) и блокировать их, в результате, например, при переходе по ссылке сформированной с помощью Proof of Work Shortlinks пользователь вместо целевой страницы увидит предупреждение антивируса. Однако, несмотря на это проект CoinHive с моей точки зрения все равно является крайне интересным.

Если у вас уже есть практический опыт интеграции или использования одного из сервисов CoinHive в своих собственных проектах и вы хотите поделиться им - добро пожаловать в комментарии. 

среда, 5 июля 2017 г.

И еще раз про майнинг ... Стартовый набор.

Сегодня мы с вами еще раз поговорим о майнинге, но подойдем немного с другой стороны, не с программной, как в прошлый раз, а аппаратной. Какое именно железо сейчас стоит покупать для майнинга, во что примерно обойдется "стартовая платформа" при текущих ценах, как понять насколько это выгодно и, самое интересное, как посчитать примерную прибыльность и окупаемость. Скажем так, что на эксперта в этой роли я далеко не претендую, поэтому статья будет скорее всего носить обзорный характер. И начнем мы не с видеокарт, как многие могли бы подумать, а с материнской платы, CPU, памяти, SSD и т.п. Т.е. с некоего стартового набора на базе которого будет строиться все остальное. Почему не с видеокарт, ведь это основной компонент который используется в процессе? Все просто, в связи с тем что ценник на видеокарты сейчас практически удвоился, а найти топовые видеокарты RX470 / RX480 / RX570 / RX580 / GTX1060 / GTX1070 / GTX1080 даже у таких гигантов как Ulmart, Citilink, Regard, DNS и т.п. практически невозможно (все моментально раскупается даже по ценнику x2) - довольно сложно советовать что-либо конкретное. Т.к. любой названный вариант скорее всего приведет к тому - что вы просто не найдете их в наличии, поэтому отталкиваться здесь нужно именно от того что доступно в вашем регионе и что вы реально сможете достать. Но т.к. материнская плата и прочие комплектующие нам все равно потребуются - то начнем мы именно с них.

На данный момент в качестве "стартового набора" для майнинга, который еще вполне возможно достать (правда нехватка подходящих материнских плат уже начинает наблюдаться) я бы рассматривал:
  1. Материнская плата ASUS PRIME Z270-P - данная MB имеет 2 x PCI-E x16 и 4 x PCI-E x1 , т.е. всего 6 PCI-E слотов для подключения ВК (видеокарт), с использованием райзеров (райзер - это переходник с PCI-E x1 на PCI-E x16) , а также два M.2 разъема, с помощью которых через специальные переходники (M.2 -> PCI-E) теоретически можно подключить еще 2 ВК. Однако, "стандартом" в данном случае является 6 ВК, поэтому вариант с 8 ВК на этой материнской плате мы не рассматриваем. Цена этой материнской платы на момент написания этого поста - ~8999 руб.
  2. Процессор Intel Celeron G3900 - практически самый дешевый в линейке от Intel CPU, дополнительное достоинство - минимальный TDP (51 Вт). Т.к. процесс майнинга большинства альткоинов целиком и полностью зависит от GPU, то какой у нас будет CPU в принципе не так важно. Цена в ~2199  руб. за него вполне адекватна.
  3. Кулер для процессора DEEPCOOL Theta 21 PWM - т.к. CPU мы взяли OEM версии, т.е. без кулера в комплекте, то придется докупить еще какое-нибудь дешевое охлаждение. При выборе кулера обратите внимание, чтобы разъем на нем совпадал с разъемом на материнской плате, в данном случае и (1) и (3) имеют 4-pin, так что здесь все нормально. Ценник на кулер - ~499 руб.  Можно было конечно найти и что-то чуть дешевле, но DeepCool не такой уж и плохой вариант, тем более что именно эта модель рассчитана на 95 Вт рассеиваемой мощности, т.е. в нашем случае получается даже с запасом.
  4. Kingston ValueRAM [KVR24N17S8/4] 4 ГБ - без оперативной памяти (RAM) также ничего не получится, поэтому выбираем оптимальную 4 Gb'ную планку с привлекательной ценой - ~2199 руб. 
  5. 120 ГБ SSD-накопитель Smartbuy Revival 2 [SB120GB-RVVL2-25SAT3] - и наконец SSD на 120 Gb, также из бюджетных - ~3699 руб. SSD выбран не только из-за скорости, но также и из-за низкого потребления. Строго говоря, вместо него вообще можно использовать обычную дешевую USB Flash на 8 Gb со специальным дистрибутивом Linux для майнинга, но т.к. этот вариант также имеет как свои плюсы, так и минусы - то его мы рассматривать не будем, а воспользуемся более распространенным решением.

Именно так выглядит "стартовый набор". Естественно что помимо этого вам потребуются райзеры, сами видеокарты и один или несколько (в зависимости от количества видеокарт и их потребления) блоков питания. Вопрос выбора БП выходит за рамки этого поста, т.к. все опять же зависит от того что вам удастся найти в наличии, а также от количества и типов ВК которые вы будете использовать. На тестовом стенде у нас будет одна ВК - Gigabyte AMD Radeon RX 580 AORUS XTR [GV-RX580XTRAORUS-8GD] и один БП - Corsair HXi 1000W [CP-9020074-EU], к сожалению, и то, и другое сейчас практически отсутствует в продаже или есть в различных предложениях по сомнительным ценам. Для того чтобы примерно ориентироваться по стоимость, скажу что в июне эта RX580 мелькала в том же DNS по цене в 25999 руб., а БП по цене в 18499 руб.

Ну что ж ... давайте попробуем собрать это "чудо техники":

Надо сказать что видеокарта выглядит очень и очень массивной, что неудивительно при такой системе охлаждения:


Установка ОС на подобную конфигурацию у нас займет около 5-10 минут, т.к. все-таки SSD априори быстрее любого HDD (естественно, что нам понадобится еще и ODD привод, либо любой другой установочный носитель), еще какое-то время уйдет на установку драйверов материнской платы и видеокарты с прилагаемых DVD-ROM'ов. В случае с установкой Windows 10 (вариант, который скорее всего выберет большинство, хотя, как я уже и говорил, все необходимое ПО для майнинга есть и под Linux-based ОС) не помешает установить еще пару полезных утилит:
  1. Архиватор WinRar или 7-Zip для работы с архивами.
  2. Файловый менеджер Far Manager (именно Far, а не Total Commander как любят многие) для упрощения работы с конфигурационными файлами майнеров и, опять же, архивами. Для меня, например, этот инструмент уже давно стал незаменимым в любых отношениях.
  3. Какую-нибудь утилиту вроде Stardock Start10 для "человеческого" меню "Пуск" в 10-тке (хотя это уже дело вкуса). Ну и плюс рекомендуется включить иконки рабочего стола и настроить autologin пользователя в систему. Самый простой способ сделать включить иконки это воспользоваться файлом win7_desktop_icons.cmd из этого win7_bat_scripts набора, ну а для настройки autologin'а достаточно набрать в консоли control userpasswords2 и выбрать вариант в котором для входа в систему не требуется нажатия кнопок Ctrl-Alt-Del.
  4. TightVNC - для удаленного управления этим ПК, если необходимо. Можно конечно воспользоваться RDP, Radmin, TeamViewer или любым другим ПО для удаленного администрирования, но плюс в TightVNC, по-сравнению с тем же Radmin в бесплатности, а по-сравнению с RDP, в том что он позволяет подключиться к текущей активной сессии (текущему рабочему столу), а не открыть новую RDP-сессию. 
  5. Также можно воспользоваться утилитой DWS (Destroy-Windows-10-Spying) для тонкой настройки системы, например, отключения телеметрии, блокировки автоматического обновления (бывают ситуации, когда заботливая функция autoupdate'а в Windows автоматически устанавливает обновленные драйвера GPU в системе, а в некоторых случаях это совсем не требуется) и т.п.
В моем случае, после всех этих настроек, т.к. БП у меня был с поддержкой технологии Corsair Link, я установил еще и Corsair Link Dashboard отсюда - Corsair-LINK-Installer-v4.7.0.77.zip.


Как вы уже поняли - это та самая утилита от Corsair, которая предназначена для мониторинга параметров БП и подключенных к нему устройств. В будущем, благодаря ей мы сможем измерить потребление RX580 при максимальной нагрузке (кстати, как видно из скриншотов - в состоянии "абсолютного покоя", вся система, правда еще без подключенной видеокарты, берет из розетки 35W, при этом вентилятор на БП не крутится совсем, т.е. фактически такая система без нагрузки - абсолютно бесшумна, но все изменится когда мы подключим видеокарту и запустим майнер ;).

Полученная система в сборе с видеокартой выглядит как-то так:


Заметьте, что если бы мы собирали обычный ПК, например, с двумя Gigabyte RX580 AORUS XTR и хотели бы использовать CrossFire (честно говоря сам я на практике ни разу его не использовал), то вторая видеокарта ввиду ее исполинской ширины на эту материнскую плату уже бы не стала, т.к. расположение PCI-E 16x для двух "толстых" видеокарт настолько неудачное, что первая видеокарта закрывает своим корпусом слот PCI-E 16x для установки второй. Но в случае с подключением ВК через райзеры, мы конечно же сможем поставить все 6 ВК, т.е. в этом случае мешаться при подключении к материнской плате нам ничего не будет.


На установочном диске от Gigabyte, кстати, шла утилита Aorus Graphics Engine, которая представляет собой некий аналог MSI Afterburner или Sapphire TriXX. Утилита позволяет управлять настройками разгона видеокарты (выбирать частоту GPU и Memory), а также служит средством мониторинга параметров / построения графиков  и т.п. Однако, в сравнении с той же MSI Afterburner параметров доступных для изменения в ней существенно меньше:


Теперь давайте попробуем провести пару тестов в майнинге (ради чего все это собственно и затевалось) и в рамках тестирования установим NiceHash Miner с официального сайта Nicehash. По большому счету Nicehash Miner - это даже не майнер в прямом смысле этого слова, а скорее удобная оболочка для управления и мониторинга различными сторонними майнерами, который NHM автоматически скачивает со своего сайта. В этом как раз и заключается его удобство для нас, т.к. в тесте производительности при запуске он обязательно покажет нам производительность карты в большинстве распространенных алгоритмов:


Получившиеся результаты вы можете видеть на скриншотах. Настройки стоковые - т.е. без какого-либо разгона и т.п. Итого, по оценкам NHM одна RX580 8 Gb даст вам 0.0011019 BTC в день (что-то около 169 руб. при текущем курсе). Также мы видим, что в данный момент NHM выбрал для майнинга алгоритм DaggerHashimoto (ETH) и текущая скорость майнинга с использованием Claymore's Dual ETH + DCR/SC/LBC/PASC GPU Miner v9.5 составляет ~24 Mh/s, энергопотребление карты (по данным MSI Afterburner) составляет ~120 Вт, а ее температура при оборотах кулера на 35% (Auto) составляет 71 градус. Однако, по показаниям БП (Corsair Link) в момент 100% загрузки GPU мы видим несколько другую картину:


Общее потребление составляет 226/208W (in/out), из них по линии 12В - 194W.

Ниже приведены hashrate'ы Gigabyte RX580 AORUS XTR 8 Gb на некоторых популярных алгоритмах / монетах без разгона, т.е. в "стоковом варианте":

Монета / алгоритм Майнер Скорость
ETH (Ethereum) Claymore's Dual GPU Miner v9.5 24.093 MH/s
ETH (Ethereum) Claymore's Dual GPU Miner v9.3 24.137 MH/s
ETH + DCR (Ethereum + Decred) Claymore's Dual GPU Miner v9.3 24 MH/s + 700 MH/s
XMR (Monero) Claymore CryptoNote GPU Miner v9.7 Beta 646 H/s
XMR (Monero) xmr-stak-amd v1.1.0-1.4.0 629 H/s
ZEC (ZCash) Claymore's ZCash AMD GPU Miner v12.4 305 H/s

Теперь давайте попробуем хотя бы примерно посчитать прибыльность майнинга на одной видеокарте. Для этого воспользуемся калькуляторами на www.cryptocompare.com и попробуем посчитать "грязную прибыль" без учета затрат на электричество, т.е. Power consumption (w) и Cost per KW/h ($) мы выставим в 0.

При текущей сложности сети (не забывайте что она растет с каждым днем), например, для ETH с хешрейтом 24 MH/s (одна RX580) мы получим 0.01082 ETH в день или 2.86 USD / 169.39 руб. в день. В месяц это получается около 85.90 USD (5087 руб.) ... Другие монеты / алгоритмы вы можете просчитать самостоятельно (майнинг ETH наиболее выгоден для GPU на данный момент, поэтому будем ориентироваться на него).

Нетрудно посчитать через сколько примерно "отобьются" наши вложения, если учесть что на "платформу", т.е. на все без стоимости карточек и БП мы затратили - 17595 руб., не забудьте добавить сюда стоимость всех ВК в системе, блоков питания, райзеров и конечно же электричества. После чего вы сможете сделать некий вывод для себя - выгодно это или нет.

Также не забывайте, что курс криптовалют вещь относительно неустойчивая и что если сегодня 1 ETH = ~264 USD, то завтра он может измениться как в большую, так и в меньшую сторону (как правило все надеются что в большую ;) Плюс, если вы рассчитываете майнить именно ETH, то не забывайте читать новости проекта, а также учитывайте то, что через какое-то время будет запущен Casper и ETH целиком и полностью уйдет на PoS, т.е. майнинг эфира видеокартами перестанет существовать. Уже сейчас наблюдается значительный рост сложности сети Ethereum, что наглядно видно на графике Ethereum Difficulty Chart and Graph и рост этот по большей части "искусственный" и связан с предстоящим переходом на PoS (кому интересно читаем здесь):


Конечно помимо ETH (Ethereum) существуют и другие криптовалюты, но если на данный момент по показателям доходности / окупаемости вас привлекает именно ETH, то учитывайте что с запуском Casper вы не сможете добывать ETH на GPU, а до этого момента сложность сети будет все возрастать, делая процесс майнинга все менее выгодным. Т.е. в конечном итоге доход приносимый вашим оборудованием сравняется со счетами за электричество, т.е. "упадет до уровня розетки". 

Поэтому принимая решение о покупке видеокарт (особенно по предлагаемым сейчас в условиях дефицита и всеобщего ажиотажа) для майнинга - полагайтесь прежде всего на ваш здравый смысл. И первый вопрос здесь, который вы должны себе задать - через сколько окупится ваше вложение и окупится ли вообще?

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

  • Кулеры в Gigabyte AMD Radeon RX 580 AORUS XTR 8 Gb достаточно хорошие. При 40% оборотов FAN'ов их вообще не слышно, даже если подойти к карте вплотную и прислушаться. Для майнинга это имеет весьма посредственное значение (какая разница какой уровень шума у оборудования), а вот геймеров данный факт безусловно порадует.
  • При 100% нагрузке на GPU и потреблении всей системой около 200W из БП (или 218W из розетки) вентиляторы в БП остаются неподвижными (!). Т.е. его температура остается в пределах допустимой для простоя вентиляторов. Поэтому надпись на коробке "Zero RPM up to 400 Watts at 25°C" полностью оправдывает себя, по факту Corsair HXi 1000W является одним из самый бесшумных БП, которые я когда-либо видел.

понедельник, 24 апреля 2017 г.

Monero. В чем "физический смысл" майнинга?

В предыдущей статье To mine or not to mine. Криптовалюты сегодня мы вкратце рассмотрели некоторые аспекты майнинга криптовалют на CPU/GPU на примере монеты Monero (XMR). Прочитав этот пост, один из моих знакомых задал мне вопрос? Интересно, а что там считается на самом деле и зачем это нужно? Т.е. для человека было просто непонятно, зачем нужны такие огромные вычислительные мощности (сотни и тысячи современных видеокарт) объединенных в пул и что действительно получается в результате расчетов. Т.е. для большинства "майнинг" по прежнему представляет собой что-то загадочное, сравнимое чуть-ли не с рождением Skynet'а и восстанием машин. Поэтому я решил вкратце попробовать объяснить как это работает, какое задание получает майнер (worker) от пула, как оно выглядит, что считается valid share и при каком условии находится блок. Т.к. я сам начал интересоваться этим сравнительно недавно, то давайте договоримся заранее (как в том анекдоте): "в пианиста не стрелять, он играет как умеет", другими словами, я попробую объяснить вам все это на уровне своего текущего понимания (при этом у меня и у самого остались кое-какие вопросы, в которых я постараюсь разобраться в будущем).

Давайте начнем. Любой miner предназначенный для stratum pool'ов общается с ПО пула посредством stratum протокола, который фактически сводится к приему и отправке HTTP/HTTPS запросов, использующих json-rpc. Допустим, что мы настроили тот же xmr-stak-cpu на определенный пул и запустили его. Первое что происходит - это авторизация worker'а на пуле, затем майнер (клиент) получает первый запрос работы (job) от пула (сервер), который выглядит следующим образом:

{"jsonrpc":"2.0","method":"job","params":{"blob":"0505d9c3f8c705399eed95fac6409fa82e4172521be233b049aeeffc6ba250f3ee955e524912be00000000763361a7cc7b391f1fcd510212242cd1
4197ae88440e3a1201a020c72a55f82d01","job_id":"387","target":"711b0d00"}}


Давайте попробуем разобраться, что за поля мы здесь видим:

id - это id worker'а, которому предназначено это задание, blob - само задание, job_id - номер задания, target - значение привязанное к локальной сложности сети, хеш блока удовлетворяющий условию которого и должен искать worker (майнер).

Чтобы понять что из себя представляет blob нам необходим обратиться к стандартам CryptoNonte, а именно [CNS003] CryptoNote Blockchain:


Далее попытаемся разобрать blob согласно приведенной структуре:

  • 05 - major_version
  • 05 - minor_version
  • d9c3f8c7 (0xc7f8c3d9) - время создания блока в формате Unix Timestamp. Переведя 0xc7f8c3d9 в десятичную систему получим 3354969049, что соответствует Fri, 24 Apr 2076 15:50:49 GMT. Почему правда дата здесь смещена на 10 лет вперед, я честног говоря не понял. Но не суть ...
  • 05 - этого поля в приведенной таблице нет, но видимо это номер версии протокола (?) ... с 2012 года стандарт cryptonote скорее всего претерпевал какие-то изменения, но более свежего документа я не нашел. 
  • 399eed95fac6409fa82e4172521be233b049aeeffc6ba250f3ee955e524912be - hash предыдущего блока. Кликнув по ссылке вы увидите его в блокчейне Monero.
  • 00000000 - nonce.
  • 763361a7cc7b391f1fcd510212242cd14197ae88440e3a1201a020c72a55f82d01 - информация, которая содержится уже за пределами block header'а. 

Теперь давайте обратимся к [CNS010] CryptoNote Difficulty Adjustment, в котором сказано: "The work being done by peers is an iterated hash calculation [CNS008]. Every block is considered valid only if the value of its hash is less than or equal to some target value.", что в вольном переводе означает - каждый блок считается валидным, только в случае, если значение его хеша меньше или равно некому значению target (!), которое в свою очередь зависит от сложности сети.

Читаем дальше: "The target value is computed as follows: Target = Floor((2^256 - 1) / Difficulty). Alternatively, it is possible to check the hash of a block without explicitly computing the target value: the block is valid if Hash*Difficulty < 2^256".

Значение target вычисляется следующим образом: Target = Округление(2^256-1) / Сложность). Давайте попробуем посчитать, значение target для сложности в 5000. Для работы с такими большими значениями можно воспользоваться любым онлайн-калькулятором больших чисел:

(2^256 - 1) / 5000 =

0x000d 1b71 758e 2196 52bd 3c36 1134 04ea 4a8c 154c 985f 06f6 9446 7381 d7db f487
0xffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff
0x000d 1b71 ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff

Таким образом получаем target = 0x000d1b71, что собственно в обратном порядке и отдал нам пул (обратите внимание на значение target из json - "711b0d00".

В результате получаем что наш майнер должен подбирать некое число nonce в заголовке блока и хешировать его снова и снова с помощью [CNS008] CryptoNight Hash Function до тех пор, пока значение его хеша не будет <= определенному target.

Если взглянуть на картинку выше (там где майнер получает задание и отправляет решение), то можно видеть что для nonce = "7c0b0000" (0x00000b7c = 2940), майнер насчитал нам hash ef23b7d76779ea2a4994804696888b660b273e398dd2922890d19f629f300c00. Запишем его в обратном порядке:

0x000c 309f 629f d190 2892 d28d 393e 270b 668b 8896 4680 9449 2aea 7967 d7b7 23ef
0x000d 1b71 ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff ffff

Что как мы видим меньше нашего target. Отлично. Давайте посмотрим теперь на другую картинку, как пул принял эту шару:


2017/04/24 19:07:48 [nonce=0x00000b7c] Valid share at difficulty 5000/5376.

Т.е. текущая шара получилась со сложностью 5376, что больше установленной пулом локальной сложности 5000. Поэтому шара считается пулом валидной. Но (!), майнер подобрал nonce для сложности 5000, однако общая сложность сети на момент выполнения майнером этого задания, как видно, была 6661677007 (!). Если бы сложность сети на тот момент была равна 5000, то майнер отправив шару со сложностью 5376 нашел бы блок. Но для сложности 6661677007 это условие к сожалению не выполняется.

Именно так это и работает. Майнер подключается к пулу и получает задание для определенной локальной сложности сети (!), в нашем случае это 5000. Далее он с помощью подбора nonce ищет блок для которого сложность > 5000, т.е. выполняется условие, что значение хеша для этой шары < target. Затем он отправляет получившуюся шару на пул, а пул уже проверяет является ли сложность найденного хеша больше текущей сложности сети. Т.е. грубо говоря, присланная майнером шара в нашем примере была сложности 5376 (!), так вот если бы 5376 было больше чем 6661677007 мы бы нашли блок. Весь майнинг строится на допущении, что находя валидые хеши для блоков с меньшей сложностью есть некоторая вероятность того, что этот же хещ подпадет и под условие текущей сложности сети и блок будет найден.

Для сложности сети 6661677007 валидным хешем был бы хеш (если я правильно посчитал):

0x0000 0000 a50c dee1 2a55 9275 2785 f949 096f 87ab 6eea 2ff9 6758 6f85 b01c 5590

И все что меньше его. Найденный майнером хеш для сложности в 5000 был такой:

0x000c 309f 629f d190 2892 d28d 393e 270b 668b 8896 4680 9449 2aea 7967 d7b7 23ef

Поэтому для сложности 5000 он решил бы блок, а вот для сложности 6661677007 - естественно нет.

Интересующиеся могут ознакомиться со статьей Bitcoin mining the hard way: the algorithms, protocols, and bytes, в ней правда рассказывается про Bitcoin, который использует другой алгоритм хеширования, но какие-то общие моменты можно будет почерпнуть и оттуда.

Некоторые возможно заинтересуются, а как пул посчитал сложность найденного хеша? Т.е. как получилось 5376 для хеша 0x000c309f629fd1902892d28d393e270b668b8896468094492aea7967d7b723ef. Для этого нужно (2^256) разделить на этот хеш. Результатом будет как раз: 5 376:


А теперь давайте посмотрим на результаты несколько реально работающих майнеров на протяжении суток (в качестве ПО у нас используется xmr-stak-cpu, xmr-stak-amd и xmr-stak-nvidia), в нем предусмотрен вывод Top 10 лучших найденных результатов за все время. Итак, при текущей сложности сети в 6816718873 по прошествии суток работы лучшие результаты были такими:


Т.е. лучшая сложность шары найденная майнером была 113327313 при сложности сети в 6816718873 (9 знаков в найденной шаре против 10 знаков в сложности сети). Таким образом ни одного результативного блока за это время найдено не было. Но на все, как говорится, воля случая ... ;)

Надеюсь что я хоть немного приоткрыл вам завесу тайны над тем, чем конкретно занимается майнер в процессе работы. Если будут вопросы, предложения, пожелания и т.п. - всегда рад выслушать их в комментариях.

понедельник, 17 апреля 2017 г.

To mine or not to mine. Криптовалюты сегодня.

Очередной пост под конец выходных, в котором я постараюсь затронуть очень интересную на мой взгляд тему, которую прежде я почему-то обходил стороной, а именно - криптовалюты. Сразу скажу, что область эта для меня достаточно новая, т.к. мой уровень знаний, опыта и т.п. в ней весьма поверхностный, поэтому разговор пойдет с "позиции новичка". В интернете можно найти достаточно много руководств, видеороликов на YouTube и т.п., которые обещают нам некий доход от использования мощностей собственных ПК, но так ли это на самом деле? Давайте попробуем разобраться вместе.

Начну я пожалуй с того, что каждый в своей жизни хотя бы раз, слышал про такую вещь как Bitcoin. Но далеко не все в полной мере представляют что это такое, как его добывают и вообще есть ли смысл этим заниматься (забегая вперед скажу, что времена когда добывать или "майнить" Bitcoin [BTC] на домашних мощностях уже далеко в прошлом, но помимо него есть также и множество других криптовалют, которые по-прежнему могут представлять интерес). Для начала несколько статей про сам Bitcoin, которые прочитал я:


При чтении будет не лишним обратить внимание на время публикации статьи, все что касается сложности, скорости сети, hashrate'ов, времени добычи, оборудования и т.п., т.е. все цифры приведенные в них, к сожалению уже устарели. На данный момент примерный курс Bitcoin: 1 BTC = ~ 1200 USD, а "скорость сети" - 3,779,873,330 GH/s . Как вы понимаете, при текущей сложности сети, а также скорости вычислений (hashrate) майнить (добывать) BTC в домашних условиях уже давно не представляется возможным. Для этого давно есть специализированные устройства - ASIC-майнеры (всю информациюОбщая стоимость подобной конфигурации сейчас составляет порядка ~70-80 тыс. руб.  по ним, а также, калькуляторы расчета доходности можно без труда найти в интернете). Однако, далеко не всем по карману построить небольшую ферму из ASIC-майнеров (для сравнения стоимость актуальных устройств на данный момент составляет 80000-100000 руб. и выше), поэтому заинтересовавшись, как и вы, криптовалютами я решил прежде всего понять - что же сейчас актуально для обычного домашнего пользователя и есть ли какие-то монеты, которые до сих пор можно добывать на CPU или GPU. 

Одной из такой валют является Monero:


Официальный сайт проекта Monero находится здесь - https://getmonero.org/home . Там же можно почитать про плюсы, минусы, а также ознакомиться с руководством "How do i get started?" (Как начать?). Однако мое знакомство с Monero началось с совсем другой статьи: Solo Mining: How to strengthen Monero's network and become part of its story, в которой автор рассказывал как за три дня с помощью домашних ПК, объединенных в пул (общий hashrate этих ПК равнялся 1500 H/s) ему удалось успешно добыть 1 блок и получить вознаграждение в 8 XMR.


Что по текущему курсу составляет 8 XMR * 20.76 USD = 166,08 USD (~9348 руб.) Согласитесь, звучит интересно. Но так ли это на самом деле? Т.е. повторяем ли данный результат сегодня, учитывая то что исходный пост был написан автором 3 месяца назад. Это я и решил проверить. Для проведения эксперимента был взят ПК со следующими характеристиками:

  • Процессор: Intel® Core™ i7-6700K CPU @ 4.00GHz × 8 
  • GPU: GeForce GTX 1060 3GB/PCIe/SSE2
  • RAM: 32 Gb (2 x DDR-IV DIMM 16Gb <PC-19200> Crucial <CT16G4DFD824A>)
  • SSD Kingston 200 Gb

На ПК была установлена Ubuntu 16.04 (x64), после чего на него был установлен Monero v0.10.3.1 демон, т.е. запущена Full Node, а также GUI кошелек - Monero GUI Beta 2 для удобства (как он выглядит можно посмотреть на самом первом скриншоте). Полная синхронизация blockchain'а заняла несколько (3, 5 или 7, точно не помню, т.к. происходило это ночью, когда я уже спал) часов, суммарный объем получившего блокчейна (data.mdb) составляет примерно ~14.3 Gb. После этого я решил запустить майнинг средствами monerod на сутки и посмотреть повезет ли мне найти блок:


Как видно, средний hashrate (количество хешей обрабатываемых в секунду) у i7-6700K при 4-х потоках составляет ~250 H/s (при попытке установить 8 потоков, фактический хешрейт почему-то был меньше, поэтому я решил оставить 4 потока). Однако, ПК оставленный с такими настройками майнинга на сутки ничего не добыл. Т.е. заветного блока так и не было найдено. Поэтому я решил попробовать поучаствовать в совместной добыче монет, а именно присоединиться к одному из пулов. Два пула на которых я решил попробовать помайнить - это https://supportxmr.com/ и https://xmrpool.net/ ... но прежде чем майнить, естественно, нужны были майнеры, т.е. ПО для добычи монет.

Монета Monero построена на базе алгоритма CryptoNight. Здесь я не буду вдаваться в подробности, при желании всю информацию можно найти в интернете, однако, скажу, что алгоритм CryptoNight построен таким образом, что его практически невозможно адаптировать для ASIC майнеров, т.е. разработчиками алгоритма и Monero изначально было предусмотрено то, что добыча монеты может осуществляться обычными пользователями на обычных ПК с использованием CPU или GPU мощностей. Поэтому для начала работы следовало найти подходящий майнер с поддержкой cryptonight алгоритма. По ряду причин мой выбор пал на xmr-stak-cpu для CPU и xmr-stak-nvidia для GPU. И то и другое ПО доступно в исходных кодах (!) и является кросплатформенным, т.е. собрать рабочий релиз майнера можно как под Linux, так и под Windows-based системы.

Естественно, что в интернете есть множество готовых сборок xmr-stak'а, но я решил собрать его сам из последних исходников, чтобы обезопасить себя от ряда возможных проблем. Как минимум, чужая сборка майнера может включать в себя какие-либо "закладки", т.е. совсем не факт, что майнер собранный кем-то другим будет работать на 100% мощности именно на указанный вами pool. Другими словами, запустив на своем ПК майнер неизвестного происхождения вы будете помогать добывать монеты тому, кто его собрал / скомпилировал - это как минимум, а как максимум - бинарник скачанный с неизвестного сайта вполне может нести в себе и другие угрозы (объяснять что интернет полон различных угроз - думаю никому не нужно). Поэтому лучшим вариантом здесь, как мне кажется, является сборка из исходников, с предварительным (хотя бы беглым) их изучением. Надо отметить что процесс сборки под Linux хорошо документирован разработчиком и не должен вызвать проблем. Со сборкой под Windows же могут возникнуть некоторые сложности (если тема будет интересна, могу описать процесс компиляции xmr-stak-cpu для Windows в одном из следующих постов).

Итак, после того как майнеры были собраны и сконфигурированы на pool осталось только дождаться результатов. Но сначала я расскажу что получилось в плане хешрейтов и скорости:

  • i7-6700K с xmr-stak-cpu в 4 потока показал результат в ~250-270 H/s.
  • GTX 1060 3GB с xmr-stak-nvidia - ~430-440 H/s.

Итого суммарно ПК с приведенной конфигурацией выдавал около 680-710 H/s. Для того чтобы чуть поднять вычислительные мощности я попросил нескольких знакомых с Core i3 и ноутбуком на Core i7 также запустить майнер у себя. Получилось примерно следующее, Core i3 в зависимости от количества потоков и платформы выдавал ~40 H/s, а ноутбук с Core i7 в 2 потока - ~100-120 H/s. В общей сумме общий хешрейт майнеров подобрался к 1 kH/s (1000 H/s). 

Среднее время нахождения блока на пуле при суммарной мощности пула в 237.7 KH/s составляло 7-8 часов. Т.е. когда-то блок находился за 3 часа, когда-то за 8, когда-то чуть больше 10, а один раз до нахождения блока прошло более 24-х часов. Существует несколько схем начисления вознаграждений на подобных пулах, это PPS, PPLNS (Pay Per Last N Share) и т.п. О них вы также можете прочитать в интернете, пул с которым работал я поддерживал только PPLNS. Т.к. многих интересует непосредственно результат (количество добытых монет XMR) приведу два скриншота:


Первый был сделан где-то в середине эксперимента, второй - на момент написания этих строк. Итого за 2 с небольшим суток мне удалось добыть что-то около 0.0516150741 XMR, что в пересчете на реальные деньги составляет - 1,07 USD или 60 руб. Однако и тут есть "подводные камни". Т.е. забрать эти деньги и пойти купить на них что-нибудь в реальной жизни просто так не удастся ;) Почему?

  • Добытые вами монеты находятся не в вашем Monero (XMR) кошельке, а в кошельке пула, чтобы вывести их оттуда нужна некая минимальная сумма, при которой возможно провести выплату. В моем случае пул выплачивал вознаграждения от 0.3 XMR. Т.е. вывести 0.05 XMR нельзя, нужно дождаться пока наберется необходимый минимум для вывода. С учетом того что эти 0.05 XMR я добывал два дня, то для того чтобы добыть 0.3 XMR понадобится в 6 раз больше времени. Т.е. 12 суток (!) беспрерывной работы не самого плохого железа.
  • Помимо этого пул берет свой процент комиссии (!) ... плюс может существовать комиссия за проведение транзакции ... таким образом даже эти 0.05 XMR могут превратиться в меньшую сумму.
  • Как вы понимаете - это только начало пути. После того как монеты окажутся у вас в кошельке, это будут всего лишь виртуальные XMR. Потом вам предстоит либо сразу найти покупателя на них (ваши знакомые слышали когда-нибудь о Monero и жаждут купить их? ;), либо обменять на одной из бирж на что-то более конвертируемое, например, тот же Bitcoin, продать который за USD и руб. существенно проще, чем XMR. Однако учитывайте, каждая операция это тоже различные fee, комиссии и потери на разнице курсов. Сколько реально денег может дойти до вашего рублевого кошелька или банковской карты из этих несчастных 60 руб., заработанных за двое суток - я даже боюсь предположить ;) 

Я думаю - вы все поняли ... не забудьте также ко всем этим комиссиям за переводы и т.п. приплюсовать расходы на электричество в конце месяца. 

Развернутый вывод писать уже нет сил, но думаю и так все понятно. Обладая не самым плохим ПК и майня одну из наиболее выгодных на данный момент монет (например, Monero) заработать что-либо существенное, к сожалению, не получится. Однако, если у вас не один такой ПК, а к примеру 10, 50, 100 и т.п. и бесплатное электричество, то попробовать на интерес конечно можно. Как это вижу лично я? Ну например, вы работаете в каком-нибудь крупном магазине электроники где постоянно включены в сеть 20-30 условно игровых ПК, запускаем на каждом из них майнер и смотрим на результат ;) Правда в этом случае возможен, как говорили раньше, "выговор с занесением" ... В любом случае ваш доход, как вы поняли, пропорционален общей вычислительной мощности имеющейся у вас сети ... Другой вариант наверное возможен, когда у вас в распоряжении находится что-то вроде такого: Forsite HPC-1028 NvLink или такого Forsite HPC-8000T решения ;) Интересно, какой hashrate при майнинге Monero выдаст последняя конфигурация? (так и хочется сказать что-то вроде "если у вас вдруг есть такой - пишите в комментариях" ;)

Ну и последний практический вариант больше подходит любителям лотерей ;) Заключается он в поднятии своего собственного пула по примеру автора из этой статьи и подключение туда всех доступных вам мощностей. При достаточном hasrate'е и очень-очень большом везении, возможно вам удастся найти блок собственными силами.

p.s. Как вы уже поняли, я вовсе не претендую на "эксперта" в этой области, а скорее наооборот. Поэтому если у вас есть положительный опыт майнинга криптовалют на ПК - будет интересно услышать ваше мнение в комментариях. Однако, пожалуй сразу предупрежу, комментарии содержащие реферальные ссылки, флуд не по теме и т.п. публиковаться не будут. При написании прежде всего руководствуйтесь здравым смыслом.

Обновлено 17.04.2017 07:30 MSK

Те, кто заинтересовался темой майнинга Monero (XMR) и уже попробовали себя в различных пулах - рано или поздно зададутся вопросом, а есть ли простой способ "суммировать" все домашние мощности и запустить нечто вроде собственного пула. Т.е. чтобы все CPU / GPU в доме трудились на благо нахождения общего блока, прибыль за который (~8 XMR) пойдет полностью вам. Такая возможность на самом деле есть, некоторые пулы предлагают майнинг в режиме Solo, например xmrpool.net. Что означает такой режим?

"Solo mining is the opposite of pool mining. You essentially submit your shares directly to the blockchain, which is the most profitable method if you run your own farm." (c) xmrpool

Другими словами, соло майнинг на пуле является противоположностью майнинга в пуле с PPS / PPLNS методиками вознаграждения. Если вам (совокупности ваших майнеров) удастся найти блок, то вся награда за него, за исключением небольшой комиссии пула пойдет вам. Этот режим подходит для тех пользователей, которые рассчитывают на удачу и не хотят делить вознаграждение с остальными майнерами. Но с другой стороны - никто не мешает нам поднять свой собственный (!) пул так, как описано в этой статье, в частности там автор использует cryptonote-xmr-pool от Gingeropolous. Но настройка пула на node.js может показаться непростой на первый взгляд, поэтому в поисках решения проще я наткнулся на этот пост - Solo GPU mining, а уже потом нашел замечательный пул от sammy007 - monero-stratum, написанный на Golang. Если внимательно следовать инструкции в README.md запустить его на Ubuntu 16.04 довольно просто. Как все это работает?

Как известно monerod поддерживает JSON-RPC интерфейс (по-умолчанию на http://127.0.0.1:18081/json_rpc), но большинство майнеров не умеют работать с демоном monero через JSON-RPC напрямую, т.к. они заточены на поддержку протокола stratum. Здесь-то нам как раз и поможет monero-stratum (Monero Proxy). Он будет общаться с monerod через JSON-RPC, а вот с майнерами уже через Stratum. В результате все найденные вами блоки будут попадать напрямую в блокчейн.

monero-stratum (MoneroProxy) имеет приятный web-интерфейс, который выглядит следующим образом:


Как видно, у меня подключено 4 различных майнера, которые в сумме дают чуть меньше ~1000 H/s (H/s на картинке периодически меняется). Сам же запущенный пул выглядит следующим образом:


Повезет мне или нет - не знаю, но по-крайней мере теперь у вас есть ответ на вопрос: как майнить на GPU в Solo.

Обновлено 17.04.2017 20:58 MSK

Solo Mining Monero for Fun and for The Greater Good - небольшая статья о Solo майнинге Monero (XMR) от sammy007, автора monero-stratum пула.

Обновлено 22.04.2017 18:37 MSK

Для интересующихся несколько скриншотов / фото в стиле "весь смысл майнинга на GPU в одном флаконе":


В системе две видеокарты - GeForce GTX 1060 3GB/PCIe/SSE2 и Sapphire Nitro Radeon RX 480 4G без каких-либо модификаций (т.е. BIOS не перешивался, частоты и вольтаж не менялись и т.п.) ... как видно RX 480 дает ~620 H/s, GTX 1060 - ~440 H/s и CPU порядка ~170 H/s. Суммарная вычислительная мощность такой конфигурации ~1230 H/s. Нетрудно посчитать что при текущей сложности сети, потреблении энергии ~300 Вт·ч и стоимости электричества в районе 0.07 USD за 1 кВт·ч и курсе Monero (XMR) в 20.11 USD за 1 XMR получаем около 2 USD в день, 13.60 USD в неделю и ~58.29 USD в месяц. Т.е. что-то около 3264,24 руб. Не так много, но эти показатели можно увеличить за счет "экстенсивного пути", а именно, наращивания мощностей. Актуальный расчет для этих параметров при текущей сложности сети и курсе XMR всегда можно посмотреть здесь.

Рабочая температура видеоадаптеров при этом (при 100% загрузке) держится на уровне ~70 градусов.

Обновлено 23.04.2017 01:07 MSK

Какие-то вещи понимаешь только экспериментально, т.е. пройдя через них. Как вы можете видеть на фото выше рабочая температура обоих адаптеров в районе 70 градусов, при этом кулеры пытаясь создать необходимый теплоотвод начинают вращаться сильнее, чем создают довольно ощутимый уровень шума. Однако стоило только открыть стенку системного блока + поставить ПК поближе к открытому окну и ворвавшаяся в комнату ночная прохлада полностью изменила картину:


При той же производительности, т.е. при GPU Load под 100% на обеих видеокартах температура упала со средних 70 до 60 градусов, а Fan Speed (%) упал до 15% у RX 480 и до 34% у GTX 1060. При этом чисто по восприятию гул от вращения вентиляторов пропал совсем. Т.е. ПК который еще недавно наполнял всю комнату заметным шумом стал абсолютно тихим. Вывод простой: можно много читать про грамотное охлаждение, можно теоретизировать на эту тему, например, думая что любое дополнительное охлаждение или еще один вентилятор или внешний обдув лишь усилят шум, однако, как показала практика - при использовании "естественного" охлаждения / теплоотвода уровень шума сводится на нет.