Author

Topic: Sécurité des transferts - Question un peu technique (Read 159 times)

newbie
Activity: 22
Merit: 20
Ok. Merci.

Donc si j'ai bien compris, les mineurs travaillent en permanence sur les blocs candidats mais ne sont payés que lorsqu’ils arrivent à le "hasher" avant les autres.

Ça fait beaucoup d'énergie dépensée pour rien non ?
hero member
Activity: 504
Merit: 1065
Crypto Swap Exchange
Que deviennent les blocs en cours de validation de la part des autres mineurs ?
S'ils arrivent à valider leur bloc (après l'ajout du bloc validé), est-ce qu'ils sont quand même rémunérés, ou ils ont travaillé pour rien ?

Rien les miners passent au suivant dès lors qu'un nouveau block est émis. Ils ne sont rémunérés que lorsqu'ils trouvent un block (par eux-mêmes en solo mining, ou de la part de leur pool si pool mining). Bien sur il y a le cas des blocks orphelins; le miner n'est pas rémunéré dans ce cas, mais ça devient de plus en plus rare et c'est une exception.

2°) Chaque mineur constitue son bloc

Non, chaque miner constitue son "block candidat", qui ne vaut rien tant que la bonne share (> ou = à la difficulté réseau) n'a pas été produite.

La même transaction peut donc faire partie de plusieurs blocs.

Non mais si les frais sont suffisament élevés, elle fera partie de plusieurs (probablement tous) blocks candidats.

Est-il possible que la même transaction soit validée plusieurs fois ?
Et si oui, est-ce que cela ne surcharge pas inutilement la blockchain ?

Non non. Grosso modo, avant d'être minée, donc incluse dans un block, la transaction est dans la mempool. Les miners piochent les tx avec les frais les plus élevés pour constituer un block candidat. Ils tentent alors de hasher ce block candidat en espérant obtenir un hash du block supérieur ou égal à la difficulté réseau en premier, et seulement là la transaction sera confirmée.
legendary
Activity: 2604
Merit: 2353
En effet ce récapitulatif de F2b est très instructif. Je me permets d'ajouter quelques questions pour affiner encore (si quelqu'un veut bien compléter car je vois qu'il n'y a pas eu de réponses aux dernières questions de CoinCurioos).
Je tente ma chance...  Roll Eyes

1°) Un seul bloc est accepté toutes les 10mn (environ).

Que deviennent les blocs en cours de validation de la part des autres mineurs ?
S'ils arrivent à valider leur bloc (après l'ajout du bloc validé), est-ce qu'ils sont quand même rémunérés, ou ils ont travaillé pour rien ?

2°) Chaque mineur constitue son bloc

La même transaction peut donc faire partie de plusieurs blocs.

Est-il possible que la même transaction soit validée plusieurs fois ?
Et si oui, est-ce que cela ne surcharge pas inutilement la blockchain ?

Merci
Ben non sinon ca voudrait dire que plus de 3.125 bitcoins sont émis par bloc/toutes les 10 minutes. Il n'y a qu'un seul mineur qui valide chaque bloc et reçoit la récompense à chaque fois (+le montant total des frais des transactions contenues dans ledit bloc), d'ailleurs sur certains explorateurs on peut voir le nom de la pool de mining auquel appartient le mineur qui a validé le bloc.
Une même transaction ne peut pas faire partie de plusieurs blocs puisque le minage du bloc courant doit reprendre à la suite du dernier bloc validé de la blockchain pour être valide lui-même.
newbie
Activity: 22
Merit: 20
En effet ce récapitulatif de F2b est très instructif. Je me permets d'ajouter quelques questions pour affiner encore (si quelqu'un veut bien compléter car je vois qu'il n'y a pas eu de réponses aux dernières questions de CoinCurioos).
Je tente ma chance...  Roll Eyes

1°) Un seul bloc est accepté toutes les 10mn (environ).

Que deviennent les blocs en cours de validation de la part des autres mineurs ?
S'ils arrivent à valider leur bloc (après l'ajout du bloc validé), est-ce qu'ils sont quand même rémunérés, ou ils ont travaillé pour rien ?

