Multi-signature : Comment utiliser « addDummySigs » en Golang pour envoyer des satoshis depuis un script multisig p2tr ?
Chapô : Un développeur rencontre des problèmes de signature lors de la création d'un script Bitcoin multisig. Malgré des efforts pour implémenter une solution en Go, les signatures semblent invalides lorsqu'elles sont envoyées à bitcoind. Le code JavaScript utilisé fonctionne parfaitement, soulevant des questions sur l'implémentation en Go.
Le développement d’un script multisig avec Bitcoin
Un script de racine pivotante multisig 2 sur 3 a été créé à l'aide de bitcoinjs-lib. Ce script utilise plusieurs clés publiques pour autoriser les transactions, permettant ainsi une sécurité accrue. La logique du script est construite via un ScriptBuilder, qui ajoute les clés publiques et définit les opérations nécessaires.
Dans cet exemple, le constructeur s'assure que la première clé publique est ajoutée avec la vérification de signature initiale, suivie par les autres clés utilisant des opérations supplémentaires pour vérifier la validité des signatures.
Problèmes rencontrés lors de la signature dans Go
Après avoir construit le script et tenté d'envoyer des Satoshis à partir de celui-ci, le développeur a rencontré des erreurs indiquant « signatures schnorr invalides » lors de l'envoi à bitcoind. Un extrait du code Golang montre comment il a essayé d'implémenter cette fonctionnalité :
func TestGenTapscript(t *testing.T) { // Code pertinent... }
Malgré ses tentatives pour générer une transaction valide avec un UTXO (Output Non Dépensé) par le biais d'une structure PSBT (Partially Signed Bitcoin Transaction), il n'a pas réussi à obtenir un résultat satisfaisant.
Comparaison entre Go et JavaScript pour résoudre le problème
En parallèle, il a été noté que le même processus fonctionnait correctement dans un environnement JavaScript. En effet, une comparaison entre tapscript.tapleafHash en Golang et leafHash en JS a révélé que ces deux valeurs étaient identiques. Cependant, malgré cela, les sorties avant et après finalisation du PSBT différaient fortement.
Voici un extrait du code JavaScript qui fonctionnait :
const psbt = bitcoin.Psbt.fromHex(signedPsbtHex); // Autres lignes...
Cette situation soulève des interrogations quant aux différences potentielles entre les bibliothèques utilisées ou aux spécificités inhérentes au langage lui-même.
Les implications pour le développement futur
Les difficultés rencontrées mettent en lumière l'importance cruciale d'une bonne gestion des signatures dans les scripts multisignatures Bitcoin. Les résultats contradictoires entre Go et JavaScript pourraient encourager davantage d'explorations approfondies sur ce sujet afin d’identifier clairement où se situent les erreurs potentielles dans l'implémentation en Go.
Il serait bénéfique que la communauté examine ces divergences afin d'améliorer non seulement leur propre compréhension mais aussi celle de tous ceux qui travaillent avec ces technologies critiques dans l'écosystème Bitcoin.
Cet article met en avant les enjeux techniques liés au développement autour des scripts Bitcoin multilateraux tout en soulignant l’importance du partage et de la collaboration entre développeurs travaillant avec différentes technologies.
