Découvrez pourquoi la mise à jour Segregated Witness (SegWit) a changé beaucoup de choses pour le Bitcoin et la vérification des transactions.
Les SegWit
Comme évoqué dans l’épisode précédent, il est possible de modifier des transactions. Nous avions évoqué la possibilité de faire des transactions à “time lock” afin de programmer une transaction en fonction de l’heure ou du nombre de hauteurs de bloc.
Mais ce processus permettait aux mineurs notamment de modifier les transactions. En effet, il était avant possible de modifier les signatures dans les blocs. Il pouvait y avoir deux transactions, mais avec deux TXID différents.
Cette “malléabilité” des transactions a donc été réduite à néant grâce à l’introduction de la mise à jour nommée Segregated Witness. Segregated Witness, autrement appelée SegWit, est une mise à jour qui permet de séparer les signatures du calcul des TXID. En conséquence, les TXID sont toujours valides et conformes pour le processus de validation du minage. Cela permet donc des transactions en toute confiance, surtout dans le cadre de transactions programmées.
“Dans le jargon cryptographique, un témoin signifie essentiellement une signature. C’est quelque chose qui atteste de l’authenticité de quelque chose. Pour une transaction Bitcoin, le témoin est le contenu des scripts de signature, parce que c’est ce qui prouve que la transaction est authentifiée. Ségrégé signifie séparé, nous séparons donc le contenu des scripts de signature de la transaction, laissant effectivement les scripts de signature vides.
Segregated Witness signifie donc que le contenu des scripts de signature sont retirés de la transaction et placés dans une structure externe appelée le témoin.”
Les avantages du Segwit
Une adresse segwit possède le code Bech32 au lieu du Base58check initial. Le Bech32 peut trouver les erreurs jusqu’à 4 chiffres à 100% de réussite :
“Votre adresse segwit se compose de deux parties. Les deux premiers caractères,
bc (abréviation de Bitcoin) est la partie lisible par l’homme. Le 1 est un délimiteur entre la partie lisible par l’homme et la partie données, qui code les informations réelles que l’utilisateur utilisera pour créer le résultat de la transaction :
-
Une version 0 dans ce cas.
-
Un programme de témoignage. Dans ce cas, le programme témoin est un PKH, c8052b79…3176cba8.”
Outre le fait que le Segwit rend les ID de transactions plus fiables, ils peuvent également permettre de sauvegarder de la bande passante (notamment en réduisant la taille des blooms filters) mais simplifient également le processus de vérification des transactions.
Si le nombre d’inputs double, la vérification de la transaction peut prendre quatre fois plus de temps. Le segwit permet de créer des “empreintes intermédiaires” qui permettent de réduire grandement le temps de vérification. Si le nombre d’inputs double, le temps de vérification double également, au lieu d’être multiplié par plus de quatre.
Mais un des aspects les plus importants est que le SegWit a été accompagné d’une augmentation de la taille des blocs.
Avec SegWit, les blocs peuvent désormais dépasser la limite de 1 megabyte et de 20 000 vérifications de signatures. Mais la taille des blocs permettait de nombreuses attaques du réseau. Que ce soit les DoS ou d’augmenter le nombre de signatures pour mettre en difficulté le réseau de nœuds.
Comme il est écrit dans le livre Grokking Bitcoin, “Segwit offre la possibilité d’augmenter quelque peu ces deux limites sans faire un hard fork.”
“L’effet est que l’ancienne limite de taille de bloc de 1 000 000 d’octets reste parce que la nouvelle règle et l’ancienne règle sont effectivement les mêmes sur le bloc de base. Mais plus le segwit est utilisé, plus les données peuvent être déplacées du bloc de base aux témoins, ce qui permet un total plus important de la taille du bloc.
À mesure que la quantité relative de données de témoins augmente dans le bloc, nous pouvons intégrer davantage de transactions.”
Le nombre de vérifications de signatures peut aller jusqu’à 80 000 au lieu de 20 000. Toutefois, si un bloc contient uniquement des inputs de base, le nombre maximal reste à 20 000. Si le bloc contient uniquement des inputs segwit, le nombre est de 80 000 signatures. Cela assure donc une adaptation aux nœuds et wallets qui n’ont pas la mise à jour segwit. Le nombre de vérifications varie donc entre 20 000 et 80 000 et n’est pas fixe.
Sur le même sujet :