Pour être précis, écrivez un programme qui trouve le hachage du bloc requis pour l'extraction. Il est inutile et impossible de miner avec le logiciel implémenté par moi-même, donc le but est de comprendre le mécanisme.
Voir Références.
Je laisserai l'explication détaillée à d'autres articles, etc., mais c'est un acte d'enregistrement (d'approbation) des transactions Bitcoin.
Il s'agit d'un acte de recherche d'une valeur nonce telle que les 0 sont alignés par un nombre spécifique (17 à partir de janvier 2016) à partir du début de la valeur de hachage à partir de laquelle il est possible de calculer. Si vous trouvez le nonce du bloc pour la première fois dans le monde, vous recevrez 25 BTC (environ 1,16 million de yens en janvier 2016) nouvelles pièces émises et des frais pour la transaction réservée. Pour cette récompense, les gens du monde entier s'empressent d'utiliser un grand nombre de machines chargées de puces spéciales. La difficulté de minage est ajustée pour prendre en moyenne 10 minutes en utilisant des ressources du monde entier, donc cela devient plus difficile à mesure que le nombre de participants au minage augmente.
Puisqu'il est calculé sur la base du hachage du bloc précédent, il est connecté au bloc précédent et est à l'origine du nom "blockchain". Afin de falsifier un historique de transaction, il est nécessaire de recalculer le hachage du bloc contenant cette transaction et tous les blocs après cela, c'est pourquoi il est dit que la falsification n'est pas possible.
Il faut beaucoup de temps pour vraiment essayer de miner, donc je m'assure simplement que le nonce de la transaction déjà approuvée est vraiment correct. Les résultats de toutes les transactions Bitcoin et de l'exploitation minière sont publics, donc https://blockchain.info/ja/ Vous pouvez le voir sur etc.
Cette fois comme échantillon https://blockchain.info/ja/block/000000000000000003a0343cc001d21b97d15e97e665b68c790b98c871cf0731 Est utilisé.
L'entrée pour le calcul du hachage est
est. Récupérez ces valeurs sur la page ci-dessus.
version = 4
prev_block = "0000000000000000005629ef6b683f8f6301c7e6f8e796e7c58702a079db14e8"
markle_root = "efb8011cb97b5f1599b2e18f200188f1b8207da2884392672f92ac7985534eeb"
timestamp = "2016-01-30 13:23:09"
bits = 403253488
nonce = 1448681410 #Puisqu'il s'agit d'un bloc approuvé, nous connaissons également la valeur de nonce
Étant donné que chacun ne peut pas être utilisé tel quel, convertissez-le au format spécifié.
Remplissez la version avec 0 pour en faire 8 chiffres. De plus, comme cela est courant avec d'autres valeurs, toutes ces valeurs sont utilisées dans le calcul dans l'ordre inverse des octets (petit tolandien). Il existe probablement une autre meilleure façon d'inverser l'ordre des octets, mais ci-dessous, je vais le convertir en une chaîne hexadécimale, puis le décoder à nouveau. (Pour python3, int a une méthode to_bytes)
version_h = format(version, "08x").decode("hex")[::-1]
Le hachage et la racine Merkle du bloc précédent sont déjà sous forme hexadécimale, donc décodez-les et inversez-les.
prev_block_h = prev_block.decode("hex")[::-1]
markle_root_h = markle_root.decode("hex")[::-1]
Time convertit le nombre de secondes de l'heure standard Unix en une séquence d'octets inversés comme d'habitude.
from datetime import datetime
timestamp_s = int((datetime.strptime(timestamp, "%Y-%m-%d %H:%M:%S")-datetime(1970,1,1)).total_seconds())
timestamp_h = format(timestamp_s,"x").decode("hex")[::-1]
bits, nonce Convertissez simplement en une chaîne d'octets inversés.
bits_h = format(bits,"x").decode("hex")[::-1]
nonce_h = format(nonce,"x").decode("hex")[::-1]
Le hachage Bitcoin utilise sha256 deux fois. De plus, puisque le résultat est également une chaîne d'octets inversés, convertissez l'ordre en hexadécimal.
from hashlib import sha256
header = version_h + prev_block_h + markle_root_h + timestamp_h + bits_h + nonce_h
print(sha256(sha256(header).digest()).digest()[::-1].encode("hex"))
production
000000000000000003a0343cc001d21b97d15e97e665b68c790b98c871cf0731
Vous pouvez voir que les 17 0 sont correctement alignés.
Recommended Posts