le minage
ou preuve de travail
ou preuve de travail
Le procédé qui consiste à créer un bloc à partir d'une liste de transactions s'appelle le minage. Le minage consiste à trouver une valeur arbitraire (nonce) qui, intégrée au contenu du bloc, produise un hash ayant une certaine caractéristique.
Une petite illustration sera beaucoup plus parlante.
Le but ici est de trouver une valeur de nonce telle que le hash du bloc commence par un certain nombre de zéros. Par exemple, voici le hash du tout dernier bloc créé au moment ou j'écris ces lignes : 000000000000000064b4397de78e9eaef9040e79b0d1d58ad16390e8fb4ab907.
Comme il est impossible de calculer quelle est la bonne valeur de nonce, notre brave nœud en est réduit à tester des valeurs aléatoires, encore et encore, jusqu'à trouver une valeur correcte sur des milliards, en concurrence avec tous les autres nœuds du réseau qui tentent eux aussi de créer leur bloc.
Plus le nombre de zéros à trouver est grand, plus improbable il devient de découvrir une valeur de nonce qui permettrait de créer un bloc. Le réseau Bitcoin ajuste automatiquement la difficulté du problème (le nombre de zéros) pour qu'en moyenne, un bloc soit créé toutes les dix minutes.
À l'heure ou j'écris ces lignes, la totalité du réseau Bitcoin à une capacité de calcul qui approche les 60 PH/s (Péta hash par seconde), soit 60 000 000 000 000 000 hash calculés par secondes, soit 360 000 000 000 000 000 000 hash calculés toutes les dix minutes.
Inutile de dire qu'il est devenu inutile d'essayer de miner avec un simple ordinateur de bureau.
source:https://www.miximum.fr/blog/bitcoin-comment-ca-marche/
Let’s decide that the hash of some integer x
multiplied by another y
must end in 0
. So, hash(x * y) = ac23dc...0
. And for this simplified example, let’s fix x = 5
. Implementing this in Python:
from hashlib import sha256
x = 5
y = 0 # We don't know what y should be yet...
while sha256(f'{x*y}'.encode()).hexdigest()[-1] != "0":
y += 1
print(f'The solution is y = {y}')
The solution here is y = 21
. Since, the produced hash ends in 0
:
hash(5 * 21) = 1253e9373e...5e3600155e860
In Bitcoin, the Proof of Work algorithm is called Hashcash.
source https://hackernoon.com/learn-blockchains-by-building-one-117428612f46