Bitcoin майнинг

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by FunOfGun, 10 Apr 2013.

  1. FunOfGun

    FunOfGun Elder - Старейшина

    Joined:
    5 Sep 2012
    Messages:
    388
    Likes Received:
    71
    Reputations:
    124
    Где можно о нем почитать("внутренности", хочу попытаться свой майнер написать)? Желательно подробное описание, но можно и читабельный исходник(предпочтение перед java, c#, скрипт-языками). Пытался гуглить, но не нашел(скорей всего просто прошел мимо). Заранее благодарен.
     
  2. fl00der

    fl00der Moderator

    Joined:
    17 Dec 2008
    Messages:
    1,028
    Likes Received:
    310
    Reputations:
    86
    Я бы тоже почитал именно за техническую сторону этого дела. Исходник на C++/Delphi бы тоже сгодился.
     
    _________________________
  3. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    посмотрите сорцы хотя бы тут:http://ufasoft.com/coin/
    а вообще то там без асма не обойтись
    и еще вот такое самоеееее простенькое
    https://github.com/jgarzik/cpuminer
    а вот еще на пайтоне
    https://github.com/jgarzik/pyminer/blob/master/pyminer.py
     
    #3 DooD, 10 Apr 2013
    Last edited: 10 Apr 2013
    1 person likes this.
  4. kokoulin

    kokoulin Member

    Joined:
    8 Jan 2011
    Messages:
    63
    Likes Received:
    5
    Reputations:
    5
    да они почти все на питоне, с точки зрения простого програмиста гораздо удобно и выгоднее писать надстройку над существующими майнерами у них у всех прекрасное апи
    лучше всего cgminer
     
  5. los8005

    los8005 Member

    Joined:
    28 Sep 2009
    Messages:
    19
    Likes Received:
    5
    Reputations:
    5
    можно вобще с собой носить консольный майнер и дергать его. тот же от ufasoft
     
  6. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    на одной тачке профита ноль, если чисто для изучения - то полезно, очень часто гпу используется.
    пару месяцев назад задетектил релизёров ск2-хер оф сворм на тореннтах, которые вместе с репаком майнера впаривали. вабще наглая тулза была - и цпу и гпу по макимуму юзала, цпу - по 2 потока на ядро, ~99% загрузка юзермодная, в итоге компы у детишек реально горели))
    ну и конечнож отстук за заданием и получением нового. то есть целый ботнет (правда ничего иного этот майнер не делал и не сливал) - тут конечно есть профит.
     
  7. J.Z.

    J.Z. Member

    Joined:
    15 Dec 2012
    Messages:
    32
    Likes Received:
    8
    Reputations:
    0
    Майнер на Perl:

    PHP:
    #!/usr/bin/env perl
    use 5.010_001;
    use 
    strict;
    use 
    warnings;
    use 
    Digest::SHA;
    use 
    JSON;
    use 
    WWW::Mechanize;
    use 
    Time::HiRes qw<time gettimeofday tv_interval>;
    use 
    Getopt::Long;

    sub get_work {
    my $json encode_json( { id => 'json'method => 'getwork'params => $_[0] ? $_[0] : [] } );
    my $mech WWW::Mechanize->new;
    $mech->credentials'login!!!!!''pass' );
    my $rc $mech->post"http://pool-us.50btc.com:8332/"Content => $json );
    warn "Get_work ($json): returned: "$rc->decoded_content"\n";
    my $result decode_json$rc->decoded_content );
    return 
    $result;
    }

    my $max_nonce hex("0xfffffffa");

    sub sha256 Digest::SHA::sha256( @) }

    sub find_share 
    my $data shift;
    my $raw pack 'H*'$data->{data};
    my $short substr$raw080 ); # 80 bytes
    my $short_le pack "N*"unpack "V*"$short

    my @solutions;
    #for my $i_nonce (0..(2**25-1))
    for my $i_nonce (.. 1000000)
    {
    my $nonce_le pack 'N*'$i_nonce;
    #print "Nonce $i_nonce ($nonce_le)\n";
    substr$short_le76) = $nonce_le;
    # sha256(sha256( $data ))
    my $hash1 sha256($short_le); 
    my $hash sha256sha256($short_le) );
    #my $hash1_be = pack "N*", unpack("V*", $hash1); # BE again
    #my $hash_be = pack "N*", unpack("V*", $hash);
    #print "----------\n";
    #print "nonce: ", unpack("H*", $nonce_le), "\n";
    #print "hash1: ", unpack("H*", $hash1), "\n";
    #print "hash: ", unpack("H*", $hash), "\n";
    my $zero_starting unpack'H*'reverse $hash );
    if ( 
    $zero_starting =~ /^00000000/ ) {
    warn "----------\nFound : $zero_starting (nonce $i_nonce)\n";
    push @solutions$hash;
    }

    }
    return @
    solutions;
    }

    while (
    1) {
    my $work get_work();
    die 
    "Error fetching work! "$work->{error// 'unknown error' if (!$work or $work->{error});
    my $start time;
    my (@found) = find_share$work->{result} );
    if ( @
    found ) {
    warn "Found share -- @found -- ";
    }
    my $end time;
    warn "Processed in ", ($end-$start), "\n";
    }