Bitcoin Forum
November 01, 2024, 10:46:56 AM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Algorithme pour miner  (Read 1420 times)
anemol (OP)
Hero Member
*****
Offline Offline

Activity: 800
Merit: 500



View Profile WWW
March 05, 2013, 10:24:06 AM
 #1


Juste pour le plaisir de coder, j'essaie de programmer un simple algorithme de minage en C#. J'ai glané des informations sur Internet ici et là, mais je ne suis pas certain de mon approche. J'ai vu qu'il y avait une approche avec les champs midstate/hash1, mais j'ai préféré celle où on utilise data.

Si j'ai bien compris:

- Appel méthode getwork pour récupérer les champs data & target
- Inversion des bytes pour data
- Prendre les 80 premiers octets de data
- Pour nonce allant de 0 à nonce_max:
      - Remplacer les 4 derniers octets par nonce
      - hash= Hash256( Hash256(data+nonce) )
      - Si hash finit par 0x0000 soumettre le travail (le data original et intégrant le nonce trouvé) (réponse true ou false)
       

Exemple:

Original:
000000028215D48BFA6E9F459441D261F7AD640C7267CF070E50B8AC000002DE0000000024091AD 9EC94DC3F9BAC64776F61B057A0C26DA8942E9A8BEB94BD44B9CF2BA35135C5DC1A03D74B000000 0000000080000000000000000000000000000000000000000000000000000000000000000000000 0000000000080020000

Inversion bytes:
020000008BD41582459F6EFA61D241940C64ADF707CF6772ACB8500EDE020000000000000AD9125 425B6B89A10436597336C20A42163C156E18512748CF0F6012A1C13A031C535514BD7031A000000 0080000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000280

Hash de:
020000008BD41582459F6EFA61D241940C64ADF707CF6772ACB8500EDE02000000000000D91A092 43FDC94EC7764AC9B57B0616FA86DC2A08B9A2E9444BD94EBA32BCFB9DCC535514BD7031A0000C5BE
donne:
B6F2DAFF33C9DD76525228582D237A1DE95760FC5928E8C611AF837B0DD40000


Est ce correct?

sirk390
Full Member
***
Offline Offline

Activity: 153
Merit: 100


View Profile
March 05, 2013, 03:13:12 PM
 #2

C'est plus un peu plus complexe mais y a de l'idée.
1. Pour vérifier le hash, il faut transformer le bytestring256bits en uint256 et voir s'il est inférieur au 'target' (uint256 aussi) .
Dire que le hash commence par une suite de bits à 0 est une simplification.
Il peux y avoir des contraintes sur certains autres bits.

2. Il te manque la partie de l'extra_nonce car 'max nonce' à lui seul est trop petit.

J'ai implementé un mineur en python si tu veux voir un exemple:
https://github.com/sirk390/coinpy/blob/master/coinpy-lib/src/coinpy/lib/mining/mining.py
anemol (OP)
Hero Member
*****
Offline Offline

Activity: 800
Merit: 500



View Profile WWW
March 05, 2013, 05:27:44 PM
Last edit: March 05, 2013, 07:04:41 PM by anemol
 #3

Merci pour ces réponses.  Smiley

Le champ target est - il à prendre tel quel ou bien faut il aussi inverser l'ordre des octets?

Toujours pour ce champ, les bits les plus forts se trouvent bien à gauche?

Pour le nonce, j'ai ma boucle qui fait çà:
for(uint nonce=0;nonce<0xFFFFFFFF;nonce++)
{
...
}
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!