Transaction input - Comment les données des témoins Segwit peuvent-elles être "hors chaîne" ? Qu’est-ce que cela signifie réellement ?

Non, ce n'est pas exact. Les données des témoins sont en chaîne, les entrées ont une longueur d'octet similaire à celle d'avant (elles sont simplement pondérées différemment) et le débit de transaction est augmenté car le segwit est une augmentation de facto de la taille des blocs.

Ainsi, avec segwit, les données du témoin ont été séparées du reste de l'entrée. Plus précisément, les données des témoins sont désormais « hors chaîne ». Cela a rendu l’entrée beaucoup plus légère et, en retour, a rendu la dépense d’un UTXO moins chère et plus rapide à traiter.

Il s’agit d’un malentendu courant perpétué par une abondance de descriptions (parfois délibérément) confuses du fonctionnement du segwit.

Une transaction n'est pas complète sans la preuve qu'elle a été autorisée par le propriétaire des fonds dépensés. En tant que tel, le témoin fait explicitement partie d'une « transaction complète ». Ce que segwit a fait, c'est de séparer le témoin (lire "signature") du script d'entrée et de le déplacer vers la "section témoin" de la transaction. La section témoin est au même niveau hiérarchique que les entrées et sorties.

La section témoin est exclue lors du calcul de l'identifiant de transaction (txid), mais elle fait partie de la transaction et est utilisée pour calculer l'identifiant de transaction témoin (wtxid). Alors que la racine merkle dans l'en-tête de bloc s'engage sur les txids des transactions incluses, chaque bloc segwit s'engage en outre sur un arbre merkle des wtxids des transactions. En conclusion, les témoins font a) partie de la transaction, b) partie de la blockchain, c) nécessaires pour valider pleinement la blockchain.

Segwit a remplacé la limite de taille de bloc par une limite de poids de bloc. La taille du bloc était basée sur la longueur brute en octets des transactions et plafonnée à 1 000 000 d’octets. La limite de poids de bloc est plafonnée à 4 000 000 d'unités de poids, le poids étant calculé en comptant les octets témoins avec un facteur de un et les octets non témoins avec un facteur de 4. Cela aboutit à une limite équivalente si un bloc n'inclut que des transactions sans données de témoins.

Les données de transaction réelles d'une entrée segwit par rapport à une entrée non segwit ne sont que légèrement plus petites. C'est la réduction des données témoins qui permet aux blocs de dépasser la limite de taille de bloc précédente, ce qui fait du segwit une augmentation effective de la taille de bloc, le plus gros bloc à ce jour ayant 2 422 858 octets (mais 3 993 379 unités de poids).

Les transactions et les blocs Segwit sont rendus compatibles avec les nœuds pré-segwit. Les nœuds Segwit supprimeront les données des témoins avant de relayer les données vers les nœuds pré-segwit. Les transactions et les blocs supprimés ne sont pas standard mais valides selon les règles du protocole pré-segwit, et ainsi les nœuds pré-segwit peuvent suivre la blockchain et converger vers le même ensemble UTXO.

Notez que les nœuds pré-segwit n'ont pas « entièrement validé les nœuds » depuis l'activation de segwit le 24 août 2017, car ils n'appliquent pas unilatéralement toutes les règles de consensus du protocole Bitcoin.