From 5c203fab6ac25fc76e2b805b7709d9b06ccdd995 Mon Sep 17 00:00:00 2001 From: Ian Coleman Date: Mon, 16 Dec 2019 13:08:28 +1100 Subject: Add P2WSH and P2WSH-P2SH for bitcoin and testnet Address generation still to come. --- src/index.html | 2 ++ src/js/index.js | 56 +++++++++++++++++++++++++++++++++++++++++++++ src/js/segwit-parameters.js | 56 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 114 insertions(+) (limited to 'src') diff --git a/src/index.html b/src/index.html index 36e238f..61fe022 100644 --- a/src/index.html +++ b/src/index.html @@ -509,6 +509,8 @@ diff --git a/src/js/index.js b/src/js/index.js index 0b34ade..db47412 100644 --- a/src/js/index.js +++ b/src/js/index.js @@ -539,6 +539,22 @@ } catch (e) {} } + // try parsing using p2wsh network params + if ("p2wsh" in n) { + try { + bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wsh); + return; + } + catch (e) {} + } + // try parsing using p2wsh-in-p2sh network params + if ("p2wshInP2sh" in n) { + try { + bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wshInP2sh); + return; + } + catch (e) {} + } } // try the network params as currently specified bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network); @@ -681,6 +697,22 @@ } catch (e) {} } + // try parsing using p2wsh network params + if ("p2wsh" in n) { + try { + bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wsh); + return ""; + } + catch (e) {} + } + // try parsing using p2wsh-in-p2sh network params + if ("p2wshInP2sh" in n) { + try { + bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wshInP2sh); + return ""; + } + catch (e) {} + } } // try the network params as currently specified try { @@ -968,6 +1000,14 @@ (bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh-p2sh"); } + function p2wshSelected() { + return bip141TabSelected() && DOM.bip141semantics.val() == "p2wsh"; + } + + function p2wshInP2shSelected() { + return (bip141TabSelected() && DOM.bip141semantics.val() == "p2wsh-p2sh"); + } + function TableRow(index, isLast) { var self = this; @@ -979,6 +1019,8 @@ var segwitAvailable = networkHasSegwit(); var isP2wpkh = p2wpkhSelected(); var isP2wpkhInP2sh = p2wpkhInP2shSelected(); + var isP2wsh = p2wshSelected(); + var isP2wshInP2sh = p2wshInP2shSelected(); function init() { calculateValues(); @@ -1109,6 +1151,14 @@ var scriptpubkey = bitcoinjs.bitcoin.script.scriptHash.output.encode(addressbytes); address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network) } + else if (isP2wsh) { + // TODO + address = ""; + } + else if (isP2wshInP2sh) { + // TODO + address = ""; + } } if ((networks[DOM.network.val()].name == "CRW - Crown")) { @@ -1794,6 +1844,12 @@ else if (p2wpkhInP2shSelected() && "p2wpkhInP2sh" in network) { network = network.p2wpkhInP2sh; } + else if (p2wshSelected() && "p2wsh" in network) { + network = network.p2wsh; + } + else if (p2wshInP2shSelected() && "p2wshInP2sh" in network) { + network = network.p2wshInP2sh; + } } function lastIndexInTable() { diff --git a/src/js/segwit-parameters.js b/src/js/segwit-parameters.js index de4d634..83d49da 100644 --- a/src/js/segwit-parameters.js +++ b/src/js/segwit-parameters.js @@ -56,6 +56,62 @@ bitcoinjs.bitcoin.networks.testnet.p2wpkhInP2sh = { wif: 0xef }; +// p2wsh + +bitcoinjs.bitcoin.networks.bitcoin.p2wsh = { + baseNetwork: "bitcoin", + messagePrefix: '\x18Bitcoin Signed Message:\n', + bech32: 'bc', + bip32: { + public: 0x02aa7ed3, + private: 0x02aa7a99 + }, + pubKeyHash: 0x00, + scriptHash: 0x05, + wif: 0x80 +}; + +bitcoinjs.bitcoin.networks.testnet.p2wsh = { + baseNetwork: "testnet", + messagePrefix: '\x18Bitcoin Signed Message:\n', + bech32: 'tb', + bip32: { + public: 0x02575483, + private: 0x02575048 + }, + pubKeyHash: 0x6f, + scriptHash: 0xc4, + wif: 0xef +}; + +// p2wsh in p2sh + +bitcoinjs.bitcoin.networks.bitcoin.p2wshInP2sh = { + baseNetwork: "bitcoin", + messagePrefix: '\x18Bitcoin Signed Message:\n', + bech32: 'bc', + bip32: { + public: 0x0295b43f, + private: 0x0295b005 + }, + pubKeyHash: 0x00, + scriptHash: 0x05, + wif: 0x80 +}; + +bitcoinjs.bitcoin.networks.testnet.p2wshInP2sh = { + baseNetwork: "testnet", + messagePrefix: '\x18Bitcoin Signed Message:\n', + bech32: 'tb', + bip32: { + public: 0x024289ef, + private: 0x024285b5 + }, + pubKeyHash: 0x6f, + scriptHash: 0xc4, + wif: 0xef +}; + bitcoinjs.bitcoin.networks.litecoin.p2wpkh = { baseNetwork: "litecoin", messagePrefix: '\x19Litecoin Signed Message:\n', -- cgit v1.2.3