Extranonce désigne des données variables supplémentaires que le logiciel de minage place généralement dans la coinbase, la première transaction particulière du bloc qui attribue la récompense de minage. Leur modification change l’empreinte commune des transactions inscrite dans l’en-tête du bloc, ce qui fournit de nouvelles données à explorer. Le champ nonce distinct de l’en-tête ne s’agrandit pas.
L’en-tête résume les données du bloc. Un bit peut prendre la valeur zéro ou la valeur un ; huit bits forment un octet. L’en-tête contient notamment un champ nonce de 32 bits, offrant 2^32 valeurs lorsque le reste est inchangé. Refaire le calcul avec le même en-tête et le même nonce donne le même hash, donc le même résultat. Extranonce n’allonge pas ce champ : il modifie d’autres données à partir desquelles un nouvel en-tête est préparé. Alena peut imaginer une nouvelle tâche pour laquelle parcourir à nouveau le compteur. En pratique, d’autres parties de l’en-tête peuvent aussi varier dans les limites des règles. [1] [5]
Coinbase désigne ici la première transaction de chaque bloc, pas la plateforme d’échange. Lorsque le logiciel modifie son extranonce, les données encodées de la transaction et son TXID, son identifiant calculé, changent. Un arbre combinant progressivement les empreintes mène au Merkle root, l’empreinte commune des transactions conservée dans l’en-tête. Le logiciel doit recalculer la branche concernée. Les autres transactions peuvent rester identiques, mais l’ancienne racine ne peut pas être conservée telle quelle. Cet enchaînement fournit de nouvelles données au calcul de minage. [1]
Dans un modèle simple, gardons tout le reste fixe et autorisons deux octets d’extranonce entièrement libres. Ils offrent 2^16 variantes ; avec le nonce de 32 bits, cela donne 2^48 combinaisons d’entrée. Ce sont des essais possibles, pas un nombre de blocs trouvés. Alena n’obtient ni une condition plus facile ni la certitude de réussir dans cet ensemble. L’intérêt est pratique : elle peut continuer à chercher. Ajouter de l’espace libre n’accélère pas non plus, à lui seul, la machine qui doit réellement effectuer les calculs. [1]
L’espace d’extranonce n’est pas un formulaire vierge sans contraintes. BIP 34, une règle précise de Bitcoin, exige que le champ de données d’entrée de la coinbase appelé scriptSig commence par la hauteur du bloc correctement encodée, c’est-à-dire sa position dans la chaîne. La limite de 100 octets concerne tout le scriptSig de la coinbase, pas seulement l’extranonce. Le logiciel doit réserver la place des données obligatoires et préserver un format valide. Si Alena les écrasait, les calculs suivants chercheraient une solution pour un bloc invalide. [3] [4]
Dans un pool de minage, il est utile que les machines explorent des variantes différentes. Stratum V2, un protocole de distribution des tâches de minage, utilise notamment le partage de l’extranonce. Un serveur en amont, upstream, attribue un extranonce_prefix fixe, c’est-à-dire la partie initiale de ces données. Un intermédiaire local peut réserver une autre partie à ses clients et transmettre le reste en aval, downstream. Ces directions sont relatives à chaque connexion. Le préfixe attribué n’est pas automatiquement une zone que le mineur final peut modifier ; le garder fixe aide à séparer le travail des participants. [2]
Sur un canal étendu de Stratum V2, SubmitSharesExtended transmet les octets modifiés avec le résultat. La coinbase est assemblée dans cet ordre : coinbase_tx_prefix, extranonce_prefix, extranonce et coinbase_tx_suffix. Ces noms désignent des parties des données échangées par les logiciels de minage. Le champ extranonce doit avoir la longueur convenue. Même si une écriture plus courte semble représenter le même nombre, une suite d’octets différente peut produire une autre transaction. Les ordinateurs comparent des données exactes, pas leur interprétation humaine approximative. [2]
Un Standard Job de Stratum V2 est une tâche avec un Merkle root fixe. L’appareil final ne peut modifier que les parties autorisées de version, nonce et nTime : la version, le compteur et l’heure de l’en-tête. Il ne soumet donc pas sa propre extranonce comme sur un canal étendu. Le logiciel en amont peut préparer une nouvelle coinbase, puis une nouvelle racine, et fournir une autre tâche. Alena ne trouvera donc pas forcément de réglage d’extranonce sur son appareil, même si ce mécanisme est utilisé dans l’ensemble de l’installation. [2]
Imaginons qu’un nouveau préfixe arrive pendant le traitement d’un résultat plus ancien. Dans Stratum V2, SetExtranoncePrefix s’applique aux tâches envoyées ensuite sur le canal concerné, autrement dit la session de minage correspondante. Le résultat doit rester associé au bon job_id, l’identifiant de la tâche, et à l’espace qui lui était attribué. Remplacer partout le préfixe par le plus récent pourrait modifier les données à l’origine d’un ancien résultat. Extranonce sert à créer des essais distincts et à en garder la trace, pas à réécrire leur tâche après coup. [2]
Pour une vision complète, lisez aussi Nonce, Merkle Tree, Mining Share, Block Template, Bitcoin. Cette entrée est également citée par ASIC Miner, Stratum V1, Stratum V2, Block Template.