Pour un algorithme f, deux participants non fiables, Alice et Bob, peuvent établir la confiance de la manière suivante :
Pour les points 2, 3 et 4 ci-dessus, laissez x être les transactions Layer2 et l’état initial, f être le programme de consensus Layer2, laissez y être l’état final des transactions, correspondant à la solution d’extension Layer2 de la blockchain.
Tableau 1: Méthodes pour établir la confiance
En outre, il est important de noter que :
Actuellement, grâce aux contrats intelligents Turing complet de Solidity, les technologies de preuve de validité, de preuve de fraude et de preuve de validité sont largement utilisées dans l’extension Layer2 d’Ethereum. Cependant, dans le cadre de BTC, en raison des fonctionnalités limitées des opcodes de BTC, du nombre limité d’éléments de pile (seulement 1000) et d’autres restrictions, l’application de ces technologies est encore en phase d’exploration. Cet article résume les limites et les avancées technologiques du cadre BTC, étudie les technologies de preuve de validité et de preuve de fraude, et décrit la technique unique de segmentation de script dans le cadre BTC.
Dans le cadre du BTC, il existe de nombreuses limites, mais celles-ci peuvent être surmontées par diverses méthodes ou technologies astucieuses. Par exemple, l’utilisation de Bit commitments peut briser la limitation d’état sans statut de l’UTXO, Taproot peut résoudre la limitation de l’espace de script, les sorties connectées peuvent surmonter la limitation du mode de consommation de l’UTXO, tandis que les smart contracts peuvent briser la limitation de la pré-authentification.
BTC utilise le modèle UTXO, où chaque UTXO est verrouillé dans un script de verrouillage qui définit les conditions requises pour dépenser cet UTXO. Il existe des limitations aux scripts BTC suivantes:
Actuellement, le script BTC est complètement sans état. Lors de l’exécution du script BTC, l’environnement d’exécution de chaque script est réinitialisé après son achèvement. Cela rend le script BTC incapable de prendre en charge nativement le partage de la même valeur x entre le script de contrainte 1 et le script de contrainte 2. Cependant, ce problème peut être résolu en utilisant certaines méthodes, l’idée principale étant de signer une valeur d’une certaine manière. Si une signature peut être générée pour une valeur, il est possible d’avoir un script BTC avec état. En d’autres termes, en vérifiant la signature de la valeur x dans les scripts 1 et 2, il est possible de s’assurer que la même valeur x est utilisée dans ces deux scripts. En cas de conflit de signatures, c’est-à-dire si deux valeurs différentes sont signées pour la même variable x, des sanctions peuvent être appliquées. Cette méthode est appelée Bit commitment.
Le principe promis par Bit est relativement simple. Chaque Bit correspond à deux valeurs de hachage différentes, hash0 et hash1. Si la valeur Bit à signer est 0, le pré-image de hash0 est révélé; Si la valeur Bit est 1, la pré-image de hash1 est révélée.
À titre d’exemple, pour un message Bit unique m ∈ {0,1}, l’engagement Bit correspondant déverrouille le script est composé uniquement de quelques pré-images : si la valeur de Bit est 0, alors le script de déverrouillage est preimage0 - “0xfa7fa5b1dea37d71a0b841967f6a3b119dbea140” ; si la valeur de Bit est 1, alors le script de déverrouillage est preimage1 - “0x47c31e611a3bd2f3a7a42207613046703fa27496”. Ainsi, grâce à l’engagement Bit, il est possible de contourner la limitation non étatique de l’UTXO, de mettre en œuvre des scripts BTC étatiques, et de rendre possible toute une gamme de nouvelles fonctionnalités intéressantes.
OP_HASH160
OP_DUP
0xf592e757267b7f307324f1e78b34472f8b6f46f3> // C’est hash1
OP_EQUAL
OP_DUP
OP_ROT
0x100b9f19ebd537fdc371fa1367d7ccc802dc2524> // Ceci est le hash0
OP_EQUAL
OP_BOOLOR
OP_VERIFY
// La valeur promise de Bit est maintenant sur la pile. Il peut être “0” ou “1”.
Actuellement, Bit s’engage à avoir deux façons de le réaliser :
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 qu’il y a un coût à l’introduction de l’État par le biais d’engagements de bits. Par conséquent, dans l’implémentation de BitVM2, le message est d’abord haché pour obtenir une valeur de hachage de 256 bits, puis un engagement de bit est effectué sur cette 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 softfork Taproot de BTC a été activée en novembre 2021 et comprend trois propositions : la signature Schnorr (BIP 340), Taproot (BIP 341) et TapScript (BIP 342). Cette mise à niveau introduit un nouveau type de transaction - Pay-to-Taproot (P2TR) transaction. En combinant les avantages de Taproot, MAST (Merkle Abstract Syntax Tree) et la signature Schnorr, les transactions P2TR peuvent créer un format de transaction plus privé, plus flexible et évolutif.
P2TR supporte deux modes de dépense : via le chemin de la clé secrète ou le chemin du script. Selon les spécifications de Taproot (BIP 341), lorsqu’une dépense est effectuée via le chemin du script, la longueur du chemin de Merkle correspondant ne peut pas dépasser 128. Cela signifie que le nombre de tapleaf dans taptree ne peut pas dépasser 2^128. Depuis la mise à niveau de SegWit en 2017, le réseau BTC mesure la taille des blocs en unités de poids, avec un maximum de 4 millions d’unités de poids (environ 4 Mo). Lorsqu’une sortie P2TR est dépensée via le chemin du script, seule un seul script tapleaf doit être révélé, ce qui signifie qu’il n’y a qu’un seul script tapleaf dans le bloc. Par conséquent, pour les transactions P2TR, la taille maximale du script correspondant à chaque tapleaf peut atteindre environ 4 Mo. Cependant, selon la politique par défaut de BTC, de nombreux nœuds ne transmettent que des transactions de moins de 400 Ko ; les transactions plus volumineuses nécessitent une collaboration avec les mineurs pour être incluses dans les blocs.
L’espace de script apporté par Taproot rend plus précieuse l’utilisation de codes opérationnels existants pour simuler des opérations cryptographiques telles que la multiplication et le hash. Lors de la construction de calculs vérifiables basés sur P2TR, la taille du script n’est plus limitée à 4 Mo, mais peut être fractionnée en plusieurs sous-fonctions réparties dans plusieurs tapleaves, ce qui permet de dépasser la limite d’espace de script de 4 Mo. En réalité, le vérificateur Groth16 Algorithme de BitVM2 actuel est de taille jusqu’à 2 Go. Cependant, il peut être fractionné et réparti dans environ 1000 tapleaves, et combiné avec l’engagement Bit pour contraindre la cohérence entre les entrées et les sorties de chaque sous-fonction, garantissant ainsi l’intégrité et la correction de l’ensemble du calcul.
Actuellement, le BTC propose deux modes de dépense natifs pour une seule sortie de transaction non dépensée (UTXO) : via un script ou une Clé publique. Ainsi, tant qu’une signature Clé publique correcte ou des conditions de script sont remplies, l’UTXO peut être dépensée. Deux UTXO peuvent être dépensées de manière indépendante et il n’est pas possible d’imposer des restrictions sur ces deux UTXO, ce qui signifie qu’il faut satisfaire des conditions supplémentaires pour les dépenser.
Cependant, le fondateur d’ARK, Burak, a intelligemment utilisé le drapeau SIGHASH pour réaliser une sortie de connecteur. En particulier, Alice peut créer une signature pour envoyer ses BTC à Bob. Comme une signature peut engager plusieurs entrées, Alice peut conditionner sa signature : elle n’est valide que si la deuxième entrée est consommée par la transaction Taketx. La deuxième entrée est appelée connecteur, elle relie UTXO A et UTXO B. En d’autres termes, la transaction Taketx n’est valide que si UTXO B n’est pas consommé par la transaction Challengetx. Ainsi, en détruisant la sortie du connecteur, on peut empêcher la validité de la transaction Taketx.
Figure 1: Schéma de sortie du connecteur
Dans le protocole BitVM2, la sortie du connecteur agit comme une fonction if…else. Une fois que la sortie du connecteur a été dépensée par une transaction, elle ne peut plus être dépensée par d’autres transactions, ce qui garantit son exclusivité. Dans le déploiement réel, pour permettre le cycle de challenge-réponse, des UTXO supplémentaires avec verrouillage temporel ont été introduits. De plus, la sortie du connecteur peut également être configurée avec différentes stratégies de dépense selon les besoins, par exemple permettre à l’une ou l’autre partie de dépenser dans le cas d’une transaction de défi, tandis que dans le cas d’une transaction de réponse, seul l’opérateur est autorisé à dépenser ou permettre à n’importe qui de dépenser après expiration du délai.
Pour l’instant, le script BTC limite principalement les conditions de déverrouillage, mais ne limite pas comment les sorties de transaction non dépensées (UTXO) peuvent être dépensées. Cela est dû au fait que le script BTC ne peut pas lire le contenu de la transaction elle-même, et ne peut donc pas réaliser l’introspection de la transaction. Si le script BTC pouvait inspecter n’importe quel contenu de la transaction (y compris les sorties), il pourrait alors implémenter des fonctionnalités de contrat.
Les contrats actuels peuvent être divisés en deux catégories :
preuve de validité et fraud proof peuvent tous deux être utilisés pour l’extension de couche 2 de BTC, les principales différences sont indiquées dans le tableau 2.
表 2:preuve de validité与fraud proof
En utilisant Bit Promises, Taproot, les pré-signatures et les sorties de connecteurs, il est possible de construire une preuve de fraude basée sur BTC. De plus, en introduisant des opérations de contrat (comme OP_CAT), il est également possible de construire une preuve de validité basée sur Taproot pour BTC. De plus, la preuve de fraude peut être divisée en preuve de fraude autorisée et preuve de fraude non autorisée en fonction de l’utilisation du système monter à bord par Bob. Dans la preuve de fraude autorisée, seuls certains groupes spécifiques peuvent défier Bob, tandis que dans la preuve de fraude non autorisée, n’importe quel tiers peut défier Bob. La sécurité de la preuve de fraude non autorisée est supérieure à celle de la preuve de fraude autorisée car elle réduit le risque de collusion entre les participants.
En fonction du nombre d’interactions de challenge-réponse entre Alice et Bob, la preuve de fraude peut être divisée en preuve de fraude à un seul tour et preuve de fraude à plusieurs tours, comme le montre la figure 2.
Figure 2: Preuve de fraude à un tour et preuve de fraude à plusieurs tours
Comme le montre le tableau 3, la preuve de fraude peut être réalisée à travers différents modèles d’interaction, y compris le modèle d’interaction en une seule étape et le modèle d’interaction en plusieurs étapes.
Tableau 3 : Interaction à un seul tour et interaction à plusieurs tours
Dans le paradigme d’extension Layer2 de BTC, BitVM1 utilise un mécanisme de preuve de fraude à plusieurs tours, tandis que BitVM2 utilise un mécanisme de preuve de fraude à un tour. Bitcoin-circle stark, quant à lui, utilise une preuve de validité. Parmi ces mécanismes, BitVM1 et BitVM2 peuvent être implémentés sans modifier le protocole BTC, tandis que bitcoin-circle stark nécessite l’introduction d’un nouvel OP_CODE OP_CAT.
Pour la plupart des tâches de calcul, le signet, le testnet et le mainnet de BTC ne prennent pas en charge complètement les scripts de 4 Mo, il est donc nécessaire d’utiliser la technique de fractionnement de script, c’est-à-dire de diviser le script de calcul complet en blocs de moins de 4 Mo et de les distribuer dans différents Tapleaf.
Comme le montre le tableau 3, le fraud proof à plusieurs tours est adapté à ceux qui souhaitent réduire les calculs d’arbitrage off-chain, ou qui ne peuvent pas localiser immédiatement le segment de calcul problématique. Comme son nom l’indique, le fraud proof à plusieurs tours nécessite une interaction à plusieurs tours entre les validateurs et les validateurs pour identifier le segment de calcul problématique, puis arbitrer en fonction de ces segments.
Le Livre blanc précoce de BitVM de Robin Linus (communément appelé BitVM1) a utilisé plusieurs preuves de fraude. En supposant que chaque période de défi dure une semaine et utilise une méthode de recherche binaire pour localiser le segment de calcul problématique, le délai de réponse au défi off-chain du validateur Groth16 pourrait s’étendre jusqu’à 30 semaines, ce qui entraînerait une faible réactivité. Bien qu’il existe actuellement des équipes travaillant sur des méthodes de recherche n-aire plus efficaces que la recherche binaire, leur réactivité reste nettement inférieure au cycle de preuve de fraude unique de 2 semaines.
Actuellement, plusieurs fraud proof dans BTC utilisent des défis autorisés, tandis qu’un seul fraud proof implémente une méthode sans défi autorisé, réduisant ainsi le risque de collusion entre les participants et renforçant la sécurité. Pour ce faire, Robin Linus a pleinement exploité les avantages de Taproot pour optimiser BitVM1, réduisant non seulement le nombre d’interactions à un tour, mais étendant également la méthode de défi de manière non autorisée, même si cela augmentait le coût du calcul d’arbitrage off-chain.
Dans ce modèle, la validation de la preuve de fraude ne nécessite qu’une seule interaction entre le fraudeur et les validateurs. Les validateurs n’ont besoin de lancer qu’un seul défi, tandis que le fraudeur n’a besoin que de répondre une fois. Dans sa réponse, le fraudeur doit fournir des preuves pour démontrer que ses calculs sont corrects. Si les validateurs trouvent des incohérences dans les preuves, le défi est réussi ; sinon, le défi échoue. Les caractéristiques de la preuve de fraude en une seule interaction sont présentées dans le tableau 3.
Figure 3: fraud proof à un seul tour
Le 15 août 2024, Robin Linus a publié un Livre blanc technique intitulé “BitVM2: Connecter BTC à la deuxième couche”, qui a mis en œuvre une méthode de bridges cross-chain utilisant une méthode de fraude proof à un seul tour similaire à celle illustrée dans la figure 3.
OP_CAT est une partie du langage de script de BTC lors de sa sortie, mais a été désactivé en 2010 en raison de failles de sécurité. Malgré cela, la communauté BTC a discuté pendant des années de la possibilité de réactiver OP_CAT. Actuellement, OP_CAT est attribué au numéro 347 et est activé sur le réseau signet de BTC.
La principale fonction de OP_CAT est de fusionner les deux éléments de la pile et de renvoyer le résultat sur la pile. Cette fonctionnalité ouvre de nouvelles possibilités pour les contrats sur BTC et les validateurs STARK :
Bien que la charge de calcul requise pour la preuve de validation soit beaucoup plus faible que celle de l’exécution directe du calcul d’origine f après la preuve SNARK/STARK, la quantité de scripts requise pour implémenter le validateur Algorithme dans un script BTC reste énorme. Actuellement, la taille des scripts des validateurs Groth16 et Fflonk optimisés dépasse tous les deux 2 Go en utilisant les opcodes BTC existants, tandis qu’un seul bloc BTC a une taille de seulement 4 Mo, ce qui rend impossible l’exécution du script de validation complet dans un seul bloc. Cependant, depuis la mise à niveau Taproot, BTC prend en charge l’exécution de scripts via tapleaf, ce qui permet de diviser le script de validation en plusieurs blocs, chacun étant construit comme un tapleaf pour construire un taptree. La cohérence entre les blocs peut être garantie par un engagement de bits.
Dans le cas du contrat OP_CAT, le vérificateur STARK peut être divisé en plusieurs transactions standard de moins de 400 Ko, ce qui permet de réaliser la validation complète de la preuve de validité STARK sans avoir besoin de coopérer avec des mineurs.
Ce chapitre se concentrera sur la technique de division du script BTC dans des conditions existantes, sans introduire ou activer de nouveaux opcodes.
Lors de la division de scripts, il est nécessaire de trouver un équilibre entre les informations suivantes :
Actuellement, les méthodes de scission de script peuvent être classées en trois catégories suivantes :
Par exemple, après plusieurs optimisations, la taille du script du validateur Groth16 est passée d’environ 7 Go à environ 1,26 Go. En plus de l’optimisation globale du calcul, chaque bloc peut également être optimisé individuellement pour tirer pleinement parti de l’espace de la pile. Par exemple, en introduisant un algorithme de table de recherche plus efficace et en chargeant et déchargeant dynamiquement la table de recherche, la taille du script de chaque bloc peut être encore réduite.
En raison des coûts de calcul et de l’environnement d’exécution des langages de programmation Web2, qui diffèrent complètement du script BTC, il n’est pas possible de simplement convertir les implémentations existantes de l’algorithme en script BTC. Par conséquent, il est nécessaire de prendre en compte des optimisations spécifiques au scénario BTC:
Cet article examine d’abord les limites du script BTC et discute de plusieurs solutions : utiliser les engagements BTC pour surmonter les limitations de l’UTXO, utiliser Taproot pour surmonter les limitations de l’espace de script, contourner les méthodes de dépense de l’UTXO en connectant les sorties, et résoudre les limitations de la présignature par le biais de contrats. Ensuite, l’article donne un aperçu complet des caractéristiques des preuves de fraude et de validité, y compris les caractéristiques des preuves de fraude avec et sans permission, les différences entre les preuves de fraude à un tour et à plusieurs tours, et les techniques de division de script BTC connexes.