javascript : Comment fonctionnent les descripteurs avec miniscript dans la bibliothèque bitcoinerLab ?


Ce que je veux, c’est pouvoir dépenser les fonds d’une adresse, soit avec sa clé privée, soit avec la clé privée d’une autre adresse que je désigne dans la politique.

Si je comprends bien, cela fonctionne comme ceci :

Lors de l’utilisation du descripteur, il fournit une adresse où le miniscript est stocké, ce qui m’indique comment les UTXO associés à cette adresse peuvent être dépensés.

Ensuite, si je veux dépenser les UTXO associés à cette adresse, je dois créer une transaction avec PSBT où je dois créer le même descripteur que j’ai fait lors de la génération de l’adresse que j’ai expliquée plus tôt, et la signer avec une clé privée, soit celle de l’adresse elle-même ou celle désignée dans la police, me permettant ainsi de dépenser les fonds de l’autre adresse.

javascript : Comment fonctionnent les descripteurs avec miniscript dans la bibliothèque bitcoinerLab ?

C’est le raisonnement que j’ai, mais je pense qu’il est incorrect. Par conséquent, j’ai les questions suivantes :

Comment fonctionnent les descripteurs ? Je sais plus ou moins ce qu’ils sont, mais je ne sais pas comment ils fonctionnent par programmation, c’est-à-dire comment les utiliser pour déverrouiller une sortie contenant un descripteur et un miniscript, à partir d’une nouvelle transaction que je crée.

Plus précisément dans CODE 1, je ne comprends pas comment fonctionne le paramètre signersPubKey  :

réseau, signersPubKeys  :

and(pk(@unvaultKey) Le CODE 2 SignersPubKey ne fait vraiment rien

mais nous ne le comprenons pas parfaitement :

Par conséquent, comment fonctionne le champ SignersPubKey lors de la création d’une adresse via le descripteur, et comment fonctionne-t-il également lors de la création de la transaction ?

CODE 1, pour créer une adresse avec miniscript

réseaux} à partir de ‘bitcoinjs-lib’  importer * en tant que descripteurs de ‘@bitcoinerlab/descriptors’  import { generateMnemonic const { DescripteurDescriptorsFactory(secp256k1) réseau const = réseauxand(pk(@unvaultKey) const WSH_KEY_PATH = `/0/0` toWIF()}`) const unvaultMasterNode = BIP32toWIF()}`) issane } = compilePolicy(POLICY) const unvaultKey = unvaultMasterNodepublicKey const wshExpression = `wsh(${miniscript descriptors originPath: WSH_ORIGIN_PATHreplace(‘@emergencyKey’ console const wshDescriptor = nouveau Descripteur({ expression  : wshExpression, réseau, signersPubKeys  :

console essayez { fstxt »join( ‘\n’)} `)error(err)

CODE 2, pour créer une transaction qui dépense le solde de l’adresse précédente

réseaux} à partir de ‘bitcoinjs-lib’  importer * en tant que descripteurs de ‘@bitcoinerlab/descriptors’  BIP32DescriptorsFactory(secp256k1)testnet const EXPLORER = ‘https://blockstreamtxt » // Analyser les données et extraire les valeurs const lines = data const unvaultKey = Buffernetwork)json()text() const wshDescriptor = nouveau Descripteur({ expression  : wshExpression, réseau, signersPubKeys  :

wshDescriptor txHex psbt toAddress :  » //Signez maintenant le PSBT if (EMERGENCY_RECOVERY) descriptors ecpair : emergencyPair }) masterNode  : unvaultMasterNode }) psbt }) { méthode  : ‘POST’text()toHex()}`) }