Pour un algorithme f, deux participants mutuellement méfiants, Alice et Bob, peuvent établir la confiance de la manière suivante :
Pour les points 2, 3 et 4 ci-dessus, soit x les transactions Layer 2 et l'état initial, f le programme de consensus Layer 2 et y l'état final de la transaction, correspondant à la solution de mise à l'échelle de la couche 2 de la blockchain. Parmi eux :
Tableau 1 : Moyens d'établir la confiance
De plus, il est important de noter:
Actuellement, grâce aux contrats intelligents Turing-complets de Solidity, les preuves de fraude et les technologies de preuve de validité sont largement utilisées dans l'évolutivité de la couche 2 d'Ethereum. Cependant, dans le paradigme Bitcoin, limité par la fonctionnalité opcode limitée de Bitcoin, les 1000 éléments de pile et d'autres restrictions, l'application de ces technologies est encore à l'étape exploratoire. Cet article résume les limites et les technologies innovantes dans le contexte de l'évolutivité de la couche 2 de Bitcoin, étudie les technologies de preuve de validité et de preuve de fraude, et présente la technologie unique de segmentation de script dans le paradigme Bitcoin.
Il y a de nombreuses limitations dans le paradigme Bitcoin, mais diverses méthodes ou techniques astucieuses peuvent être utilisées pour les surmonter. Par exemple, l'engagement de bits peut contourner la limitation sans état de l'UTXO, Taproot peut contourner les limitations de l'espace de script, la sortie du connecteur peut contourner les limitations de la méthode de dépense de l'UTXO et les contrats peuvent contourner les limitations de la pré-signature.
Bitcoin adopte le modèle UTXO, où chaque UTXO est verrouillé dans un script de verrouillage qui définit les conditions qui doivent être remplies pour dépenser cet UTXO. Les scripts Bitcoin ont les limitations suivantes:
Actuellement, les scripts Bitcoin sont entièrement sans état. Lors de l'exécution d'un script Bitcoin, son environnement d'exécution est réinitialisé après chaque script. Cela conduit à l'incapacité des scripts Bitcoin de prendre en charge nativement les scripts de contrainte 1 et 2 ayant la même valeur x. Cependant, ce problème peut être contourné grâce à certaines méthodes, l'idée centrale étant de signer une valeur d'une certaine manière. Si une signature peut être créée pour une valeur, il est possible d'obtenir des scripts Bitcoin étatiques. C'est-à-dire qu'en vérifiant la signature de la valeur x dans les scripts 1 et 2, il est possible d'imposer l'utilisation de la même valeur x dans les deux scripts. Si une signature en conflit est présente, ce qui signifie que deux valeurs différentes sont signées pour la même variable x, une pénalité peut être appliquée. Cette solution est connue sous le nom d'engagement de bit.
Le principe de l'engagement de bit est relativement simple. Un bit fait référence à la définition de deux valeurs de hachage différentes, hach0 et hach1, pour chaque bit dans le message à signer. Si la valeur du bit à signer est 0, le pré-image0 de hach0 est révélé; si la valeur du bit à signer est 1, le pré-image1 de hach1 est révélé.
En prenant un seul message de bit m ∈{0,1} comme exemple, le script de déverrouillage d'engagement de bit correspondant est juste quelques préimages : si la valeur du bit est 0, le script de déverrouillage correspondant est preimage0—"0xfa7fa5b1dea37d71a0b841967f6a3b119dbea140" ; si la valeur du bit est 1, le script de déverrouillage correspondant est preimage1—"0x47c31e611a3bd2f3a7a42207613046703fa27496". Par conséquent, avec l'engagement de bit, il est possible de contourner la limitation sans état de l'UTXO et d'atteindre des scripts Bitcoin étatiques, rendant possible diverses nouvelles fonctionnalités intéressantes.
OP_HASH160
OP_DUP
0xf592e757267b7f307324f1e78b34472f8b6f46f3> // Ceci est le hash1
OP_EQUAL
OP_DUP
OP_ROT
0x100b9f19ebd537fdc371fa1367d7ccc802dc2524> // Ceci est hash0
OP_EQUAL
OP_BOOLOR
OP_VERIFY
// La valeur de l'engagement de bits est maintenant sur la pile. Soit «0» soit «1».
Actuellement, il existe 2 implémentations d'engagement de bits :
Actuellement, la bibliothèque BitVM2 implémente les signatures Winternitz basées sur la fonction de hachage Blake3. La longueur de la signature correspondant à un seul bit est d’environ 26 octets. Par conséquent, on peut voir que l’introduction de l’état par le biais de l’engagement binaire est coûteuse. Ainsi, dans l’implémentation BitVM2, le message est d’abord haché pour obtenir une valeur de hachage de 256 bits, puis l’engagement de bits est effectué sur la valeur de hachage pour économiser la surcharge, plutôt que de s’engager directement sur chaque bit du message plus long d’origine.
La mise à niveau du soft fork Bitcoin Taproot, activée en novembre 2021, comprend trois propositions : les signatures Schnorr (BIP 340), Taproot (BIP 341) et TapScript (BIP 342). Elle introduit un nouveau type de transaction - les transactions Pay-to-Taproot (P2TR). Les transactions P2TR peuvent créer un format de transaction plus privé, flexible et évolutif en combinant les avantages de Taproot, MAST (Merkel Abstract Syntax Tree) et des signatures Schnorr.
P2TR prend en charge deux méthodes de dépense : dépenser selon le chemin de clé ou le chemin de script.
Selon les dispositions de Taproot (BIP 341), lors des dépenses via le chemin de script, le chemin de Merkle correspondant ne peut pas dépasser une longueur maximale de 128. Cela signifie que le nombre de feuilles de robinet dans l'arbre de robinet ne peut pas dépasser 2^128. Depuis la mise à niveau de SegWit en 2017, le réseau Bitcoin mesure la taille des blocs en unités de poids, avec un support maximal de 4 millions d'unités de poids (environ 4 Mo). Lorsqu'une sortie P2TR est dépensée via le chemin de script, il suffit de révéler un seul script de feuille de robinet, ce qui signifie que le bloc est emballé avec un seul script de feuille de robinet. Cela implique que pour les transactions P2TR, la taille du script correspondant à chaque feuille de robinet peut être maximale d'environ 4 Mo. Cependant, selon la politique par défaut de Bitcoin, de nombreux nœuds ne transmettent que des transactions de moins de 400 Ko ; les transactions plus volumineuses doivent collaborer avec les mineurs pour être emballées.
L'espace de script premium apporté par Taproot le rend plus précieux pour simuler des opérations cryptographiques telles que la multiplication et le hachage à l'aide des opcodes existants.
Lors de la création d’un calcul vérifiable basé sur P2TR, la taille de script correspondante n’est plus limitée à la contrainte de 4 Mo, mais peut être divisée en plusieurs sous-fonctions réparties sur plusieurs feuilles de contact, brisant ainsi la limite d’espace de script de 4 Mo. En fait, l’algorithme de vérification Groth16 implémenté dans le BitVM2 actuel a une taille allant jusqu’à 2 Go. Cependant, il peut être divisé et distribué sur environ 1000 feuilles pivotantes, et en le combinant avec l’engagement de bits, la cohérence entre les entrées et les sorties de chaque sous-fonction peut être contrainte, garantissant l’intégrité et l’exactitude de l’ensemble du calcul.
Actuellement, Bitcoin offre deux méthodes de dépenses natives pour un seul UTXO : dépenser par script ou par clé publique. Par conséquent, tant que la signature de clé publique correcte ou les conditions de script sont remplies, l'UTXO peut être dépensé. Deux UTXOs peuvent être dépensés indépendamment, et aucune restriction ne peut être ajoutée pour contraindre les deux UTXOs, ce qui signifie que des conditions supplémentaires doivent être remplies pour qu'ils soient dépensés.
Cependant, Burak, le fondateur du protocole Ark, a intelligemment utilisé l’indicateur SIGHASH pour obtenir une sortie de connecteur. Plus précisément, Alice peut créer une signature pour envoyer ses BTC à Bob. Cependant, étant donné que la signature peut s’engager sur plusieurs entrées, Alice peut définir sa signature comme étant conditionnelle : la signature est valide pour la transaction Taketx si et seulement si cette transaction consomme la deuxième entrée. La deuxième entrée s’appelle le connecteur, reliant UTXO A et UTXO B. En d’autres termes, la transaction Taketx est valide si et seulement si UTXO B n’a pas été dépensé par le Challengetx. Par conséquent, en détruisant la sortie du connecteur, l’efficacité de la transaction Taketx peut être bloquée.
Figure 1: Illustration de sortie de connecteur
Dans le protocole BitVM2, la sortie du connecteur agit comme une fonction if...else. Une fois que la sortie du connecteur est dépensée par une transaction, elle ne peut pas être dépensée par une autre transaction pour garantir sa dépense exclusive. Dans le déploiement pratique, pour permettre une période de challenge-réponse, des UTXOs supplémentaires avec une verrouillage temporel sont introduits. De plus, la sortie du connecteur correspondante peut également être configurée avec différentes stratégies de dépense selon les besoins, telles que permettre à n'importe quelle partie de dépenser dans le cas de transactions de challenge, tout en permettant seulement à l'opérateur de dépenser ou permettant à n'importe qui de dépenser après un délai d'attente pour les transactions de réponse.
Actuellement, les scripts Bitcoin limitent principalement les conditions de déverrouillage, sans restreindre la façon dont le UTXO peut être dépensé ultérieurement. En effet, les scripts Bitcoin ne peuvent pas lire le contenu de la transaction elle-même, ce qui signifie qu'ils ne peuvent pas réaliser d'introspection de transaction. Si les scripts Bitcoin pouvaient vérifier n'importe quel contenu de la transaction (y compris les sorties), la fonctionnalité du contrat pourrait être réalisée.
Les implémentations de contrat actuelles peuvent être divisées en deux catégories:
Les preuves de validité et les preuves de fraude peuvent être utilisées pour l'évolutivité de Bitcoin L2, les principales différences sont présentées dans le tableau 2.
Table 2: Preuve de validité vs Preuve de fraude
Sur la base de l’engagement des bits, de la racine pivotante, de la pré-signature et de la sortie du connecteur, des preuves de fraude basées sur Bitcoin peuvent être construites. Sur la base de la racine pivotante, les preuves de validité basées sur Bitcoin peuvent également être construites en introduisant des opcodes de contrat, tels que OP_CAT. De plus, selon que Bob dispose ou non d’un système d’admission, les preuves de fraude peuvent être divisées en preuves de fraude autorisées et preuves de fraude sans autorisation. Dans les preuves de fraude autorisées, seuls des groupes spécifiques peuvent agir en tant que Bob pour lancer des contestations, tandis que dans les preuves de fraude sans autorisation, n’importe quel tiers peut agir en tant que Bob pour lancer des contestations. La sécurité des preuves de fraude sans autorisation est supérieure à celle des preuves autorisées, ce qui réduit le risque de collusion entre les participants autorisés.
Selon le nombre d'interactions de défi-réponse entre Alice et Bob, les preuves de fraude peuvent être divisées en preuves de fraude à un tour et en preuves de fraude à plusieurs tours, comme le montre la figure 2.
Figure 2: Preuves de fraude à un tour vs preuves de fraude à plusieurs tours
Comme indiqué dans le Tableau 3, les preuves de fraude peuvent être mises en œuvre à travers différents modèles d'interaction, y compris les modèles d'interaction à un tour et les modèles d'interaction à plusieurs tours.
Table 3: Interaction en un tour vs Interaction en plusieurs tours
Dans le paradigme de mise à l'échelle Layer 2 de Bitcoin, BitVM1 adopte un mécanisme de preuve de fraude multi-tours, tandis que BitVM2 utilise un mécanisme de preuve de fraude à un tour, et bitcoin-circle stark utilise des preuves de validité. Parmi ceux-ci, BitVM1 et BitVM2 peuvent être mis en œuvre sans apporter de modifications au protocole Bitcoin, tandis que bitcoin-circle stark nécessite l'introduction d'un nouveau code d'opération OP_CAT.
Pour la plupart des tâches de calcul, le signet, le testnet et le mainnet de Bitcoin ne peuvent pas représenter entièrement un script de 4 Mo, ce qui rend nécessaire l'utilisation de la technologie de fractionnement de script, c'est-à-dire diviser le script de calcul complet en morceaux plus petits que 4 Mo, répartis sur divers tapleafs.
Comme indiqué dans le tableau 3, les preuves de fraude à plusieurs tours conviennent aux scénarios où l'on souhaite réduire le calcul d'arbitrage en chaîne et/ou où il n'est pas possible de localiser les segments de calcul problématiques en une seule étape. Les preuves de fraude à plusieurs tours, comme leur nom l'indique, nécessitent plusieurs tours d'interaction entre le prouveur et le vérificateur pour localiser les segments de calcul problématiques, suivis d'un arbitrage basé sur les segments identifiés.
Le premier livre blanc de BitVM de Robin Linus (communément appelé BitVM1) utilisait des preuves de fraude à plusieurs tours. En supposant que chaque période de défi dure une semaine et en utilisant une méthode de recherche binaire pour localiser les segments de calcul problématiques, la période de réponse au défi sur la chaîne pour le vérificateur Groth16 pourrait s'étendre jusqu'à 30 semaines, ce qui entraînerait une mauvaise rapidité. Bien qu'il y ait actuellement des équipes de recherche sur des méthodes de recherche n-aires plus efficaces que la recherche binaire, leur rapidité est toujours nettement inférieure par rapport au cycle de 2 semaines dans les preuves de fraude à un seul tour.
Actuellement, les preuves de fraude à plusieurs tours dans le paradigme Bitcoin utilisent des défis autorisés, tandis que les preuves de fraude à un tour ont adopté une méthode de défi sans autorisation, réduisant ainsi le risque de collusion entre les participants et améliorant ainsi la sécurité. À cette fin, Robin Linus a pleinement exploité les avantages de Taproot pour optimiser BitVM1. Non seulement le nombre de tours d'interaction a été réduit à un, mais la méthode de défi a également été étendue à une approche sans autorisation, bien que cela entraîne une augmentation du calcul d'arbitrage sur chaîne.
Dans ce modèle, la vérification des preuves de fraude peut être effectuée au moyen d'une seule interaction entre le prouveur et le vérificateur. Le vérificateur n'a besoin que d'initier un seul défi, et le prouveur n'a besoin que de répondre une fois. Dans cette réponse, le prouveur doit fournir des preuves affirmant que son calcul est correct. Si le vérificateur trouve des incohérences dans ces preuves, le défi est réussi ; sinon, il échoue. Les caractéristiques des preuves de fraude interactives en une seule étape sont présentées dans le tableau 3.
Figure 3: Preuve de fraude en un tour
Le 15 août 2024, Robin Linus a publié le document technique BitVM2: Pont entre Bitcoin et les couches secondaires, qui a mis en œuvre un pont inter-chaînes en utilisant une méthode de preuve de fraude à un tour similaire à celle illustrée dans la figure 3.
OPCAT faisait partie du langage de script original lors de la sortie de Bitcoin, mais a été désactivé en 2010 en raison de vulnérabilités de sécurité. Cependant, la communauté Bitcoin discute de sa réactivation depuis des années. OPCAT s'est vu attribuer le numéro 347 et a été activé sur le signet de Bitcoin.
La fonction principale d'OP_CAT est de combiner deux éléments de la pile et de pousser le résultat fusionné de nouveau sur la pile. Cette fonctionnalité ouvre la possibilité de contrats et de vérificateurs STARK sur Bitcoin :
Bien que la charge de calcul requise pour exécuter l'algorithme de vérification correspondant afin de vérifier la preuve après la preuve SNARK/STARK soit beaucoup plus petite que celle requise pour exécuter directement le calcul original f, la quantité de script nécessaire lors de sa conversion pour implémenter l'algorithme de vérification dans le script Bitcoin reste énorme. Actuellement, en se basant sur les opcodes Bitcoin existants, la taille du script vérificateur optimisé Groth16 et la taille du script vérificateur Fflonk sont toutes les deux supérieures à 2 Go. Cependant, la taille d'un seul bloc Bitcoin est seulement de 4 Mo, ce qui rend impossible l'exécution de l'ensemble du script vérificateur dans un seul bloc. Cependant, depuis la mise à niveau de Taproot, Bitcoin prend en charge l'exécution de scripts par tapleaf, ce qui permet de diviser le script vérificateur en plusieurs morceaux, chaque morceau servant de tapleaf pour construire un taptree. La cohérence des valeurs entre les morceaux peut être assurée grâce à l'engagement de bits.
En présence de contrats OP_CAT, le vérificateur STARK peut être divisé en plusieurs transactions standard inférieures à 400 Ko, ce qui permet d’effectuer l’ensemble de la vérification de la preuve de validité STARK sans avoir besoin de collaborer avec les mineurs.
Cette section se concentre sur la technologie de division pertinente des scripts Bitcoin dans les conditions existantes sans introduire ou activer de nouveaux opcodes.
Lors de la division du script, les dimensions d'information suivantes doivent être équilibrées :
Actuellement, les méthodes de division de script peuvent être divisées en trois catégories principales suivantes :
Par exemple, après plusieurs rounds d'optimisation, la taille du script du vérificateur Groth16 a été réduite d'environ 7 Go à environ 1,26 Go. En plus de cette optimisation computationnelle globale, chaque morceau peut également être optimisé individuellement pour utiliser pleinement l'espace de la pile. Par exemple, en introduisant de meilleurs algorithmes basés sur des tables de recherche et en chargeant et déchargeant dynamiquement la table de recherche, la taille du script de chaque morceau peut être encore réduite.
Les coûts de calcul et les environnements d'exécution des langages de programmation web2 sont complètement différents de ceux des scripts Bitcoin, il n'est donc pas possible de simplement traduire les implémentations existantes pour divers algorithmes en scripts Bitcoin. Par conséquent, des optimisations spécifiques au scénario Bitcoin doivent être prises en compte :
Cet article présente d'abord les limites des scripts Bitcoin et discute de l'utilisation des engagements Bitcoin pour surmonter la limitation UTXO sans état, de l'utilisation de Taproot pour briser les limitations d'espace de script, de l'utilisation de sorties de connecteur pour contourner les restrictions de méthode de dépense UTXO et de l'utilisation de contrats pour surmonter les limites de pré-signature. Il fournit ensuite un aperçu complet et un résumé des caractéristiques des preuves de fraude et des preuves de validité, des caractéristiques des preuves de fraude autorisées et non autorisées, des distinctions entre les preuves de fraude à un tour et à plusieurs tours, et de la technologie de division de script Bitcoin.
Pour un algorithme f, deux participants mutuellement méfiants, Alice et Bob, peuvent établir la confiance de la manière suivante :
Pour les points 2, 3 et 4 ci-dessus, soit x les transactions Layer 2 et l'état initial, f le programme de consensus Layer 2 et y l'état final de la transaction, correspondant à la solution de mise à l'échelle de la couche 2 de la blockchain. Parmi eux :
Tableau 1 : Moyens d'établir la confiance
De plus, il est important de noter:
Actuellement, grâce aux contrats intelligents Turing-complets de Solidity, les preuves de fraude et les technologies de preuve de validité sont largement utilisées dans l'évolutivité de la couche 2 d'Ethereum. Cependant, dans le paradigme Bitcoin, limité par la fonctionnalité opcode limitée de Bitcoin, les 1000 éléments de pile et d'autres restrictions, l'application de ces technologies est encore à l'étape exploratoire. Cet article résume les limites et les technologies innovantes dans le contexte de l'évolutivité de la couche 2 de Bitcoin, étudie les technologies de preuve de validité et de preuve de fraude, et présente la technologie unique de segmentation de script dans le paradigme Bitcoin.
Il y a de nombreuses limitations dans le paradigme Bitcoin, mais diverses méthodes ou techniques astucieuses peuvent être utilisées pour les surmonter. Par exemple, l'engagement de bits peut contourner la limitation sans état de l'UTXO, Taproot peut contourner les limitations de l'espace de script, la sortie du connecteur peut contourner les limitations de la méthode de dépense de l'UTXO et les contrats peuvent contourner les limitations de la pré-signature.
Bitcoin adopte le modèle UTXO, où chaque UTXO est verrouillé dans un script de verrouillage qui définit les conditions qui doivent être remplies pour dépenser cet UTXO. Les scripts Bitcoin ont les limitations suivantes:
Actuellement, les scripts Bitcoin sont entièrement sans état. Lors de l'exécution d'un script Bitcoin, son environnement d'exécution est réinitialisé après chaque script. Cela conduit à l'incapacité des scripts Bitcoin de prendre en charge nativement les scripts de contrainte 1 et 2 ayant la même valeur x. Cependant, ce problème peut être contourné grâce à certaines méthodes, l'idée centrale étant de signer une valeur d'une certaine manière. Si une signature peut être créée pour une valeur, il est possible d'obtenir des scripts Bitcoin étatiques. C'est-à-dire qu'en vérifiant la signature de la valeur x dans les scripts 1 et 2, il est possible d'imposer l'utilisation de la même valeur x dans les deux scripts. Si une signature en conflit est présente, ce qui signifie que deux valeurs différentes sont signées pour la même variable x, une pénalité peut être appliquée. Cette solution est connue sous le nom d'engagement de bit.
Le principe de l'engagement de bit est relativement simple. Un bit fait référence à la définition de deux valeurs de hachage différentes, hach0 et hach1, pour chaque bit dans le message à signer. Si la valeur du bit à signer est 0, le pré-image0 de hach0 est révélé; si la valeur du bit à signer est 1, le pré-image1 de hach1 est révélé.
En prenant un seul message de bit m ∈{0,1} comme exemple, le script de déverrouillage d'engagement de bit correspondant est juste quelques préimages : si la valeur du bit est 0, le script de déverrouillage correspondant est preimage0—"0xfa7fa5b1dea37d71a0b841967f6a3b119dbea140" ; si la valeur du bit est 1, le script de déverrouillage correspondant est preimage1—"0x47c31e611a3bd2f3a7a42207613046703fa27496". Par conséquent, avec l'engagement de bit, il est possible de contourner la limitation sans état de l'UTXO et d'atteindre des scripts Bitcoin étatiques, rendant possible diverses nouvelles fonctionnalités intéressantes.
OP_HASH160
OP_DUP
0xf592e757267b7f307324f1e78b34472f8b6f46f3> // Ceci est le hash1
OP_EQUAL
OP_DUP
OP_ROT
0x100b9f19ebd537fdc371fa1367d7ccc802dc2524> // Ceci est hash0
OP_EQUAL
OP_BOOLOR
OP_VERIFY
// La valeur de l'engagement de bits est maintenant sur la pile. Soit «0» soit «1».
Actuellement, il existe 2 implémentations d'engagement de bits :
Actuellement, la bibliothèque BitVM2 implémente les signatures Winternitz basées sur la fonction de hachage Blake3. La longueur de la signature correspondant à un seul bit est d’environ 26 octets. Par conséquent, on peut voir que l’introduction de l’état par le biais de l’engagement binaire est coûteuse. Ainsi, dans l’implémentation BitVM2, le message est d’abord haché pour obtenir une valeur de hachage de 256 bits, puis l’engagement de bits est effectué sur la valeur de hachage pour économiser la surcharge, plutôt que de s’engager directement sur chaque bit du message plus long d’origine.
La mise à niveau du soft fork Bitcoin Taproot, activée en novembre 2021, comprend trois propositions : les signatures Schnorr (BIP 340), Taproot (BIP 341) et TapScript (BIP 342). Elle introduit un nouveau type de transaction - les transactions Pay-to-Taproot (P2TR). Les transactions P2TR peuvent créer un format de transaction plus privé, flexible et évolutif en combinant les avantages de Taproot, MAST (Merkel Abstract Syntax Tree) et des signatures Schnorr.
P2TR prend en charge deux méthodes de dépense : dépenser selon le chemin de clé ou le chemin de script.
Selon les dispositions de Taproot (BIP 341), lors des dépenses via le chemin de script, le chemin de Merkle correspondant ne peut pas dépasser une longueur maximale de 128. Cela signifie que le nombre de feuilles de robinet dans l'arbre de robinet ne peut pas dépasser 2^128. Depuis la mise à niveau de SegWit en 2017, le réseau Bitcoin mesure la taille des blocs en unités de poids, avec un support maximal de 4 millions d'unités de poids (environ 4 Mo). Lorsqu'une sortie P2TR est dépensée via le chemin de script, il suffit de révéler un seul script de feuille de robinet, ce qui signifie que le bloc est emballé avec un seul script de feuille de robinet. Cela implique que pour les transactions P2TR, la taille du script correspondant à chaque feuille de robinet peut être maximale d'environ 4 Mo. Cependant, selon la politique par défaut de Bitcoin, de nombreux nœuds ne transmettent que des transactions de moins de 400 Ko ; les transactions plus volumineuses doivent collaborer avec les mineurs pour être emballées.
L'espace de script premium apporté par Taproot le rend plus précieux pour simuler des opérations cryptographiques telles que la multiplication et le hachage à l'aide des opcodes existants.
Lors de la création d’un calcul vérifiable basé sur P2TR, la taille de script correspondante n’est plus limitée à la contrainte de 4 Mo, mais peut être divisée en plusieurs sous-fonctions réparties sur plusieurs feuilles de contact, brisant ainsi la limite d’espace de script de 4 Mo. En fait, l’algorithme de vérification Groth16 implémenté dans le BitVM2 actuel a une taille allant jusqu’à 2 Go. Cependant, il peut être divisé et distribué sur environ 1000 feuilles pivotantes, et en le combinant avec l’engagement de bits, la cohérence entre les entrées et les sorties de chaque sous-fonction peut être contrainte, garantissant l’intégrité et l’exactitude de l’ensemble du calcul.
Actuellement, Bitcoin offre deux méthodes de dépenses natives pour un seul UTXO : dépenser par script ou par clé publique. Par conséquent, tant que la signature de clé publique correcte ou les conditions de script sont remplies, l'UTXO peut être dépensé. Deux UTXOs peuvent être dépensés indépendamment, et aucune restriction ne peut être ajoutée pour contraindre les deux UTXOs, ce qui signifie que des conditions supplémentaires doivent être remplies pour qu'ils soient dépensés.
Cependant, Burak, le fondateur du protocole Ark, a intelligemment utilisé l’indicateur SIGHASH pour obtenir une sortie de connecteur. Plus précisément, Alice peut créer une signature pour envoyer ses BTC à Bob. Cependant, étant donné que la signature peut s’engager sur plusieurs entrées, Alice peut définir sa signature comme étant conditionnelle : la signature est valide pour la transaction Taketx si et seulement si cette transaction consomme la deuxième entrée. La deuxième entrée s’appelle le connecteur, reliant UTXO A et UTXO B. En d’autres termes, la transaction Taketx est valide si et seulement si UTXO B n’a pas été dépensé par le Challengetx. Par conséquent, en détruisant la sortie du connecteur, l’efficacité de la transaction Taketx peut être bloquée.
Figure 1: Illustration de sortie de connecteur
Dans le protocole BitVM2, la sortie du connecteur agit comme une fonction if...else. Une fois que la sortie du connecteur est dépensée par une transaction, elle ne peut pas être dépensée par une autre transaction pour garantir sa dépense exclusive. Dans le déploiement pratique, pour permettre une période de challenge-réponse, des UTXOs supplémentaires avec une verrouillage temporel sont introduits. De plus, la sortie du connecteur correspondante peut également être configurée avec différentes stratégies de dépense selon les besoins, telles que permettre à n'importe quelle partie de dépenser dans le cas de transactions de challenge, tout en permettant seulement à l'opérateur de dépenser ou permettant à n'importe qui de dépenser après un délai d'attente pour les transactions de réponse.
Actuellement, les scripts Bitcoin limitent principalement les conditions de déverrouillage, sans restreindre la façon dont le UTXO peut être dépensé ultérieurement. En effet, les scripts Bitcoin ne peuvent pas lire le contenu de la transaction elle-même, ce qui signifie qu'ils ne peuvent pas réaliser d'introspection de transaction. Si les scripts Bitcoin pouvaient vérifier n'importe quel contenu de la transaction (y compris les sorties), la fonctionnalité du contrat pourrait être réalisée.
Les implémentations de contrat actuelles peuvent être divisées en deux catégories:
Les preuves de validité et les preuves de fraude peuvent être utilisées pour l'évolutivité de Bitcoin L2, les principales différences sont présentées dans le tableau 2.
Table 2: Preuve de validité vs Preuve de fraude
Sur la base de l’engagement des bits, de la racine pivotante, de la pré-signature et de la sortie du connecteur, des preuves de fraude basées sur Bitcoin peuvent être construites. Sur la base de la racine pivotante, les preuves de validité basées sur Bitcoin peuvent également être construites en introduisant des opcodes de contrat, tels que OP_CAT. De plus, selon que Bob dispose ou non d’un système d’admission, les preuves de fraude peuvent être divisées en preuves de fraude autorisées et preuves de fraude sans autorisation. Dans les preuves de fraude autorisées, seuls des groupes spécifiques peuvent agir en tant que Bob pour lancer des contestations, tandis que dans les preuves de fraude sans autorisation, n’importe quel tiers peut agir en tant que Bob pour lancer des contestations. La sécurité des preuves de fraude sans autorisation est supérieure à celle des preuves autorisées, ce qui réduit le risque de collusion entre les participants autorisés.
Selon le nombre d'interactions de défi-réponse entre Alice et Bob, les preuves de fraude peuvent être divisées en preuves de fraude à un tour et en preuves de fraude à plusieurs tours, comme le montre la figure 2.
Figure 2: Preuves de fraude à un tour vs preuves de fraude à plusieurs tours
Comme indiqué dans le Tableau 3, les preuves de fraude peuvent être mises en œuvre à travers différents modèles d'interaction, y compris les modèles d'interaction à un tour et les modèles d'interaction à plusieurs tours.
Table 3: Interaction en un tour vs Interaction en plusieurs tours
Dans le paradigme de mise à l'échelle Layer 2 de Bitcoin, BitVM1 adopte un mécanisme de preuve de fraude multi-tours, tandis que BitVM2 utilise un mécanisme de preuve de fraude à un tour, et bitcoin-circle stark utilise des preuves de validité. Parmi ceux-ci, BitVM1 et BitVM2 peuvent être mis en œuvre sans apporter de modifications au protocole Bitcoin, tandis que bitcoin-circle stark nécessite l'introduction d'un nouveau code d'opération OP_CAT.
Pour la plupart des tâches de calcul, le signet, le testnet et le mainnet de Bitcoin ne peuvent pas représenter entièrement un script de 4 Mo, ce qui rend nécessaire l'utilisation de la technologie de fractionnement de script, c'est-à-dire diviser le script de calcul complet en morceaux plus petits que 4 Mo, répartis sur divers tapleafs.
Comme indiqué dans le tableau 3, les preuves de fraude à plusieurs tours conviennent aux scénarios où l'on souhaite réduire le calcul d'arbitrage en chaîne et/ou où il n'est pas possible de localiser les segments de calcul problématiques en une seule étape. Les preuves de fraude à plusieurs tours, comme leur nom l'indique, nécessitent plusieurs tours d'interaction entre le prouveur et le vérificateur pour localiser les segments de calcul problématiques, suivis d'un arbitrage basé sur les segments identifiés.
Le premier livre blanc de BitVM de Robin Linus (communément appelé BitVM1) utilisait des preuves de fraude à plusieurs tours. En supposant que chaque période de défi dure une semaine et en utilisant une méthode de recherche binaire pour localiser les segments de calcul problématiques, la période de réponse au défi sur la chaîne pour le vérificateur Groth16 pourrait s'étendre jusqu'à 30 semaines, ce qui entraînerait une mauvaise rapidité. Bien qu'il y ait actuellement des équipes de recherche sur des méthodes de recherche n-aires plus efficaces que la recherche binaire, leur rapidité est toujours nettement inférieure par rapport au cycle de 2 semaines dans les preuves de fraude à un seul tour.
Actuellement, les preuves de fraude à plusieurs tours dans le paradigme Bitcoin utilisent des défis autorisés, tandis que les preuves de fraude à un tour ont adopté une méthode de défi sans autorisation, réduisant ainsi le risque de collusion entre les participants et améliorant ainsi la sécurité. À cette fin, Robin Linus a pleinement exploité les avantages de Taproot pour optimiser BitVM1. Non seulement le nombre de tours d'interaction a été réduit à un, mais la méthode de défi a également été étendue à une approche sans autorisation, bien que cela entraîne une augmentation du calcul d'arbitrage sur chaîne.
Dans ce modèle, la vérification des preuves de fraude peut être effectuée au moyen d'une seule interaction entre le prouveur et le vérificateur. Le vérificateur n'a besoin que d'initier un seul défi, et le prouveur n'a besoin que de répondre une fois. Dans cette réponse, le prouveur doit fournir des preuves affirmant que son calcul est correct. Si le vérificateur trouve des incohérences dans ces preuves, le défi est réussi ; sinon, il échoue. Les caractéristiques des preuves de fraude interactives en une seule étape sont présentées dans le tableau 3.
Figure 3: Preuve de fraude en un tour
Le 15 août 2024, Robin Linus a publié le document technique BitVM2: Pont entre Bitcoin et les couches secondaires, qui a mis en œuvre un pont inter-chaînes en utilisant une méthode de preuve de fraude à un tour similaire à celle illustrée dans la figure 3.
OPCAT faisait partie du langage de script original lors de la sortie de Bitcoin, mais a été désactivé en 2010 en raison de vulnérabilités de sécurité. Cependant, la communauté Bitcoin discute de sa réactivation depuis des années. OPCAT s'est vu attribuer le numéro 347 et a été activé sur le signet de Bitcoin.
La fonction principale d'OP_CAT est de combiner deux éléments de la pile et de pousser le résultat fusionné de nouveau sur la pile. Cette fonctionnalité ouvre la possibilité de contrats et de vérificateurs STARK sur Bitcoin :
Bien que la charge de calcul requise pour exécuter l'algorithme de vérification correspondant afin de vérifier la preuve après la preuve SNARK/STARK soit beaucoup plus petite que celle requise pour exécuter directement le calcul original f, la quantité de script nécessaire lors de sa conversion pour implémenter l'algorithme de vérification dans le script Bitcoin reste énorme. Actuellement, en se basant sur les opcodes Bitcoin existants, la taille du script vérificateur optimisé Groth16 et la taille du script vérificateur Fflonk sont toutes les deux supérieures à 2 Go. Cependant, la taille d'un seul bloc Bitcoin est seulement de 4 Mo, ce qui rend impossible l'exécution de l'ensemble du script vérificateur dans un seul bloc. Cependant, depuis la mise à niveau de Taproot, Bitcoin prend en charge l'exécution de scripts par tapleaf, ce qui permet de diviser le script vérificateur en plusieurs morceaux, chaque morceau servant de tapleaf pour construire un taptree. La cohérence des valeurs entre les morceaux peut être assurée grâce à l'engagement de bits.
En présence de contrats OP_CAT, le vérificateur STARK peut être divisé en plusieurs transactions standard inférieures à 400 Ko, ce qui permet d’effectuer l’ensemble de la vérification de la preuve de validité STARK sans avoir besoin de collaborer avec les mineurs.
Cette section se concentre sur la technologie de division pertinente des scripts Bitcoin dans les conditions existantes sans introduire ou activer de nouveaux opcodes.
Lors de la division du script, les dimensions d'information suivantes doivent être équilibrées :
Actuellement, les méthodes de division de script peuvent être divisées en trois catégories principales suivantes :
Par exemple, après plusieurs rounds d'optimisation, la taille du script du vérificateur Groth16 a été réduite d'environ 7 Go à environ 1,26 Go. En plus de cette optimisation computationnelle globale, chaque morceau peut également être optimisé individuellement pour utiliser pleinement l'espace de la pile. Par exemple, en introduisant de meilleurs algorithmes basés sur des tables de recherche et en chargeant et déchargeant dynamiquement la table de recherche, la taille du script de chaque morceau peut être encore réduite.
Les coûts de calcul et les environnements d'exécution des langages de programmation web2 sont complètement différents de ceux des scripts Bitcoin, il n'est donc pas possible de simplement traduire les implémentations existantes pour divers algorithmes en scripts Bitcoin. Par conséquent, des optimisations spécifiques au scénario Bitcoin doivent être prises en compte :
Cet article présente d'abord les limites des scripts Bitcoin et discute de l'utilisation des engagements Bitcoin pour surmonter la limitation UTXO sans état, de l'utilisation de Taproot pour briser les limitations d'espace de script, de l'utilisation de sorties de connecteur pour contourner les restrictions de méthode de dépense UTXO et de l'utilisation de contrats pour surmonter les limites de pré-signature. Il fournit ensuite un aperçu complet et un résumé des caractéristiques des preuves de fraude et des preuves de validité, des caractéristiques des preuves de fraude autorisées et non autorisées, des distinctions entre les preuves de fraude à un tour et à plusieurs tours, et de la technologie de division de script Bitcoin.