我正在尝试使用 Bitcoinlib-js 库创建交易。我坚持签署交易,因为它似乎witnessUtxo
是必需的,我很困惑如何获得这个价值或从哪里获得它。对于 segwit,我将其设置为 UTXO vout 中的最后一个scriptPubKey
,但出现以下错误。
对于非隔离见证,我只传递 UTXO rawTransaction。
这是我得到的错误
scriptPubKey = ************************************
(node:17) UnhandledPromiseRejectionWarning: Error: Can not sign for this input with the key ************************************************
at checkScriptForPubkey (/app/node_modules/bitcoinjs-lib/src/psbt.js:800:11)
at getHashAndSighashType (/app/node_modules/bitcoinjs-lib/src/psbt.js:927:3)
at Psbt.signInput (/app/node_modules/bitcoinjs-lib/src/psbt.js:522:35)
at Handshake.<anonymous> (/app/main.js:104:12)
at processTicksAndRejections (internal/process/task_queues.js:95:5)
(Use `node --trace-warnings ...` to show where the warning was created)
这是代码。
const utxoTransaction = (await axios.get(`https://url/${utxos[j].txid}`)).data;
const scriptPubKey = utxoTransaction.vout[utxoTransaction.vout.length - 1].scriptPubKey.hex;
const isSegwit = utxoTransaction.hex.substring(8, 12) === '0001';
if (isSegwit) {
psbt.addInput({
hash: utxos[j].txid,
index: utxos[j].vout,
witnessUtxo: {
script: Buffer.from(scriptPubKey, 'hex'),
value: utxos[j].amount * 100000000 // value in satoshi
},
})
} else {
// add non-segwit transaction input
psbt.addInput({
hash: utxos[j].txid,
index: utxos[j].vout,
nonWitnessUtxo: Buffer.from(utxoTransaction.hex, 'hex'),
})
}