From cb21c7f84b9116283c605838634794b398f5d378 Mon Sep 17 00:00:00 2001 From: tripathyr Date: Mon, 17 Oct 2022 13:48:21 +0530 Subject: [PATCH] decode of bech32multisig added --- lib_btc.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/lib_btc.js b/lib_btc.js index dd64425..b26255e 100644 --- a/lib_btc.js +++ b/lib_btc.js @@ -1306,6 +1306,34 @@ return r; } + /* decode the redeemscript of a multisignature transaction for Bech32*/ + r.decodeRedeemScriptBech32 = function (script) { + var r = false; + try { + var s = coinjs.script(Crypto.util.hexToBytes(script)); + if ((s.chunks.length >= 3) && s.chunks[s.chunks.length - 1] == 174) { //OP_CHECKMULTISIG + r = {}; + r.signaturesRequired = s.chunks[0] - 80; + var pubkeys = []; + for (var i = 1; i < s.chunks.length - 2; i++) { + pubkeys.push(Crypto.util.bytesToHex(s.chunks[i])); + } + r.pubkeys = pubkeys; + var multi = coinjs.pubkeys2MultisigAddressBech32(pubkeys, r.signaturesRequired); + r.address = multi['address']; + r.type = 'multisig__'; // using __ for now to differentiat from the other object .type == "multisig" + var rs = Crypto.util.bytesToHex(s.buffer); + r.redeemscript = rs; + + } + + } catch (e) { + // console.log(e); + r = false; + } + return r; + } + /* create output script to spend */ r.spendToScript = function (address) { var addr = coinjs.addressDecode(address);