diff --git a/test/integration/bip32.js b/test/integration/bip32.js index 7499242..1908166 100644 --- a/test/integration/bip32.js +++ b/test/integration/bip32.js @@ -12,36 +12,55 @@ describe('bitcoinjs-lib (BIP32)', function () { assert.equal(node.keyPair.toWIF(), 'cQfoY67cetFNunmBUX5wJiw3VNoYx3gG9U9CAofKE6BfiV1fSRw7') }) - it('can create a BIP32 wallet external address', function () { + it('can export a BIP32 xpriv, then import it', function () { + var mnemonic = 'praise you muffin lion enable neck grocery crumble super myself license ghost' + var seed = bip39.mnemonicToSeed(mnemonic) + var node = bitcoin.HDNode.fromSeedBuffer(seed) + var string = node.toBase58() + var restored = bitcoin.HDNode.fromBase58(string) + + assert.equal(node.getAddress(), restored.getAddress()) // same public key + assert.equal(node.keyPair.toWIF(), restored.keyPair.toWIF()) // same private key + }) + + it('can export a BIP32 xpub', function () { + var mnemonic = 'praise you muffin lion enable neck grocery crumble super myself license ghost' + var seed = bip39.mnemonicToSeed(mnemonic) + var node = bitcoin.HDNode.fromSeedBuffer(seed) + var string = node.neutered().toBase58() + + assert.equal(string, 'xpub661MyMwAqRbcGhVeaVfEBA25e3cP9DsJQZoE8iep5fZSxy3TnPBNBgWnMZx56oreNc48ZoTkQfatNJ9VWnQ7ZcLZcVStpaXLTeG8bGrzX3n') + }) + + it('can create a BIP32, bitcoin, account 0, external address', function () { var path = "m/0'/0/0" var root = bitcoin.HDNode.fromSeedHex('dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd') var child1 = root.derivePath(path) // option 2, manually - var child2 = root.deriveHardened(0) + var child1b = root.deriveHardened(0) .derive(0) .derive(0) assert.equal(child1.getAddress(), '1JHyB1oPXufr4FXkfitsjgNB5yRY9jAaa7') - assert.equal(child2.getAddress(), '1JHyB1oPXufr4FXkfitsjgNB5yRY9jAaa7') + assert.equal(child1b.getAddress(), '1JHyB1oPXufr4FXkfitsjgNB5yRY9jAaa7') }) it('can create a BIP44, bitcoin, account 0, external address', function () { - var path = "m/44'/0'/0'/0/0" var root = bitcoin.HDNode.fromSeedHex('dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd') - var child1 = root.derivePath(path) + var child1 = root.derivePath("m/44'/0'/0'/0/0") // option 2, manually - var child2 = root.deriveHardened(44) + var child1b = root.deriveHardened(44) .deriveHardened(0) .deriveHardened(0) .derive(0) .derive(0) assert.equal(child1.getAddress(), '12Tyvr1U8A3ped6zwMEU5M8cx3G38sP5Au') - assert.equal(child2.getAddress(), '12Tyvr1U8A3ped6zwMEU5M8cx3G38sP5Au') + assert.equal(child1b.getAddress(), '12Tyvr1U8A3ped6zwMEU5M8cx3G38sP5Au') }) it('can create a BIP49, bitcoin testnet, account 0, external address', function () { @@ -61,7 +80,7 @@ describe('bitcoinjs-lib (BIP32)', function () { assert.equal(address, '2Mww8dCYPUpKHofjgcXcBCEGmniw9CoaiD2') }) - it('can use BIP39 to generate BIP32 wallet address', function () { + it('can use BIP39 to generate BIP32 addresses', function () { // var mnemonic = bip39.generateMnemonic() var mnemonic = 'praise you muffin lion enable neck grocery crumble super myself license ghost' assert(bip39.validateMnemonic(mnemonic)) @@ -69,10 +88,12 @@ describe('bitcoinjs-lib (BIP32)', function () { var seed = bip39.mnemonicToSeed(mnemonic) var root = bitcoin.HDNode.fromSeedBuffer(seed) - // 1st receive address + // receive addresses assert.strictEqual(root.derivePath("m/0'/0/0").getAddress(), '1AVQHbGuES57wD68AJi7Gcobc3RZrfYWTC') + assert.strictEqual(root.derivePath("m/0'/0/1").getAddress(), '1Ad6nsmqDzbQo5a822C9bkvAfrYv9mc1JL') - // 1st change address + // change addresses assert.strictEqual(root.derivePath("m/0'/1/0").getAddress(), '1349KVc5NgedaK7DvuD4xDFxL86QN1Hvdn') + assert.strictEqual(root.derivePath("m/0'/1/1").getAddress(), '1EAvj4edpsWcSer3duybAd4KiR4bCJW5J6') }) })