Minage

Logiciel

Entête de bloc

Version

Le numéro de version définit les règles que suit le bloc. Ç permet d’identifier les forks.

Merkle root

Bits

Pour aller plus loin:
Difficulty
Target

Hashcash

Les valeurs de l’entête sont concaténées puis hashées par SHA256 deux fois. Le but du jeu: trouver un hash inférieur à la difficulté cible.

import hashlib

version    = "01000000"
prevHash   = "81cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000"
merkleRoot = "e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0f1fc122b"
timestamp  = "c7f5d74d"
bits       = "f2b9441a"
extraNonce = "42a14695"

header_bin = (version
  + prevHash
  + merkleRoot
  + timestamp
  + bits
  + extraNonce).decode('hex')

count = 0

hash = hashlib.sha256(hashlib.sha256(header_bin + count).digest()).digest()
  1. Le compteur commence à 0 mais extraNonce est aléatoire — ensemble, ils forment un nonce aléatoire. Cela permet de cacher la quantité de puissance de calcul ayant été nécessaire pour calculer la preuve de travail: personne ne peut dire si c’est un mineur puissant mais malchanceux, ou un mineur faible mais qui a eu beaucoup de chance.

  2. Comme le champ nonce se trouve à la fin, il n’est pas nécessaire de re-concaténer les valeurs à chaque fois, on se contente d’ajouter +1 à chaque itération.

Pour aller plus loin:
Block hashing algorithm
Mining

Transaction coinbase

Frais de transaction

Pour aller plus loin:
Miner fees

Child Pays For Parent (CPFP)

Pour aller plus loin:
How to do a manual Child Pays For Parent transaction

Pool mining

Minage en ligne