Title: Algorithme pour miner Post by: anemol on March 05, 2013, 10:24:06 AM 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? Title: Re: Algorithme pour miner Post by: sirk390 on March 05, 2013, 03:13:12 PM 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 Title: Re: Algorithme pour miner Post by: anemol on March 05, 2013, 05:27:44 PM Merci pour ces réponses. :)
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++) { ... } |