From 09d9e0291f70de19217929f8149d1c3c1b18714a Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Fri, 16 Sep 2016 10:55:57 -0400 Subject: [PATCH 1/2] Throw error with invalid network --- lib/address.js | 8 ++++++-- test/address.js | 6 ++++++ test/networks.js | 5 ++++- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/lib/address.js b/lib/address.js index b017bc7..2fd487e 100644 --- a/lib/address.js +++ b/lib/address.js @@ -195,10 +195,14 @@ Address._transformBuffer = function(buffer, network, type) { throw new TypeError('Address buffers must be exactly 21 bytes.'); } - network = Networks.get(network); + var networkObj = Networks.get(network); var bufferVersion = Address._classifyFromVersion(buffer); - if (!bufferVersion.network || (network && network !== bufferVersion.network)) { + if (network && !networkObj) { + throw new TypeError('Unknown network'); + } + + if (!bufferVersion.network || (networkObj && networkObj !== bufferVersion.network)) { throw new TypeError('Address has mismatched network type.'); } diff --git a/test/address.js b/test/address.js index 4982ad7..f4632c7 100644 --- a/test/address.js +++ b/test/address.js @@ -250,6 +250,12 @@ describe('Address', function() { Address.fromString(str, Networks.livenet).toString().should.equal(str); }); + it('should throw with bad network param', function() { + (function(){ + Address.fromString(str, 'somenet'); + }).should.throw('Unknown network'); + }); + it('should error because of unrecognized data format', function() { (function() { return new Address(new Error()); diff --git a/test/networks.js b/test/networks.js index 7d82f92..ea265cf 100644 --- a/test/networks.js +++ b/test/networks.js @@ -89,7 +89,10 @@ describe('Networks', function() { networks.add(custom); var network = networks.get(undefined); should.not.exist(network); - networks.remove(custom); + var somenet = networks.get('somenet'); + should.exist(somenet); + somenet.name.should.equal('somenet'); + networks.remove(somenet); }); var constants = ['name', 'alias', 'pubkeyhash', 'scripthash', 'xpubkey', 'xprivkey']; From 6f1c7827376f4b9332e4a2126408854dd21d7c75 Mon Sep 17 00:00:00 2001 From: Braydon Fuller Date: Tue, 20 Sep 2016 11:18:45 -0400 Subject: [PATCH 2/2] Improve transaction assertion messages --- lib/transaction/transaction.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/transaction/transaction.js b/lib/transaction/transaction.js index 9766024..612d481 100644 --- a/lib/transaction/transaction.js +++ b/lib/transaction/transaction.js @@ -393,13 +393,13 @@ Transaction.prototype.fromObject = function fromObject(arg) { Transaction.prototype._checkConsistency = function(arg) { if (!_.isUndefined(this._changeIndex)) { - $.checkState(this._changeScript); - $.checkState(this.outputs[this._changeIndex]); + $.checkState(this._changeScript, 'Change script is expected.'); + $.checkState(this.outputs[this._changeIndex], 'Change index points to undefined output.'); $.checkState(this.outputs[this._changeIndex].script.toString() === - this._changeScript.toString()); + this._changeScript.toString(), 'Change output has an unexpected script.'); } if (arg && arg.hash) { - $.checkState(arg.hash === this.hash, 'Hash in object does not match transaction hash'); + $.checkState(arg.hash === this.hash, 'Hash in object does not match transaction hash.'); } }; @@ -1050,7 +1050,7 @@ Transaction.prototype.removeInput = function(txId, outputIndex) { * @return {Transaction} this, for chaining */ Transaction.prototype.sign = function(privateKey, sigtype) { - $.checkState(this.hasAllUtxoInfo()); + $.checkState(this.hasAllUtxoInfo(), 'Not all utxo information is available to sign the transaction.'); var self = this; if (_.isArray(privateKey)) { _.each(privateKey, function(privateKey) {