2°) Chaque mineur constitue son bloc

La même transaction peut donc faire partie de plusieurs blocs.

Est-il possible que la même transaction soit validée plusieurs fois ?
Et si oui, est-ce que cela ne surcharge pas inutilement la blockchain ?

Merci
newbie
Activity: 22
Merit: 20
Merci pour ta réponse !

Depuis j'ai pu maitriser un peu le sujet grâce à des liens reçus sur un autre topic.

Je continue de creuser, mais ça fait plaisir de lire ta reformulation qui me permet de valider ma compréhension avec d'autres mots  Grin

F2b
hero member
Activity: 2129
Merit: 926
Note : je me relirai demain, il est possible que des améliorations ou simplifications soient apportées plus tard.


Hello ! Smiley

Bon, le post ne date pas d'hier donc je pense que tu as dû trouver quelques réponses entre temps. Mais sait-on jamais, tu trouveras peut-être une ou deux choses intéressantes dans ce qui suit. J'ai fait un sacré pavé (ça m'avait presque manqué !), mais au moins ça me fait réviser et je pourrai faire référence à ce post dans le futur. J'ai essayé de tout détailler donc on va peut-être (sûrement) au-delà de la question originale. Grin



Admettons que tu aies des bitcoins que tu souhaites dépenser. Il se trouvent donc actuellement sur une adresse qui t'appartient. La première étape, qui peut se faire sans communiquer avec le reste du réseau, va être de former une transaction (en gros, dire vers quelle(s) adresse(s) tu veux envoyer les bitcoins, et dans quelles proportions), puis la signer. La signature apposée à cette transaction est faite à l'aide de ta clé privée. N'importe qui peut vérifier la signature de cette transaction juste avec l'adresse "de départ" (qui est publique et fait partie de la transaction de toute façon).

Maintenant que ta transaction est prête, il faut la communiquer au reste du réseau. Il faut donc avoir un nœud Bitcoin, qui va envoyer la transaction à la dizaine de nœuds auxquels il est connecté, qui vont eux aussi envoyer la transaction aux nœuds auxquels ils sont connectés, et de cette manière ta transaction se propage en quelques secondes sur le réseau Bitcoin, dans ce qu'on appelle la mempool.

2 choses à noter :
- Si tu utilises un client léger (qui n'a pas eu besoin de télécharger toute la blockchain), comme Electrum, Sparrow, Samourai, etc., alors ce client est connecté à un autre nœud Bitcoin (qui peut t'appartenir ou non) qui lui a eu besoin de synchroniser la blockchain entière. La transaction passe alors par ce nœud, qui sert de point d'acccès au réseau Bitcoin.
- "La mempool", c'est un abus de langage. En effet, il se peut que certains nœuds ne voient pas ta transaction, ou ne la retiennent pas car leur mempool est déjà pleine. En fait il y a autant de mempools que de nœuds. Mais ce n'est pas grave : l'essentiel est que ta transaction se propage et que les mineurs (pas forcément tous) en aient connaissance.

Pour le moment, ta transaction n'est pas "confirmée" (car pas encore incluse dans un bloc). Mais comme elle a été diffusée au réseau, les mineurs l'ont certainement reçue.
(NB. Pour être tout à fait rigoureux il faudrait distinguer les pools de minage et les mineurs eux-mêmes, mais pour ce post on considérera qu'il s'agit d'une seule et même entité).
Les mineurs cherchent en permanence à ajouter de nouveaux blocs à la blockchain (c'est leur business). Leurs profits viennent à la fois de la récompense de blocs (6,25BTC par bloc actuellement, qui passeront à 3,125BTC par bloc dans la nuit de vendredi à samedi), et des frais des transactions qu'ils mettent dans ce bloc. Ce sont eux qui choisissent quelles transactions ils mettent dans les blocs qu'ils essaient de miner. Ils vont donc sélectionner en priorité les transactions qui ont le plus de frais (lorsqu'il n'y a pas de place pour tout le monde) et créer un bloc avec ces transactions. Ils vont aussi vérifier que ces transactions sont valides (qu'elles sont conformes aux règles du consensus, notamment que leur signature est valide). Ce procédé ne demande pas beaucoup de calculs.

À ce stade, différents mineurs (/ pools) peuvent avoir des blocs candidats différents (mais pas nécessairement). Maintenant, dans ce bloc, il y a un champ réservé où les mineurs peuvent mettre un nombre arbitraire. Sauf que la plupart des valeurs possibles pour ce nombre ne donnent pas un bloc valide, et il est impossible de "deviner" les valeurs qui donneront un bloc valide. Le seul moyen de trouver une valeur qui fonctionne, c'est de les essayer une à une et voir si le bloc qui en résulte est valide ou non.
Et c'est ça qui consomme beaucoup d'énergie. Ce n'est pas la vérification des transactions, mais ce qu'on appelle la Preuve de Travail (Proof of Work). Le seul but étant de rendre difficile l'ajout de nouvelles transactions à la blockchain (et donc assurer sa sécurité).

Lorsqu'un mineur trouve (après beaucoup, beaucoup d'essais) une valeur pour ce nombre qui donne un bloc valide, il envoie le bloc au reste du réseau (il se propage en plusieurs secondes, comme la transaction de tout à l'heure). Tous les nœuds (mineurs ou non) vont le recevoir, vont vérifier que toutes les transactions que contient le bloc sont valides, et vérifier que le bloc lui-même (notamment sa preuve de travail) est valide (encore une fois, cette vérification est peu coûteuse en ressources).
À partir de là, toutes les transactions incluses dans ce bloc sont considérées comme "confirmées" : elles font désormais partie de la blockchain (puisque le nouveau bloc a été ajouté à la suite du précédent et respecte les règles du consensus). Tout le monde est donc d'accord sur le fait que tes bitcoins sont passés de ton adresse à celle de ton destinataire.



Maitenant, reprenons tes questions.

Comment est constitué le bloc?

Je me trompe peut-être, mais je pars du principe qu'une adresse effectuant une transaction la communique à un nœud ( tous les nœuds ?) simultanément, en fait la communication est l'exécution.

Puis tous les X temps, un bloc contenant tout ce qui a été communiqué est soumis à validation, mais qu'est ce qui empêche une adresse de "mentir " ?

Tu as raison sur le fait qu'une fois la transaction prête, elle est communiquée à un nœud, qui la transmet au reste du réseau (pas tous les nœuds d'un coup, comme on l'a vu, mais ça se propage quand même assez vite).
Ce n'est pas pour autant que la transaction est "exécutée". Pour moi, cela correspondrait plutôt au moment où la transactions est "confirmée", c'est-à-dire quand elle est incluse dans un bloc. Tant qu'elle n'est pas dans un bloc (donc tant qu'elle est dans la mempool), on ne peut pas dire avec certitude qu'elle est définitive / immuable.

Je n'aime pas trop la formulation "un bloc est soumis à validation". Soumis à qui ?
Chaque mineur crée son propre bloc candidat dans son coin, essaie de résoudre la preuve de travail (trouver le fameux nombre gagnant) dans son coin, et uniquement lorsqu'un mineur sait qu'il a trouvé la combinaison gagnante, il l'envoie au reste du réseau (en étant, sauf erreur, certain qu'il sera accepté).
Et donc, comme dit au-dessus, chaque mineur est libre de décider arbitrairement ce qu'il inclut dans ses blocs, tant que ça respecte les règles du consensus.

qu'est ce qui empêche une adresse de "mentir " ?

Les mineurs, mais aussi tous les autres nœuds, vérifient toutes les nouvelles transactions qu'ils reçoivent. Pour dépenser depuis une adresse, il faut pouvoir signer une transaction avec la clé privée dont est dérivée ladite adresse.

Est ce que le travail cryptographique qui sert à valider le bloc implique une analyse du contenu poussée, qui permet d'invalider la cohérence du bloc avec le bloc précédent ( bloc qui contiendrait une sorte d'état du réseau ? ), et que ce travail est au fondement du travail des validateurs ?

En fait, "validateurs" pour Bitcoin ça ne veut pas dire grand chose. Car tous les nœuds valident toutes les transactions, même ceux qui ne minent pas.
Le seul rôle des mineurs, c'est de fournir une preuve de travail (en gros, prouver qu'ils ont dépensé des ressources pour fournir un calcul qui n'a pas d'utilité intrinsèque, mais qui vise à introduire une notion de rareté, autrement absente du monde informatique).
Donc "au fondement du travail des mineurs", non.

