Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/07038.jsonl.gz/787

Une transaction consiste à débiter certains comptes pour créditer d’autres comptes.
Elle est composée d’un certain nombre d’entrées (inputs) et d’un certain nombre de sorties (outputs). Chaque sortie comporte un montant et la clé publique de l’adresse créditée, ou plus généralement un programme permettant de déterminer cette adresse (un « script »). Chaque entrée désigne une sortie d’une transaction antérieure et comporte un programme (script) qui fournit les données attendues par le script figurant dans cette sortie.
Lors de la validation d’une transaction, les scripts de chaque entrée sont exécutés, d’abord le script de sortie puis le script d’entrée. La transaction n’est validée que si le résultat est « vrai » pour toutes les entrées.
Ces scripts sont écrits dans un langage interne conçu par Nakamoto. Ce langage est volontairement minimaliste et non Turing-completafin notamment d’empêcher que le système ne puisse s’engager dans des boucles infinies. L’utilisation des scripts doit permettre au logiciel de s’adapter aisément à des évolutions ultérieures et permettre des fonctionnalités avancées comme les transactions demandant plusieurs signatures ou les contrats intelligents.
Les transactions émises par un nœud sont diffusées à ses voisins. Ceux-ci valident les transactions qu’ils reçoivent et les ajoutent progressivement dans un pool local avant de les transmettre à leurs propres voisins. Les transactions valides sont ainsi diffusées de proche en proche à tous les nœuds du réseau, après avoir été vérifiées à chaque fois.
Avant d’inscrire définitivement une transaction dans la chaîne de blocs, le réseau effectue à plusieurs reprises un ensemble de vérifications, notamment que les sorties référencées par les entrées existent et n’ont pas encore été utilisées, que l’auteur de la transaction est bien titulaire de l’adresse créditée dans ces sorties, et que la somme des montants figurant dans les sorties de la transaction est bien inférieure à la somme des montants des sorties référencées par les entrées.
Inscrire une transaction dans la chaîne de blocs a pour effet d’interdire toute future référence aux sorties désignées par les entrées de la transaction, ce qui revient à débiter les comptes destinataires de ces sorties des montants qui y figurent, et de créditer les comptes désignés par les sorties de la transaction des montants indiqués.
Une transaction est prise en compte instantanément par le réseau, et est confirmée une première fois au bout de 10 minutes environ. Chaque nouvelle confirmation renforce un peu plus la validité de la transaction dans le registre des transactions.