Contrat verrouillé dans le temps de hachage : Comment signer P2WSH PSBT avec sats-connect ?


J'ai créé un script P2WSH financé, qui est un HTLC. Je souhaite maintenant créer un PSBT qui sera signé par un autre portefeuille pour retirer les fonds.

Le problème est que la signature PSBT génère l'erreur bitcoinlib-js suivante  : le script d'entrée n'a pas de pubKey. Je ne sais pas pourquoi ni comment ajouter correctement cette clé publique au PSBT.

Ce qui suit est un aperçu détaillé des étapes que je prends pour créer, financer et (à défaut) racheter le HTLC.

Contrat verrouillé dans le temps de hachage : Comment signer P2WSH PSBT avec sats-connect ?

Adresse  : Clé publique  :

Script pour créer le HTLC  :

testnet'testnet : bitcoin ' ' '

secretHash,

recipientHash, // Hashed recipient public key

bitcoin.script.number.encode(lockduration),

senderHash, // Hashed sender public key

// Witness version 0

redeemScriptHash

réseau }adresse utilisation createHTLC( 'mysecret', 1, // temps de verrouillage en blocs «  »,  » 7a5ad3ec6a71d44bd79″, 'testnet' );

Cela crée avec succès la transaction P2WSH et donne le résultat suivant à l'écran

Création d'un script HTLC  ! ————————————————- P2WSH Adresse de dépôt Bitcoin pour HTLC  : Script de témoin Hex  : Utiliser le numéro de bloc : 1 Secret (pour dépenser) : mysec ret SHA256 (Secret) (pour la création HTLC) : ScriptPubKey Hex : ———– ————————————–

Ensuite, je finance le script via xverse en envoyant du bitcoin directement à

space/testnet/tx/

Le ScriptPubKey sur mempool.space semble correspondre au mien

Il est alors temps de créer le PSBT. Je ne vois pas immédiatement de problème avec la façon dont je crée ce PSBT. Dois-je ajouter la clé publique quelque part ?  :

testnet'testnet : bitcoin ' ' '

secretHash,

recipientHash, // Hashed recipient public key

bitcoin.script.number.encode(lockduration),

senderHash, // Hashed sender public key

'addInput({ hash: htlcTxId valeur : rembourséAmount WitnessScript  : racheScriptaddOutput({ adresse  : destinataireAddresssetVersion(2) utilisation (remplissez les valeurs réelles) createSpendPSBT( « mysecret », 0, «  »,  » « , 0, 1000, «  »,  » « , «  », « testnet », ); //createSpendPSBT (secret, lockduration, scriptPubKey, htlcTxId, htlcOutputIndex, rembourséAmount, destinatairePubKey, senderPubKey, destinataireAddress, networkType)

Cela me donne le PSBT suivant  :

+3R1UCjZ59ivvArJkc/+7bfxvA0QDjwJy+AAAAAAD+////AQAAAAAAAAAAIlEgmI++ZpSLIz0whDVrEu+MAAAAAAAAEBK+gDAAAAAAAAIgAgpgjnxr +/ z/axpo34GiIrAAA

Lorsque je le décode, afin de pouvoir inspecter le contenu, j'obtiens ce qui suit

« hash » :  » c57a », « version » : 2, « taille » : 94, « vsize » : 94, « poids » : 376, « locktime » : 0, « vin » : [

« txid » : «  »,

« vout » : 0,

« asm » : «  »,

« hex » : «  »

« sequence » : 4294967294

] »vout » : [

« value » : 0.00000000,

« n » : 0,

« asm » : « 1 « ,

« desc » : « rawtr()#4xpnet5r »,

« hex » : «  »,

« address » : «  »,

]

« global_xpubs »  : [

« propriétaire » : [

« entrées » : [

« amount » : 0.00001000,

« asm » : « 0 « ,

« desc » : « addr()#wjcfmgw8 »,

« hex » : «  »,

« address » : «  »,

« hex » : «  »,

« type » : « nonstandard »

] »les sorties » : [

Quand je regarde la partie entrées du PSBT, je peux voir qu'il y a des entrées avec mes fonds HTLC et un scriptPubKey. N'est-ce pas la clé publique dont l'erreur se plaint n'existe pas ?

À partir de là, j'ai quand même essayé de le signer en utilisant sats-connect  :

Testnet' psbtBase64 : `+3R1UCjZ59ivvArJkc/+7bfxvA0QDjwJy+AAAAAD+////AQAAAAAAAAAAIlE gmI++ZpSLIz0whDVrEu +MAAAAAAAEBK++/axpo34G /axpo34GiIrAAA`, Broadcast  : false, // Définissez sur true si vous souhaitez diffuser après avoir signé inputsToSign  : [

address: «  », //should this be the address of signer or the address of the input?

}log(' onCancel : () = essayez { wait signTransaction (signPsbtOptions)error('

et j'ai rencontré l'erreur suivante

Le script d'entrée n'a pas de pubKey

Ma question

Pourquoi le script d'entrée n'a-t-il pas de clé publique, et n'est-ce pas le but de scriptPubKey ? Comment fournir correctement la clé publique pour signer ce psbt ?