diff --git a/lib/http/rpcbase.js b/lib/http/rpcbase.js index 382294bc..ead171b9 100644 --- a/lib/http/rpcbase.js +++ b/lib/http/rpcbase.js @@ -302,15 +302,15 @@ RPCBase.prototype.attach = function attach(rpc) { function RPCError(code, msg) { Error.call(this); - if (Error.captureStackTrace) - Error.captureStackTrace(this, RPCError); - assert(typeof code === 'number'); assert(typeof msg === 'string'); this.type = 'RPCError'; this.message = msg; this.code = code; + + if (Error.captureStackTrace) + Error.captureStackTrace(this, RPCError); } util.inherits(RPCError, Error); diff --git a/lib/http/rpcclient.js b/lib/http/rpcclient.js index d7e70143..9abc8f74 100644 --- a/lib/http/rpcclient.js +++ b/lib/http/rpcclient.js @@ -85,12 +85,12 @@ RPCClient.prototype.execute = async function execute(method, params) { function RPCError(msg, code) { Error.call(this); - if (Error.captureStackTrace) - Error.captureStackTrace(this, RPCError); - this.type = 'RPCError'; this.message = msg + ''; this.code = code >>> 0; + + if (Error.captureStackTrace) + Error.captureStackTrace(this, RPCError); } util.inherits(RPCError, Error); diff --git a/lib/primitives/mtx.js b/lib/primitives/mtx.js index 3d3340ac..adeac841 100644 --- a/lib/primitives/mtx.js +++ b/lib/primitives/mtx.js @@ -1803,9 +1803,6 @@ CoinSelector.prototype.selectHard = function selectHard() { function FundingError(msg, available, required) { Error.call(this); - if (Error.captureStackTrace) - Error.captureStackTrace(this, FundingError); - this.type = 'FundingError'; this.message = msg; this.availableFunds = -1; @@ -1817,6 +1814,9 @@ function FundingError(msg, available, required) { this.availableFunds = available; this.requiredFunds = required; } + + if (Error.captureStackTrace) + Error.captureStackTrace(this, FundingError); } util.inherits(FundingError, Error); diff --git a/lib/protocol/errors.js b/lib/protocol/errors.js index f4e570f7..bafdc6ec 100644 --- a/lib/protocol/errors.js +++ b/lib/protocol/errors.js @@ -38,9 +38,6 @@ const util = require('../utils/util'); function VerifyError(msg, code, reason, score, malleated) { Error.call(this); - if (Error.captureStackTrace) - Error.captureStackTrace(this, VerifyError); - assert(typeof code === 'string'); assert(typeof reason === 'string'); assert(score >= 0); @@ -55,6 +52,9 @@ function VerifyError(msg, code, reason, score, malleated) { this.message = `Verification failure: ${reason}` + ` (code=${code} score=${score} hash=${msg.rhash()})`; + + if (Error.captureStackTrace) + Error.captureStackTrace(this, VerifyError); } util.inherits(VerifyError, Error); diff --git a/lib/script/common.js b/lib/script/common.js index 2272e13a..e728e619 100644 --- a/lib/script/common.js +++ b/lib/script/common.js @@ -822,9 +822,6 @@ exports.ScriptError = function ScriptError(code, op, ip) { Error.call(this); - if (Error.captureStackTrace) - Error.captureStackTrace(this, ScriptError); - this.type = 'ScriptError'; this.code = code; this.message = code; @@ -838,6 +835,9 @@ exports.ScriptError = function ScriptError(code, op, ip) { this.op = op.value; this.ip = ip; } + + if (Error.captureStackTrace) + Error.captureStackTrace(this, ScriptError); }; util.inherits(exports.ScriptError, Error); diff --git a/lib/utils/encoding.js b/lib/utils/encoding.js index ee77ba8e..2176f808 100644 --- a/lib/utils/encoding.js +++ b/lib/utils/encoding.js @@ -1031,13 +1031,16 @@ encoding.sizeVarString = function sizeVarString(str, enc) { */ encoding.EncodingError = function EncodingError(offset, reason) { - Error.call(this); + if (!(this instanceof EncodingError)) + return new EncodingError(offset, reason); - if (Error.captureStackTrace) - Error.captureStackTrace(this, EncodingError); + Error.call(this); this.type = 'EncodingError'; this.message = `${reason} (offset=${offset}).`; + + if (Error.captureStackTrace) + Error.captureStackTrace(this, EncodingError); }; inherits(encoding.EncodingError, Error); diff --git a/lib/utils/validator.js b/lib/utils/validator.js index c0374e81..92228436 100644 --- a/lib/utils/validator.js +++ b/lib/utils/validator.js @@ -599,13 +599,16 @@ function inherits(child, parent) { } function ValidationError(key, type) { - Error.call(this); + if (!(this instanceof ValidationError)) + return new ValidationError(key, type); - if (Error.captureStackTrace) - Error.captureStackTrace(this, ValidationError); + Error.call(this); this.type = 'ValidationError'; this.message = `${fmt(key)} must be a ${type}.`; + + if (Error.captureStackTrace) + Error.captureStackTrace(this, ValidationError); } inherits(ValidationError, Error);