En revanche, tu touches un point intéressant : tu as compris que les blocs contenaient des transactions (Alice à envoyé 1BTC à Bob) et pas des états (Bob possède 2BTC). Donc pour savoir si ton adresse peut dépenser 1BTC, il faut vérifier que :
- tu peux signer une transaction pour cette adresse
- tu possèdes bien 1BTC sur cette adresse
Et pour le 2ème point, comme tu le suggères, il n'y a pas d'autres choix que de consulter les transactions précédentes.
Cependant, on ne fait pas ça au cas par cas. À la place, lorsque le nœud se synchronise, il maintient une base de donnée de qui (quelle adresse) possède quoi.
On appelle ça l'UTXO-set (un UTXO (Unspent Transaction Output), c'est un morceau de bitcoin qui peut être dépensé).
NB : C'est pour ça que même les nœuds prunés / élagués (ceux qui ne conservent que la fin de la blockchain) ont quand même besoin de tout télécharger depuis le début (et suppriment au fur et à mesure).

Et que, par exemple, si un bloc était truqué, l'algorythme lui attacherait une autre "étiquette ", qui pourrait être validée si une bonne partie du réseau ( 51% produisait la même étiquette ? )

Si un mineur tente de diffuser un bloc qui n'est pas valide, les nœuds qui le recevront vont le vérifier, voir qu'il n'est pas valide, et ne vont donc pas le transmettre aux autres nœuds.

