Repository: bitcoinjs/bitcoinjs-lib
Pull request #550 (2016-02-25 02:42:32)

Add network list tests for ECPair/HDNode
This actually fixes a bug `bip32 is undefined` when a networks list was passed and no valid version was found in `HDNode`.


Patch:
diff --git a/src/ecpair.js b/src/ecpair.js
index a01f3634..c6471962 100644
--- a/src/ecpair.js
+++ b/src/ecpair.js
@@ -58,7 +58,6 @@ ECPair.fromPublicKeyBuffer = function (buffer, network) {
 }
 
 ECPair.fromWIF = function (string, network) {
-  network = network || NETWORKS.bitcoin
   var buffer = bs58check.decode(string)
 
   if (types.Array(network)) {
@@ -67,9 +66,11 @@ ECPair.fromWIF = function (string, network) {
     network = network.filter(function (network) {
       return version === network.wif
     }).pop()
-    if (!network) throw new Error('Invalid network version')
+
+    if (!network) throw new Error('Unknown network version')
   }
 
+  network = network || NETWORKS.bitcoin
   var decoded = wif.decodeRaw(buffer, network.wif)
   var d = BigInteger.fromBuffer(decoded.privateKey)
 
diff --git a/src/hdnode.js b/src/hdnode.js
index 784acf5d..27228e91 100644
--- a/src/hdnode.js
+++ b/src/hdnode.js
@@ -64,7 +64,9 @@ HDNode.fromBase58 = function (string, networks) {
     network = networks.filter(function (network) {
       return version === network.bip32.private ||
              version === network.bip32.public
-    }).pop() || {}
+    }).pop()
+
+    if (!network) throw new Error('Unknown network version')
 
   // otherwise, assume a network object (or default to bitcoin)
   } else {
@@ -72,7 +74,7 @@ HDNode.fromBase58 = function (string, networks) {
   }
 
   if (version !== network.bip32.private &&
-    version !== network.bip32.public) throw new Error('Invalid network')
+    version !== network.bip32.public) throw new Error('Invalid network version')
 
   // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
   var depth = buffer[4]


Test patch:
diff --git a/test/ecpair.js b/test/ecpair.js
index b7edbd04..f9e594a6 100644
--- a/test/ecpair.js
+++ b/test/ecpair.js
@@ -107,7 +107,9 @@ describe('ECPair', function () {
     fixtures.invalid.fromWIF.forEach(function (f) {
       it('throws on ' + f.WIF, function () {
         assert.throws(function () {
-          ECPair.fromWIF(f.WIF)
+          var networks = f.network ? NETWORKS[f.network] : NETWORKS_LIST
+
+          ECPair.fromWIF(f.WIF, networks)
         }, new RegExp(f.exception))
       })
     })
diff --git a/test/fixtures/ecpair.json b/test/fixtures/ecpair.json
index 652eb2d4..6f0a1a2a 100644
--- a/test/fixtures/ecpair.json
+++ b/test/fixtures/ecpair.json
@@ -107,8 +107,13 @@
     "fromWIF": [
       {
         "exception": "Invalid network version",
+        "network": "bitcoin",
         "WIF": "92Qba5hnyWSn5Ffcka56yMQauaWY6ZLd91Vzxbi4a9CCetaHtYj"
       },
+      {
+        "exception": "Unknown network version",
+        "WIF": "brQnSed3Fia1w9VcbbS6ZGDgJ6ENkgwuQY2LS7pEC5bKHD1fMF"
+      },
       {
         "exception": "Invalid compression flag",
         "WIF": "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sfZr2ym"
diff --git a/test/fixtures/hdnode.json b/test/fixtures/hdnode.json
index 21ca41d9..877dd6d4 100644
--- a/test/fixtures/hdnode.json
+++ b/test/fixtures/hdnode.json
@@ -199,11 +199,12 @@
         "string": "xprvQQQQQQQQQQQQQQQQCviVfJSKyQ1mDYahRjijr5idH2WwLsEd4Hsb2Tyh8RfQMuPh7f7RtyzTtdrbdqqsunu5Mm3wDvUAKRHSC34sJ7in334"
       },
       {
-        "exception": "Invalid network",
+        "exception": "Unknown network version",
         "string": "1111111111111adADjFaSNPxwXqLjHLj4mBfYxuewDPbw9hEj1uaXCzMxRPXDFF3cUoezTFYom4sEmEVSQmENPPR315cFk9YUFVek73wE9"
       },
       {
-        "exception": "Invalid network",
+        "exception": "Invalid network version",
+        "network": "bitcoin",
         "string": "Ltpv73XYpw28ZyVe2zEVyiFnxUZxoKLGQNdZ8NxUi1WcqjNmMBgtLbh3KimGSnPHCoLv1RmvxHs4dnKmo1oXQ8dXuDu8uroxrbVxZPA1gXboYvx"
       }
     ],
diff --git a/test/hdnode.js b/test/hdnode.js
index c5a55fbe..e9018501 100644
--- a/test/hdnode.js
+++ b/test/hdnode.js
@@ -210,9 +210,9 @@ describe('HDNode', function () {
     fixtures.invalid.fromBase58.forEach(function (f) {
       it('throws on ' + f.string, function () {
         assert.throws(function () {
-          var network = NETWORKS[f.network]
+          var networks = f.network ? NETWORKS[f.network] : NETWORKS_LIST
 
-          HDNode.fromBase58(f.string, network)
+          HDNode.fromBase58(f.string, networks)
         }, new RegExp(f.exception))
       })
     })