From aebda7ec80d3bce49998f5b621f8bcb8afa7e2da Mon Sep 17 00:00:00 2001 From: sairajzero Date: Thu, 24 Nov 2022 03:25:52 +0530 Subject: [PATCH] btcOperator v1.0.14: multisig-bech32 (p2wsh) --- btcOperator.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/btcOperator.js b/btcOperator.js index 0f2786a..d1f57fa 100644 --- a/btcOperator.js +++ b/btcOperator.js @@ -1,4 +1,4 @@ -(function (EXPORTS) { //btcOperator v1.0.13c +(function (EXPORTS) { //btcOperator v1.0.14 /* BTC Crypto and API Operator */ const btcOperator = EXPORTS; @@ -102,7 +102,7 @@ if (!addr) return undefined; let type = coinjs.addressDecode(addr).type; - if (["standard", "multisig", "bech32"].includes(type)) + if (["standard", "multisig", "bech32", "multisigBech32"].includes(type)) return type; else return false; @@ -398,6 +398,7 @@ return reject("Insufficient Balance"); let addr = senders[rec_args.n], rs = redeemScripts[rec_args.n]; + let addr_type = coinjs.addressDecode(addr).type; let size_per_input = _sizePerInput(addr, rs); fetch_api(`get_tx_unspent/BTC/${addr}`).then(result => { let utxos = result.data.txs; @@ -408,14 +409,14 @@ var script; if (!rs || !rs.length) //legacy script script = utxos[i].script_hex; - else if (((rs.match(/^00/) && rs.length == 44)) || (rs.length == 40 && rs.match(/^[a-f0-9]+$/gi))) { - //redeemScript for segwit/bech32 + else if (((rs.match(/^00/) && rs.length == 44)) || (rs.length == 40 && rs.match(/^[a-f0-9]+$/gi)) || addr_type === 'multisigBech32') { + //redeemScript for segwit/bech32 and multisig (bech32) let s = coinjs.script(); s.writeBytes(Crypto.util.hexToBytes(rs)); s.writeOp(0); s.writeBytes(coinjs.numToBytes((utxos[i].value * SATOSHI_IN_BTC).toFixed(0), 8)); script = Crypto.util.bytesToHex(s.buffer); - } else //redeemScript for multisig + } else //redeemScript for multisig (segwit) script = rs; tx.addinput(utxos[i].txid, utxos[i].output_no, script, 0xfffffffd /*sequence*/); //0xfffffffd for Replace-by-fee //update track values