Si une partie du réseau n'est pas d'accord sur les règles à appliquer pour déterminer si le bloc est valide, alors on verra le réseau se scinder et deux blockchains co-exister en parallèle. Les utilisateurs (comprendre, ceux qui font tourner un nœud) choisiront quel logiciel Bitcoin (et donc laquelle de ces deux versions de Bitcoin) ils veulent utiliser.
À terme, cela crée donc deux réseaux différents. C'est un hard-fork. Si tu veux un exemple concret, tu peux faire des recherches sur la blocksize war et comment est né Bitcoin Cash.

Voilà, c'est tout pour aujourd'hui ! Je ne pensais pas que ce serait aussi massif Shocked Cheesy
newbie
Activity: 22
Merit: 20
Bonjour,

Je me pose quelques questions sur BTC, et sur ses solutions de scalabilités, notamment Lightning network.

Si je vois plus ou moins comment les validateurs libèrent un bloc et s'assurant de sa validité vis à vis du bloc précédent, je ne suis pas sur à 100% de comprendre concrètement ce qu'il se passe, et je me pose aussi une question : en amont de ça :

Comment est constitué le bloc?

Je me trompe peut-être, mais je pars du principe qu'une adresse effectuant une transaction la communique à un nœud ( tous les nœuds ?) simultanément, en fait la communication est l'exécution.

Puis tous les X temps, un bloc contenant tout ce qui a été communiqué est soumis à validation, mais qu'est ce qui empêche une adresse de "mentir " ?


Est ce que le travail cryptographique qui sert à valider le bloc implique une analyse du contenu poussée, qui permet d'invalider la cohérence du bloc avec le bloc précédent ( bloc qui contiendrait une sorte d'état du réseau ? ), et que ce travail est au fondement du travail des validateurs ? Et que, par exemple, si un bloc était truqué, l'algorythme lui attacherait une autre "étiquette ", qui pourrait être validée si une bonne partie du réseau ( 51% produisait la même étiquette ? )

Désolé, je suis certainement peu clair, mais j'aimerais comprendre la logique de la PoW de manière un peu plus détaillée

J'aurais une question de cet ordre sur lightning, mais je vais attendre de comprendre au niveau de BTC avant de creuser  Grin

Merci d'avance !
Jump to: