Browse Source

Add support for vanity multisig addresses

master
Luke Childs 5 years ago
parent
commit
817307ba41
  1. 4
      src/address-formats/p2pkh.js
  2. 17
      src/address-formats/p2sh.js
  3. 4
      src/address-formats/p2wpkh-p2sh.js
  4. 4
      src/address-formats/p2wpkh.js
  5. 8
      src/index.js
  6. 21
      src/key-formats/multisig.js

4
src/address-formats/p2pkh.js

@ -7,8 +7,8 @@ const p2pkh = {
bip39: '44'
};
p2pkh.derive = pubkey => {
const {address} = bitcoin.payments.p2pkh({pubkey});
p2pkh.derive = ({publicKey}) => {
const {address} = bitcoin.payments.p2pkh({pubkey: publicKey});
return address;
};

17
src/address-formats/p2sh.js

@ -0,0 +1,17 @@
const bitcoin = require('bitcoinjs-lib');
const {base58} = require('./charsets');
const p2sh = {
prefix: '3',
charset: base58
};
p2sh.derive = ({redeemScript}) => {
const {address} = bitcoin.payments.p2sh({
redeem: {output: redeemScript}
});
return address;
};
module.exports = p2sh;

4
src/address-formats/p2wpkh-p2sh.js

@ -7,9 +7,9 @@ const p2wpkhp2sh = {
bip39: '49'
};
p2wpkhp2sh.derive = pubkey => {
p2wpkhp2sh.derive = ({publicKey}) => {
const {address} = bitcoin.payments.p2sh({
redeem: bitcoin.payments.p2wpkh({pubkey})
redeem: bitcoin.payments.p2wpkh({pubkey: publicKey})
});
return address;

4
src/address-formats/p2wpkh.js

@ -7,8 +7,8 @@ const p2wpkh = {
bip39: '84'
};
p2wpkh.derive = pubkey => {
const {address} = bitcoin.payments.p2wpkh({pubkey});
p2wpkh.derive = ({publicKey}) => {
const {address} = bitcoin.payments.p2wpkh({pubkey: publicKey});
return address;
};

8
src/index.js

@ -5,13 +5,15 @@ const ONE_SECOND = 1000;
const keyFormats = {
wif: require('./key-formats/wif'),
bip39: require('./key-formats/bip39'),
xpub: require('./key-formats/xpub')
xpub: require('./key-formats/xpub'),
multisig: require('./key-formats/multisig')
};
const addressFormats = {
p2pkh: require('./address-formats/p2pkh'),
'p2wpkh-p2sh': require('./address-formats/p2wpkh-p2sh'),
p2wpkh: require('./address-formats/p2wpkh')
p2wpkh: require('./address-formats/p2wpkh'),
p2sh: require('./address-formats/p2sh')
};
class Vain extends Emitter {
@ -65,7 +67,7 @@ class Vain extends Emitter {
attempts++;
keyData = generateKey({...options, addressFormat, attempts});
address = addressFormat.derive(keyData.publicKey);
address = addressFormat.derive(keyData);
if (address.startsWith(this.prefix)) {
found = true;

21
src/key-formats/multisig.js

@ -0,0 +1,21 @@
const bitcoin = require('bitcoinjs-lib');
const generateRedeemScript = ({pubkeys, m}) => {
const keyPair = bitcoin.ECPair.makeRandom();
const {publicKey} = keyPair;
let redeemScript;
let n;
({output: redeemScript, m, n, pubkeys} = bitcoin.payments.p2ms({
pubkeys: [
...pubkeys,
publicKey
],
m
}));
const format = () => ({redeemScript, m, n, pubkeys});
return {redeemScript, format};
};
module.exports = generateRedeemScript;
Loading…
Cancel
Save