]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/commitdiff
Generate addresses for P2WSH and P2WSH-P2SH
authorIan Coleman <ian@iancoleman.io>
Tue, 17 Dec 2019 00:44:54 +0000 (11:44 +1100)
committerIan Coleman <ian@iancoleman.io>
Tue, 17 Dec 2019 00:46:07 +0000 (11:46 +1100)
src/index.html
src/js/index.js
tests/spec/tests.js

index 61fe02238583cfdb3f9fee73b88b55888fe306bb..64c25f4cc205578c9d3445ce5801b77d4c2e5084 100644 (file)
                                             <select class="form-control bip141-semantics">
                                                 <option value="p2wpkh">P2WPKH</option>
                                                 <option value="p2wpkh-p2sh" selected>P2WPKH nested in P2SH</option>
-                                                <option value="p2wsh">P2WSH</option>
-                                                <option value="p2wsh-p2sh">P2WSH nested in P2SH</option>
+                                                <option value="p2wsh">P2WSH (1-of-1 multisig)</option>
+                                                <option value="p2wsh-p2sh">P2WSH nested in P2SH (1-of-1 multisig)</option>
                                             </select>
                                         </div>
                                     </div>
index db4741256e30ba66b0873800013db5333f364793..5fb0c478a19e17bb57487d7244afa3cb327f751e 100644 (file)
                         address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
                     }
                     else if (isP2wsh) {
-                        // TODO
-                        address = "";
+                        // https://github.com/bitcoinjs/bitcoinjs-lib/blob/v3.3.2/test/integration/addresses.js#L71
+                        // This is a 1-of-1
+                        var witnessScript = bitcoinjs.bitcoin.script.multisig.output.encode(1, [key.getPublicKeyBuffer()]);
+                        var scriptPubKey = bitcoinjs.bitcoin.script.witnessScriptHash.output.encode(bitcoinjs.bitcoin.crypto.sha256(witnessScript));
+                        address = bitcoinjs.bitcoin.address.fromOutputScript(scriptPubKey, network);
                     }
                     else if (isP2wshInP2sh) {
-                        // TODO
-                        address = "";
+                        // https://github.com/bitcoinjs/bitcoinjs-lib/blob/v3.3.2/test/integration/transactions.js#L183
+                        // This is a 1-of-1
+                        var witnessScript = bitcoinjs.bitcoin.script.multisig.output.encode(1, [key.getPublicKeyBuffer()]);
+                        var redeemScript = bitcoinjs.bitcoin.script.witnessScriptHash.output.encode(bitcoinjs.bitcoin.crypto.sha256(witnessScript));
+                        var scriptPubKey = bitcoinjs.bitcoin.script.scriptHash.output.encode(bitcoinjs.bitcoin.crypto.hash160(redeemScript));
+                        address = bitcoinjs.bitcoin.address.fromOutputScript(scriptPubKey, network)
                     }
                 }
 
index fc71353e330b0460a2c15046a71a4898e0354e0e..bbc1f570207a75c8aefdf71fea80ff3b059b203f 100644 (file)
@@ -3701,7 +3701,7 @@ it('Can generate BIP141 addresses with P2WSH semanitcs', function(done) {
     driver.executeScript(function() {
         $(".bip141-semantics option[selected]").removeAttr("selected");
         $(".bip141-semantics option").filter(function(i,e) {
-            return $(e).html() == "P2WSH";
+            return $(e).html() == "P2WSH (1-of-1 multisig)";
         }).prop("selected", true);
         $(".bip141-semantics").trigger("change");
     });
@@ -3712,8 +3712,10 @@ it('Can generate BIP141 addresses with P2WSH semanitcs', function(done) {
         .getAttribute("value")
         .then(function(rootKey) {
             expect(rootKey).toBe("ZprvAhadJRUYsNge9uHspaggavxU1BUQ8QwfT4Z9UGq5sKF2mSt1mVy8EckLAaoBdmLHyP5eYDJ3LxtmzMNnLg2MRFe7QN2ueF4NCH4s5PrCDR6");
-            // TODO check first address
-            done();
+            getFirstAddress(function(address) {
+                expect(address).toBe("bc1q2qhee847pv438tgg8hc7mjy38n8dklleshettn344l0tgs0kj5hskz9p9r");
+                done();
+            });
         })
     });
 });
@@ -3725,7 +3727,7 @@ it('Can generate BIP141 addresses with P2WSH-in-P2SH semanitcs', function(done)
     driver.executeScript(function() {
         $(".bip141-semantics option[selected]").removeAttr("selected");
         $(".bip141-semantics option").filter(function(i,e) {
-            return $(e).html() == "P2WSH nested in P2SH";
+            return $(e).html() == "P2WSH nested in P2SH (1-of-1 multisig)";
         }).prop("selected", true);
         $(".bip141-semantics").trigger("change");
     });
@@ -3736,8 +3738,10 @@ it('Can generate BIP141 addresses with P2WSH-in-P2SH semanitcs', function(done)
         .getAttribute("value")
         .then(function(rootKey) {
             expect(rootKey).toBe("YprvANkMzkodih9AJc6kzDu4NqrxqDKxBnxAXx2vgswCVJs9iM4nWqoZcZ6C9NqbdrgNZjxqnjhUtJYE74mDcycLd1xWY2LV4LEsvZ1DgqxuAKe");
-            // TODO check first address
-            done();
+            getFirstAddress(function(address) {
+                expect(address).toBe("343DLC4vGDyHBbBr9myL8zzZA1MdN9TM1G");
+                done();
+            });
         })
     });
 });
@@ -3750,7 +3754,7 @@ it('Uses Vprv for bitcoin testnet p2wsh', function(done) {
     driver.executeScript(function() {
         $(".bip141-semantics option[selected]").removeAttr("selected");
         $(".bip141-semantics option").filter(function(i,e) {
-            return $(e).html() == "P2WSH";
+            return $(e).html() == "P2WSH (1-of-1 multisig)";
         }).prop("selected", true);
         $(".bip141-semantics").trigger("change");
     });
@@ -3774,7 +3778,7 @@ it('Uses Uprv for bitcoin testnet p2wsh-in-p2sh', function(done) {
     driver.executeScript(function() {
         $(".bip141-semantics option[selected]").removeAttr("selected");
         $(".bip141-semantics option").filter(function(i,e) {
-            return $(e).html() == "P2WSH nested in P2SH";
+            return $(e).html() == "P2WSH nested in P2SH (1-of-1 multisig)";
         }).prop("selected", true);
         $(".bip141-semantics").trigger("change");
     });