Author

Topic: Самый простой исходный код майнера на C++ (Read 19715 times)

newbie
Activity: 43
Merit: 0
#!/usr/bin/env perl
use 5.010_001;
use strict;
use warnings;
use Digest::SHA;
use JSON;
use WWW::Mechanize;
use Time::HiRes qw
legendary
Activity: 2128
Merit: 1019
Сам bitcoind на C++, и майнер в него встроен.
По теме исходников майнеров.

Есть ли простые исходники где нить на Си шарп ?

И описание проходящих процессов, для чайников.
А не спецификации для  тех, кто и так знает общие вопросы.
sr. member
Activity: 462
Merit: 250
Самый простой на C, cpuminer https://github.com/jgarzik/cpuminer , от него форчится cgminer, первый только для cpu, второй только для gpu.
У меня cgminer считал хеши на ЦП.
sr. member
Activity: 322
Merit: 250
Сам bitcoind на C++, и майнер в него встроен.

Самый простой на C, cpuminer https://github.com/jgarzik/cpuminer , от него форчится cgminer, первый только для cpu, второй только для gpu.

Up!
По теме исходников майнеров.
LZ
legendary
Activity: 1722
Merit: 1072
P2P Cryptocurrency
Есть pyminer, но он на Python. Roll Eyes
newbie
Activity: 24
Merit: 0
Спасибо! Попробую разобраться.

ЗЫ. На Вашем пуле, Balthazar, уже не 100, а стабильные 200-230 GH/s, пора менять подпись))
legendary
Activity: 3108
Merit: 1359
Code:
bitcoin@pool:/$ bitcoind -rpcconnect=82.146.47.200 -rpcport=8346 -rpcuser=balthazar_1 -rpcpassword=xxx getwork
{
    "data" : "000000013a70a2e6411119373547c528c629756ff52d57ce032005c1000000b70000000019c5f9e24798167e4b9e9f48957550101344168de128a9734b12b476302db4a75024b6471a083cc900000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000",
    "midstate" : "b2ebcdb350711d63aeb0cc3cc41bc024219de9fe87548467e2da1c5a4d247fa5",
    "target" : "0000000000000000000000000000000000000000000000000000ffff00000000",
    "hash1" : "00000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000010000"
}
bitcoin@pool:/$

newbie
Activity: 24
Merit: 0
Да, Balthazar, hex2bin я видел, sha256 тоже)
С getwork уже проблема (по шустрому не смог найти), хотя для дебагера, я так понимаю достаточно и пару готовых примеров. Необязательно ведь подрубаться наживую к рабочему пулу (над этим, кстати, еще поработать как следует надо).

Можно гденить отковырять пару результатов запроса getwork?

Спасибо за помощь)
legendary
Activity: 3108
Merit: 1359
Это значительно проще, Balthazar, спасибо))

Но как Вы сами понимаете, в дебагер это не засунешь)) Где взять blockheader? sha256 не является предопределенным методом языка C++, значит должен быть класс...
Берем строку, которую вернул запрос getwork, конвертируем преобразуем ее функцией hex2bin (реализаций много в интернете можно найти). Берем из результата первые 80 байт, переворачиваем порядок байтов и это будет blockheader. Для sha256 тоже любая доступная реализация подойдет. А hash_greater_target определяется как-то так:


Code:
int hash_greater_target(const unsigned char *hash, const unsigned char *target)
{
uint32_t *hash32 = (uint32_t *) hash;
uint32_t *target32 = (uint32_t *) target;
int i;
/* this is NOT endian-clean */
for (i = 7; i >= 0; i--) {
if (hash32[i] > target32[i])
return 1;
//shortcut
if (hash32[i] < target32[i])
return 0;
}
return 0;
}

Первый параметр - хэш, второй - обработанное hex2bin и перевернутое значение target, которое вернул запрос getwork.
newbie
Activity: 24
Merit: 0
Сходу началось:
Где взять cpuminer-config.h, sys/time.h еще дофига *.h, которые присандалены к cpu-miner.cpp в этом самом простом исходнике?
newbie
Activity: 24
Merit: 0
Судя по всему придется этот "самый простой" исходник ковырять.
А может быть есть нечто в духе того, что начал Balthazar?
legendary
Activity: 2317
Merit: 2318
но там я нашел только "конструктор" для линюха, причем на С.
https://github.com/jgarzik/cpuminer
Это и есть самый простой исходник CPU-майнера на С без наворотов, который, кстати, собирается и под Windows c помощью Mingw32, и который таки можно засунуть в дебаггер.
newbie
Activity: 24
Merit: 0
Это значительно проще, Balthazar, спасибо))

Но как Вы сами понимаете, в дебагер это не засунешь)) Где взять blockheader? sha256 не является предопределенным методом языка C++, значит должен быть класс... Я даже подозреваю где его взять.

В любом случае, я так подозреваю писать в форумной ветке весь исходник занятие неблагодарное. Может все-таки есть некий источник для человека, который только начал пытаться вникнуть?
legendary
Activity: 3108
Merit: 1359
Code:
while(true)
{
   blockheader.nNonce++;
   if(blockheader.nNonce < 0)
   {
       blockheader.nNonce = 0;
       blockheader.nTime = GetTime();
   }

   hash = sha256(sha256(blockheader));

   if(!hash_greater_target(hash, target))
          break;
}
newbie
Activity: 24
Merit: 0
Привет всем!

В данной ветке я уже нашел топик в духе "100 баксов за разбор кода" (https://bitcointalksearch.org/topic/100-c-17747), там даже дается намек, что самый простой исходник, это бинарник от Jgarzic, но там я нашел только "конструктор" для линюха, причем на С.

Вопрос: существует ли какой-нибудь исходник без наворотов в духе скринсейверов, отображения температуры и прочих вкусностей, просто что-нибудь в духе
Code:
#include "1.h"
#include "2.h"
....
#include "N.h"


int _tmain(int argc, _TCHAR* argv[])
{
//понеслась
}


Причем с комментами.
Причем отдельно либо для CPU, либо для OpenCL.

Есть куча сорцов готовых майнеров, но там похоже только для гуру C++, потому как даже просто разобрать все это хозяйство по полкам, чтобы понятно было где все начинается и чем продолжается - уже задача нетривиальная (есть  подозрение, что даже для гуру C-прогеров). У авторов очевидно нет привычки комменты писать с назначением той или иной процедуры/функции/переменной, поэтому пытаюсь найти хотя бы попроще.

Заранее спасибо за любые наводки.
Jump to: