Browse Source

Test events

master
Luke Childs 6 years ago
parent
commit
ee11391640
  1. 7
      src/index.js
  2. 38
      test/events.js

7
src/index.js

@ -16,6 +16,7 @@ const addressFormats = {
class Vain extends Emitter { class Vain extends Emitter {
constructor({keyFormat = 'wif', addressFormat = 'p2pkh', prefix}) { constructor({keyFormat = 'wif', addressFormat = 'p2pkh', prefix}) {
super(); super();
this.generating = false;
this.generateKey = keyFormats[keyFormat]; this.generateKey = keyFormats[keyFormat];
this.addressFormat = addressFormats[addressFormat]; this.addressFormat = addressFormats[addressFormat];
@ -33,6 +34,7 @@ class Vain extends Emitter {
} }
generate() { generate() {
this.generating = true;
const startTime = Date.now(); const startTime = Date.now();
const {generateKey, addressFormat} = this; const {generateKey, addressFormat} = this;
@ -44,6 +46,10 @@ class Vain extends Emitter {
let lastUpdate = Date.now(); let lastUpdate = Date.now();
while (!found) { while (!found) {
if (!this.generating) {
return {stopped: true};
}
attempts++; attempts++;
keyData = generateKey({addressFormat}); keyData = generateKey({addressFormat});
@ -51,6 +57,7 @@ class Vain extends Emitter {
if (address.startsWith(this.prefix)) { if (address.startsWith(this.prefix)) {
found = true; found = true;
this.generating = false;
} }
const now = Date.now(); const now = Date.now();

38
test/events.js

@ -0,0 +1,38 @@
import test from 'ava';
import * as bitcoin from 'bitcoinjs-lib';
import Vain from '..';
test('Vain instance emits `found` event when vanity address is found', t => {
t.plan(2);
const options = {
prefix: 'A'
};
const vain = new Vain(options);
vain.on('found', ({address, wif}) => {
const keyPair = bitcoin.ECPair.fromWIF(wif);
const {address: wifAddress} = bitcoin.payments.p2pkh({pubkey: keyPair.publicKey});
t.true(address.startsWith(`1${options.prefix}`));
t.is(address, wifAddress);
});
vain.generate();
});
test('Vain instance emits `update` event during address generation', t => {
t.plan(1);
const options = {
prefix: '1BitcoinEaterAddressDontSend'
};
const vain = new Vain(options);
vain.on('update', () => {
vain.generating = false;
t.pass();
});
vain.generate();
});
Loading…
Cancel
Save