<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>
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)
}
}
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");
});
.getAttribute("value")
.then(function(rootKey) {
expect(rootKey).toBe("ZprvAhadJRUYsNge9uHspaggavxU1BUQ8QwfT4Z9UGq5sKF2mSt1mVy8EckLAaoBdmLHyP5eYDJ3LxtmzMNnLg2MRFe7QN2ueF4NCH4s5PrCDR6");
- // TODO check first address
- done();
+ getFirstAddress(function(address) {
+ expect(address).toBe("bc1q2qhee847pv438tgg8hc7mjy38n8dklleshettn344l0tgs0kj5hskz9p9r");
+ 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");
});
.getAttribute("value")
.then(function(rootKey) {
expect(rootKey).toBe("YprvANkMzkodih9AJc6kzDu4NqrxqDKxBnxAXx2vgswCVJs9iM4nWqoZcZ6C9NqbdrgNZjxqnjhUtJYE74mDcycLd1xWY2LV4LEsvZ1DgqxuAKe");
- // TODO check first address
- done();
+ getFirstAddress(function(address) {
+ expect(address).toBe("343DLC4vGDyHBbBr9myL8zzZA1MdN9TM1G");
+ 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");
});
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");
});