bitcoinjs-lib icon indicating copy to clipboard operation
bitcoinjs-lib copied to clipboard

Can not sign for input #0 with the key

Open tanzile789 opened this issue 1 year ago • 1 comments

I don't know if creating a P2TR address like this is correct, and it won't be possible to sign in the end.Attached is my code. Could you please help me take a look

const keyPair = ECPair.makeRandom({ network: network }); const p2trSender = bitcoin.payments.p2tr({ pubkey: toXOnly(keyPair.publicKey), network }); const psbt = new bitcoin.Psbt({ network: network }) var totalInputValue = 0; for(var i in utxos){ totalInputValue += utxos[i].satoshi; psbt.addInput({ hash: utxos[i].txid, index: utxos[i].vout, witnessUtxo: { script: p2trSender.output, value: utxos[i].satoshi } }) } const changeValue = totalInputValue - receiverAmount - feeSatoshis; if (changeValue >= 546) { psbt.addOutput({ address: p2trSender.address, value: changeValue }) } psbt.addOutput({ address: senderAddress, value: receiverAmount - 100 }) for (let i = 0; i < utxos.length; i++) { psbt.signInput(i, keyPair); } psbt.finalizeAllInputs(); psbt.extractTransaction();

微信截图_20240103164403

tanzile789 avatar Jan 03 '24 08:01 tanzile789

Please check the integration tests and play around with it a bit first.

https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/taproot.spec.ts

Then let me know if you have any questions.

Taproot transactions are done differently compared to non-taproot.

junderw avatar Jan 03 '24 09:01 junderw

Used for signing, since the output and address are using a tweaked key

We must tweak the signer in the same way.

You can refer to this: https://github.com/bitcoinjs/bitcoinjs-lib/blob/master/test/integration/taproot.spec.ts#L51-L80

jasonandjay avatar Mar 14 '24 07:03 jasonandjay