Vérifier l'adresse et le message à l'aide de la clé publique, de l'adresse et de la signature
bitcoinjs-message utilise un processus de signature traditionnel qui signe simplement le message avec le préfixe (s'il n'est pas fourni) x18Bitcoin Signed Message :n. Ce type de schéma de signature est courant mais présente des limites car il ne prend en charge que p2pkh. Il existe des implémentations qui prennent en charge d'autres types d'adresses avec ce schéma (bitcoinjs-message prend également en charge p2wpkh et p2sh-p2wpkh, mais pas p2tr), mais il n'y a pas de norme stricte pour cela.
BIP322 suggère une nouvelle façon de signer un schéma, dans laquelle une transaction virtuelle est requise pour signer et vérifier tous les types d'adresses, tandis que p2pkh utilise un processus de signature traditionnel. Cependant, à ma connaissance, il est encore en développement et n'est pas encore implémenté dans Bitcoin-Core.
Vous trouverez ci-dessous comment mettre en œuvre.
importer * en tant que bitcoin depuis 'bitcoin-sdk-js' const keyPair = wait bitcoin.wallet.generateKeyPair(); const privkey = keyPair.privateKey; const pubkey = keyPair.publicKey; const LegacyAddress = attendre Bitcoin.address.generateAddress (pubkey, 'legacy', ); const segwitAddress = wait bitcoin.address.generateAddress( pubkey, 'segwit', ); const tapAddress = wait bitcoin.address.generateAddress( ( wait bitcoin.tapscript.getTapTweakedPubkey( pubkey.slice(2), wait bitcoin.tapscript.getTapTweak(pubkey.slice(2)), ).tweakedPubKey, 'taproot', ) ; const msg = 'message que vous souhaitez signer'; // Quand const sigLegacy = wait bitcoin.crypto.signMessage( msg, privkey, LegacyAddress, ); const sigSegwit = wait bitcoin.crypto.signMessage( msg, privkey, segwitAddress, ); const sigTap = attendre bitcoin.crypto.signMessage(msg, clé privée, tapAddress); // Puis assert.strictEqual( wait bitcoin.crypto.verifyMessage(msg, sigLegacy, LegacyAddress), true, ); assert.strictEqual( wait bitcoin.crypto.verifyMessage(msg, sigSegwit, segwitAddress), true, ); assert.strictEqual( wait bitcoin.crypto.verifyMessage(msg, sigTap, tapAddress), true, );
ps Je pense que le site Web auquel vous faites référence pourrait avoir un problème avec le codage non-ASCII, je recommande ce site Web pour tester la signature de messages traditionnelle.
