aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIan Coleman <ian@iancoleman.io>2019-12-16 13:08:28 +1100
committerIan Coleman <ian@iancoleman.io>2019-12-16 13:27:15 +1100
commit5c203fab6ac25fc76e2b805b7709d9b06ccdd995 (patch)
treec95d6897e6e6a32be1adf8abc82986f3471d4397 /src
parent40d542ba58008762c71a304df03ef8c987cb6db5 (diff)
downloadBIP39-5c203fab6ac25fc76e2b805b7709d9b06ccdd995.tar.gz
BIP39-5c203fab6ac25fc76e2b805b7709d9b06ccdd995.tar.zst
BIP39-5c203fab6ac25fc76e2b805b7709d9b06ccdd995.zip
Add P2WSH and P2WSH-P2SH for bitcoin and testnet
Address generation still to come.
Diffstat (limited to 'src')
-rw-r--r--src/index.html2
-rw-r--r--src/js/index.js56
-rw-r--r--src/js/segwit-parameters.js56
3 files changed, 114 insertions, 0 deletions
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 @@
509 <select class="form-control bip141-semantics"> 509 <select class="form-control bip141-semantics">
510 <option value="p2wpkh">P2WPKH</option> 510 <option value="p2wpkh">P2WPKH</option>
511 <option value="p2wpkh-p2sh" selected>P2WPKH nested in P2SH</option> 511 <option value="p2wpkh-p2sh" selected>P2WPKH nested in P2SH</option>
512 <option value="p2wsh">P2WSH</option>
513 <option value="p2wsh-p2sh">P2WSH nested in P2SH</option>
512 </select> 514 </select>
513 </div> 515 </div>
514 </div> 516 </div>
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 @@
539 } 539 }
540 catch (e) {} 540 catch (e) {}
541 } 541 }
542 // try parsing using p2wsh network params
543 if ("p2wsh" in n) {
544 try {
545 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wsh);
546 return;
547 }
548 catch (e) {}
549 }
550 // try parsing using p2wsh-in-p2sh network params
551 if ("p2wshInP2sh" in n) {
552 try {
553 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wshInP2sh);
554 return;
555 }
556 catch (e) {}
557 }
542 } 558 }
543 // try the network params as currently specified 559 // try the network params as currently specified
544 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network); 560 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
@@ -681,6 +697,22 @@
681 } 697 }
682 catch (e) {} 698 catch (e) {}
683 } 699 }
700 // try parsing using p2wsh network params
701 if ("p2wsh" in n) {
702 try {
703 bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wsh);
704 return "";
705 }
706 catch (e) {}
707 }
708 // try parsing using p2wsh-in-p2sh network params
709 if ("p2wshInP2sh" in n) {
710 try {
711 bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wshInP2sh);
712 return "";
713 }
714 catch (e) {}
715 }
684 } 716 }
685 // try the network params as currently specified 717 // try the network params as currently specified
686 try { 718 try {
@@ -968,6 +1000,14 @@
968 (bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh-p2sh"); 1000 (bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh-p2sh");
969 } 1001 }
970 1002
1003 function p2wshSelected() {
1004 return bip141TabSelected() && DOM.bip141semantics.val() == "p2wsh";
1005 }
1006
1007 function p2wshInP2shSelected() {
1008 return (bip141TabSelected() && DOM.bip141semantics.val() == "p2wsh-p2sh");
1009 }
1010
971 function TableRow(index, isLast) { 1011 function TableRow(index, isLast) {
972 1012
973 var self = this; 1013 var self = this;
@@ -979,6 +1019,8 @@
979 var segwitAvailable = networkHasSegwit(); 1019 var segwitAvailable = networkHasSegwit();
980 var isP2wpkh = p2wpkhSelected(); 1020 var isP2wpkh = p2wpkhSelected();
981 var isP2wpkhInP2sh = p2wpkhInP2shSelected(); 1021 var isP2wpkhInP2sh = p2wpkhInP2shSelected();
1022 var isP2wsh = p2wshSelected();
1023 var isP2wshInP2sh = p2wshInP2shSelected();
982 1024
983 function init() { 1025 function init() {
984 calculateValues(); 1026 calculateValues();
@@ -1109,6 +1151,14 @@
1109 var scriptpubkey = bitcoinjs.bitcoin.script.scriptHash.output.encode(addressbytes); 1151 var scriptpubkey = bitcoinjs.bitcoin.script.scriptHash.output.encode(addressbytes);
1110 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network) 1152 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
1111 } 1153 }
1154 else if (isP2wsh) {
1155 // TODO
1156 address = "";
1157 }
1158 else if (isP2wshInP2sh) {
1159 // TODO
1160 address = "";
1161 }
1112 } 1162 }
1113 1163
1114 if ((networks[DOM.network.val()].name == "CRW - Crown")) { 1164 if ((networks[DOM.network.val()].name == "CRW - Crown")) {
@@ -1794,6 +1844,12 @@
1794 else if (p2wpkhInP2shSelected() && "p2wpkhInP2sh" in network) { 1844 else if (p2wpkhInP2shSelected() && "p2wpkhInP2sh" in network) {
1795 network = network.p2wpkhInP2sh; 1845 network = network.p2wpkhInP2sh;
1796 } 1846 }
1847 else if (p2wshSelected() && "p2wsh" in network) {
1848 network = network.p2wsh;
1849 }
1850 else if (p2wshInP2shSelected() && "p2wshInP2sh" in network) {
1851 network = network.p2wshInP2sh;
1852 }
1797 } 1853 }
1798 1854
1799 function lastIndexInTable() { 1855 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 = {
56 wif: 0xef 56 wif: 0xef
57}; 57};
58 58
59// p2wsh
60
61bitcoinjs.bitcoin.networks.bitcoin.p2wsh = {
62 baseNetwork: "bitcoin",
63 messagePrefix: '\x18Bitcoin Signed Message:\n',
64 bech32: 'bc',
65 bip32: {
66 public: 0x02aa7ed3,
67 private: 0x02aa7a99
68 },
69 pubKeyHash: 0x00,
70 scriptHash: 0x05,
71 wif: 0x80
72};
73
74bitcoinjs.bitcoin.networks.testnet.p2wsh = {
75 baseNetwork: "testnet",
76 messagePrefix: '\x18Bitcoin Signed Message:\n',
77 bech32: 'tb',
78 bip32: {
79 public: 0x02575483,
80 private: 0x02575048
81 },
82 pubKeyHash: 0x6f,
83 scriptHash: 0xc4,
84 wif: 0xef
85};
86
87// p2wsh in p2sh
88
89bitcoinjs.bitcoin.networks.bitcoin.p2wshInP2sh = {
90 baseNetwork: "bitcoin",
91 messagePrefix: '\x18Bitcoin Signed Message:\n',
92 bech32: 'bc',
93 bip32: {
94 public: 0x0295b43f,
95 private: 0x0295b005
96 },
97 pubKeyHash: 0x00,
98 scriptHash: 0x05,
99 wif: 0x80
100};
101
102bitcoinjs.bitcoin.networks.testnet.p2wshInP2sh = {
103 baseNetwork: "testnet",
104 messagePrefix: '\x18Bitcoin Signed Message:\n',
105 bech32: 'tb',
106 bip32: {
107 public: 0x024289ef,
108 private: 0x024285b5
109 },
110 pubKeyHash: 0x6f,
111 scriptHash: 0xc4,
112 wif: 0xef
113};
114
59bitcoinjs.bitcoin.networks.litecoin.p2wpkh = { 115bitcoinjs.bitcoin.networks.litecoin.p2wpkh = {
60 baseNetwork: "litecoin", 116 baseNetwork: "litecoin",
61 messagePrefix: '\x19Litecoin Signed Message:\n', 117 messagePrefix: '\x19Litecoin Signed Message:\n',