Incompréhension preuve de travail

a marqué ce sujet comme résolu.

Bonjour,

J’ai du mal à comprendre la preuve la preuve de travail ("proof of work") dans le cas du fonctionnement de la blockchain. Lorsqu’un utilisateur veut donner 10 dollars à un autre il émet le message suivante : "User 1 -> User 2 : 10 dollars". Ce message est alors émis à tous les utilisateurs de la blockchain. Ainsi tous les utilisateurs vont inscrire le message "User 1 -> User 2 : 10 dollars" dans leur bloc actuel.

Déjà une question me vient à l’esprit. Quand est-ce que la transaction est validée ? Il faut que le nouveau bloc soit miné pour valider la transaction ou bien dés son émission la transaction est validée ?

Maintenant je ne comprends pas pourquoi le problème de la double dépense ne se résout pas plus simplement. Si User 1 a 10 dollars sur son compte et émet les messages suivants : "User 1 -> User 2 : 10 dollars", "User 1 -> User 3 : 10 dollars". Alors il suffit à tous les utilisateurs de la blockchain de calculer le compte courant de User 1 (ce qui est possible en "remontant" les blocs) et d’invalider ces transactions car User 1 n’a pas assez d’argent. Dans le cas de la preuve travail si tous les users inscrivent dans leur bloc "User 1 -> User 2 : 10 dollars", "User 1 -> User 3 : 10 dollars" puis le mine je ne vois pas ou la vérification de la validité des transactions est faite.

Merci beaucoup.

Bonjour,

J’ai du mal à comprendre la preuve la preuve de travail ("proof of work") dans le cas du fonctionnement de la blockchain. Lorsqu’un utilisateur veut donner 10 dollars à un autre il émet le message suivante : "User 1 -> User 2 : 10 dollars". Ce message est alors émis à tous les utilisateurs de la blockchain. Ainsi tous les utilisateurs vont inscrire le message "User 1 -> User 2 : 10 dollars" dans leur bloc actuel.

Je ne suis pas certain de ce que tu veux dire par utilisateur. Les utilisateurs n’ont pas de bloc actuel. Tu veux dire mineur peut-être, dans quel cas ce serait plus correct. Mais chaque mineur calcule un bloc actuel mais un seul de ces "blocs actuels" sera effectivement ajouté à la blockchain, celui ayant réussi à résoudre le problème de cette blockchain (calcul de hash par exemple).

Déjà une question me vient à l’esprit. Quand est-ce que la transaction est validée ? Il faut que le nouveau bloc soit miné pour valider la transaction ou bien dés son émission la transaction est validée ?

La transaction est ajoutée à la blockchain lorsque le bloc est miné. Il me semble qu’il est souvent conseillé d’attendre la génération de quelques blocs (pas un seul) après la transaction pour la considérer comme validée.

Je ne suis pas certain de ce que tu veux dire par utilisateur. Les utilisateurs n’ont pas de bloc actuel. Tu veux dire mineur peut-être, dans quel cas ce serait plus correct. Mais chaque mineur calcule un bloc actuel mais un seul de ces "blocs actuels" sera effectivement ajouté à la blockchain, celui ayant réussi à résoudre le problème de cette blockchain (calcul de hash par exemple).

Oui je voulais dire mineur ! Mais dans ce cas je ne vois pas où est le problème de la double dépense. Si une partie des mineurs à dans son bloc actuel la première dépense et l’autre partie à dans son bloc la seconde dépense. Dans tous les cas c’est un des deux blocs qui va être miné en premier donc une seule dépense sera validée il n’y a donc aucun problème si ?

Ou alors l’utilisateur malicieux à lui dans son bloc les deux dépenses et il essaie de miner son bloc avant tout le monde ?

À prendre avec des pincettes parce que je ne me souviens plus du fonctionnement exact de Bitcoin, mais :

Dans le cas de la preuve travail si tous les users inscrivent dans leur bloc "User 1 -> User 2 : 10 dollars", "User 1 -> User 3 : 10 dollars" puis le mine je ne vois pas ou la vérification de la validité des transactions est faite.

Effectivement, ça n’est pas à ça que sert la preuve de travail. Le double spending dans un même bloc est "impossible" du fait des vérifications qui ont lieu sur chaque nœud (pas seulement les mineurs). Si tu publies un bloc invalide, le reste du réseau devrait t’ignorer, ce qui est grave tant que tu es en minorité.

La preuve de travail vise à rendre physiquement impossible le fait de maintenir un fork antérieur à une transaction, ou de "réécrire l’histoire", même en publiant des blocs valides. Dans ton scénario, tu imagines que tu dépenses une deuxième fois ton BTC après avoir dépensé le premier, mais en réalité il faut imaginer réécrire l’histoire en partant d'avant la première dépense. Comme l’a dit @Migwel, les transactions sur une blockchain ne sont pas immédiatement considérées comme définitives ; il y a un temps pendant lequel les nœuds du réseau peuvent invalider leur consensus (dans le cas où un problème technique est survenu par exemple). C’est ce qu’on appelle la finality. Dans le cas de Bitcoin, elle est d’environ une heure (6 blocs).

Mettons, donc, que tu fasses une première transaction, puis que tu souhaites redépenser la même coin. Il faut qu’un mineur complice essaye de forker la chaîne à partir du bloc précédent celui dans lequel ta transaction a été incluse. La proof of work est là pour rendre impossible le fait de produire rapidement assez de blocs pour réécrire l’histoire : si le destinataire de ta première transaction a bien attendu 6 blocs avant de la considérer comme définitive, la probabilité pour ton complice de à produire 6 blocs valides (mais sans la transaction que tu veux effacer) assez rapidement est nulle.

+0 -0

Comme l’a dit @Migwel, les transactions sur une blockchain ne sont pas immédiatement considérées comme définitives ; il y a un temps pendant lequel les nœuds du réseau peuvent invalider leur consensus (dans le cas où un problème technique est survenu par exemple). C’est ce qu’on appelle la finality. Dans le cas de Bitcoin, elle est d’environ une heure (6 blocs).

Mhhh techniquement les 6 blocs ne sont qu’une indication, le consensus bitcoin (et de toutes les blockchains à PoW que je connais) se font sur la plus longue chaîne (en termes de travail). Ce qui veut dire que si je trouve un moyen de miner des blocs super efficacement, je peux lancer une attaque à partir du bloc que je veux, la plupart des clients suivront ma chaîne à partir du moment où la quantité de "travail" sera supérieure dans mon fork.

D’ailleurs sur les plus petites blockchains, ce genre d’attaque (golden finger) arrive relativement souvent.

En bref, un fork de 1 bloc de profondeur a une proba raisonnable d’arriver, parce que le réseau est asynchrone : c’est ce qui arrive quand deux mineurs publient un bloc en même temps. Un fork de 2 blocs, c’est moins courant. La proba décroît exponentiellement, et dans son papier Nakamoto estime que la proba au bout de 6 blocs est suffisamment faible pour être négligée.

La proof of work est là pour rendre impossible le fait de produire rapidement assez de blocs pour réécrire l’histoire 

Et du coup : impossible, non, hautement improbable, oui.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte