Cette page: Blocks a déclaré que le minage consiste en fait à résoudre un problème mathématique, mais la lecture de algorithme de hachage de blocs ne maide pas beaucoup. Jai également essayé lire le code source de bitcoind, mais la lecture du code prend beaucoup plus de temps que la lecture de la documentation 🙂
Et jai écrit un simple client json-rpc pour appeler la méthode getwork () pour récupérer les « données », mais que faut-il Je fais à côté de ces « données »?
Nimporte qui pourrait expliquer le processus de minage dans la vue du programmeur?
Commentaires
Réponse
Lalgorithme de minage est le suivant:
-
Étape 0 – Récupérez le hachage du bloc précédent sur le réseau.
-
Étape 1 – Rassemblez une liste de transactions potentielles appelées « bloc ». Cette liste de transactions provient du réseau bitcoin peer-to-peer.
- Étape 2 – Calculez un hachage pour un bloc de transactions potentielles avec un nombre aléatoire.
- Étape 3 – Si le hachage est supérieur au niveau de difficulté actuellement défini, vous avez miné ce bloc. Si ce nest pas le cas, recommencez à partir de létape 1. Tout ajout à la liste des transactions de létape 1 ainsi que le changement du nombre aléatoire de létape 2 signifient quil « a une chance que le critère soit satisfait lors de la prochaine reprise.
Du point de vue dun programmeur, le pseudo code pourrait ressembler à ceci:
P := The hash of the previously mined block B := A block of transactions H := A hash function D := Difficulty Level 0 Retreive P 1 Construct/Modify B 2 IF H(P, B, Some Random Number) > D END 3 GOTO 1
Je devrais vous avertir quil y a quelques inexactitudes dans cette description, mais pour la plupart, cela devrait suffire. Et voici quelques précisions supplémentaires utiles:
Quest-ce que « sa hash?
Un hachage est une fonction qui convertit les données en un nombre dans une certaine plage. Le hachage a la propriété que connaître sa sortie est essentiellement imprévisible (dans la plage donnée). La fonction de hachage spécifique utilisée pour lextraction de bitcoins est SHA256 appliqué deux fois.
Comment fonctionne le niveau de difficulté?
Cette nature imprévisible de la fonction de hachage signifie que linsertion de données aléatoires (la transaction + le nombre aléatoire) produira essentiellement un nombre aléatoire dans une certaine plage. Une restriction supplémentaire de la plage de la sortie souhaitée affecte la probabilité de la trouver en un seul tour. Cela crée un moyen de déterminer de manière probabiliste la fréquence à laquelle une solution sera trouvée en fonction du nombre de fois que lalgorithme peut être exécuté sur le réseau. Plus précisément, lorsque vous entendez le terme «gigahashes» ou «terahashes», cela fait référence au nombre de fois que létape 3 peut être exécutée. Au fur et à mesure que le nombre de hachages par seconde sur lensemble du réseau augmente, le réseau augmente automatiquement la difficulté de sorte quune solution sera trouvée dans les 10 minutes environ.
Que se passe-t-il lorsquun bloc est miné?
Lorsquun bloc est miné, le mineur envoie le bloc à tous les autres mineurs du réseau comme preuve quil a trouvé. Ce bloc contient une liste de transactions, le hachage trouvé, le nombre aléatoire spécifique et une référence au hachage précédent. Au fur et à mesure que chaque mineur reçoit le bloc nouvellement extrait, il supprime toutes les transactions quil extrait actuellement qui existent dans le bloc (car elles « ont déjà été confirmées dans la chaîne de blocs) et diffuse le bloc à dautres mineurs qui font la même chose. la propagation se produit assez rapidement.
Remarque: le mineur dorigine du bloc reçoit des « frais de mineurs », qui sont une récompense consistant en toutes les pièces non dépensées des transactions en plus dune récompense « coinbase ». La récompense coinbase a commencé à 50 bitcoins et diminue de moitié tous les 210000 blocs (environ une fois tous les 4 ans). La récompense coinbase finira par devenir si petite quelle sera minuscule par rapport aux frais des mineurs.
Commentaires
- La récompense est réduite de moitié tous les 210000 blocs .- > Je viens de voir ça maintenant et je pense que cest bien: bitcoinclock.com
- Oh , et la difficulté est ajustée tous les blocs de 2016 en supposant que le réseau continuera à fonctionner avec le taux de hachage moyen desdits derniers blocs de 2016 et en définissant la nouvelle difficulté de telle sorte que ce hachage entraînerait un cycle de bloc denviron 10 minutes.
- Je peux me tromper, mais je crois que le bloc contient également le hachage du dernier bloc. Et cest ainsi que les blocs sont enchaînés à lenvers, conduisant au terme blockchain.
- @Murch, la difficulté est en fait ajustée à chaque bloc en fonction du temps quil a fallu pour trouver le bloc précédent, et à ce stade, le la difficulté ne peut que monter. Tous les blocs de 2016, la difficulté est ajustée par rapport aux derniers blocs de 2016 et elle peut augmenter ou diminuer. Cela permet de se prémunir contre les baisses soudaines de la puissance de calcul, qui auraient autrement pour effet daugmenter le temps de recherche dun bloc à plus de 10 minutes.
- @ Tarandeep-Gill, que ‘ est correct! Le hachage du bloc précédent est haché avec la liste des transactions. Cela me fait en fait penser que mon explication du hachage est un peu incomplète – La fonction de hachage spécifique nest pas SHA256 appliquée deux fois comme indiqué, mais plutôt cette fonction appliquée à diverses parties du bloc (y compris les transactions et le hachage du bloc précédent) en différentes manières. Cest une de ces » inexactitudes » dont je vous ai prévenu. Je me demande si vous pouvez trouver les autres …
Réponse
Le but de résoudre un « puzzle » est de (a) retarder lextraction du bloc à une moyenne de 10 minutes et (b) dengager des coûts réels pour lextraction dun bloc (dépenser de la puissance CPU, donc de lénergie). Les coûts sont là pour empêcher une attaque Sybil (mettant de nombreuses machines de mineurs au travail pour faire une attaque à 51%).
Le délai est mis pour permettre à un bon bloc de se propager dans le monde entier à tous les autres mineurs , sans donner au mineur qui vient de frapper le nouveau bloc un avantage de départ. Pour cela, le temps de blocage (10 minutes) doit être dun ordre de grandeur supérieur au délai de propagation (quelques secondes).
Donc le genre de casse-tête est en un sens sans importance, il pourrait aussi bien être un Sudoku géant.
Réponse
Tout hachage est un hachage valide. La question est de savoir si votre hachage répond à nos critères. Ce que vous hachez, ce sont en fait deux éléments (nous y reviendrons) qui, alignés ensemble, forment une chaîne qui est une chaîne dune longueur spécifique. Vous hachez ensuite toute cette chaîne. Considérez votre hachage résultant comme un nombre. Ce que nous voulons, cest que le nombre résultant soit inférieur à un nombre cible. Cest donc comme lancer un dé dun milliard de faces et trouver un nombre sous le nombre cible. Ce nombre cible est considéré comme une « difficulté ». Au fur et à mesure que de plus en plus de personnes lancent le dé, nous réduisons ce nombre cible pour réduire la probabilité. nimporte quel jet de dé atteindra.
Si important, certaines des choses que nous alignons dans la chaîne que nous hachons sont des choses que nous sommes autorisés à ajuster. Le hachage nest pas exactement comme lancer le dé, car si nous avons la même chose encore et encore, nous obtenons le même résultat encore et encore. Cependant, même un ajustement mineur dans ce que nous hachons peut avoir un impact majeur sur ce quest le hachage résultant. lélément principal que nous pouvons manipuler est appelé le « nonce ». En gros, nous choisissons un nonce à utiliser dans la chaîne, hachons la chaîne entière et voyons ce que nous obtenons. Si le hachage nest pas atteint, nous modifions le nonce et réessayons . Le nonce lui-même nest pas très grand donc il ya un nombre limité de variations du nonce que vous pouvez essayer. Lélément suivant que nous pouvons modifier est un horodatage. Nous sommes également autorisés à modifier lhorodatage. Chaque mouvement de lhorodatage nous permet de parcourir à nouveau lensemble des valeurs de nonce possibles. Nous répétons ce processus qui consiste à épuiser les possibilités de nonce, puis à agiter lhorodatage encore et encore jusquà ce que le hachage résultant est inférieur au nombre cible de difficulté.
Lorsque cela se produit, nous proclamons ensuite au monde que cet horodatage plus ce nonce fonctionne pour résoudre le bloc. Dautres valident quil est vrai et il est ajouté au chaîne de bloc. Un bloc est considéré comme « Validé » une fois quil « est un certain nombre de blocs » profonds « dans la chaîne de blocs, ce qui signifie quil sagit dun bloc historique par rapport au bloc actuel. La validation est un peu un abus de langage ici car ce nest pas que le bloc nest pas déjà connu pour être valide. Ce que nous « re-validons, cest la preuve du travail, ce qui signifie quune fois que le bloc historique est suffisamment enterré, les efforts nécessaires pour créer cette histoire sont insurmontables pour que quelquun dautre essaie de créer une variante différente de lhistoire. Ils devraient créer leur propre version de ce bloc (la seule raison étant décrire dans leur propre version des transactions, cest-à-direvoler des pièces) puis le résoudre eux-mêmes, puis résoudre le bloc suivant et celui daprès et ainsi de suite et « rattraper » tout le monde. Cela signifie quils devraient devancer le monde dans le jeu de lancer de dés. Peut-être quune fois dans lhistoire de lunivers, quelquun pourrait avoir de la chance sur le nonce avec deux ou trois blocs consécutifs, mais avec les 120 blocs dont la plupart des pools de minage et des échanges ont besoin maintenant? Cela narrivera jamais.
but what should I do next to this "data"?
Ici ‘ une courte implémentation de référence. github.com/jgarzik/pyminer/blob/master/pyminer.pyexplain the mining process in programmer's view
est une question assez large. Quel problème spécifique essayez-vous de résoudre?