Author

Topic: Algorithme pour miner (Read 1423 times)

hero member
Activity: 800
Merit: 500
March 05, 2013, 12:27:44 PM
#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++)
{
...
}
full member
Activity: 153
Merit: 100
March 05, 2013, 10:13:12 AM
#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
hero member
Activity: 800
Merit: 500
March 05, 2013, 05: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?

Jump to: