Skip to content
This repository has been archived by the owner on Feb 26, 2024. It is now read-only.

Commit

Permalink
Add errorHelper, cleanup error handling when blocks are out of range
Browse files Browse the repository at this point in the history
  • Loading branch information
nicholasjpaterno committed Nov 7, 2018
1 parent 308a6d6 commit c02be96
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 7 deletions.
11 changes: 6 additions & 5 deletions lib/database/leveluparrayadapter.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
var Sublevel = require("level-sublevel");
const { LevelUpOutOfRangeError, BlockOutOfRangeError } = require("../utils/errorhelper");

// Level up adapter that looks like an array. Doesn't support inserts.

Expand Down Expand Up @@ -58,11 +59,11 @@ LevelUpArrayAdapter.prototype.get = function(index, callback) {
return callback(err);
}
if (index >= length) {
return callback(
new Error(
"LevelUpArrayAdapter named '" + self.name + "' index out of range: index " + index + "; length: " + length
)
);
// index out of range
let RangeError = self.name === "blocks"
? new BlockOutOfRangeError(index, length)
: new LevelUpOutOfRangeError(self.name, index, length);
return callback(RangeError);
}
self._get(index, callback);
});
Expand Down
3 changes: 2 additions & 1 deletion lib/statemanager.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ var ForkedBlockchain = require("./utils/forkedblockchain.js");
var Web3 = require("web3");
var sigUtil = require("eth-sig-util");
var _ = require("lodash");
const { BlockOutOfRangeError } = require("./utils/errorhelper");

var to = require("./utils/to");
var random = require("./utils/random");
Expand Down Expand Up @@ -627,7 +628,7 @@ StateManager.prototype.processCall = function(from, rawTx, blockNumber, callback

self.blockchain.processCall(tx, blockNumber, function(err, results) {
if (err) {
if (err.message.indexOf("LevelUpArrayAdapter named 'blocks' index out of range: index") >= 0) {
if (err instanceof BlockOutOfRangeError) {
// block doesn't exist
return callback(null, null);
}
Expand Down
3 changes: 2 additions & 1 deletion lib/subproviders/geth_api_double.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ var to = require("../utils/to");
var txhelper = require("../utils/txhelper");
var blockHelper = require("../utils/block_helper");
var pkg = require("../../package.json");
const { BlockOutOfRangeError } = require("../utils/errorhelper");

var Subprovider = require("web3-provider-engine/subproviders/subprovider.js");

Expand Down Expand Up @@ -188,7 +189,7 @@ GethApiDouble.prototype.eth_getBlockByHash = function(txHash, includeFullTransac
GethApiDouble.prototype.eth_getBlockTransactionCountByNumber = function(blockNumber, callback) {
this.state.blockchain.getBlock(blockNumber, function(err, block) {
if (err) {
if (err.message.indexOf("LevelUpArrayAdapter named 'blocks' index out of range: index") >= 0) {
if (err instanceof BlockOutOfRangeError) {
// block doesn't exist
return callback(null, 0);
}
Expand Down
20 changes: 20 additions & 0 deletions lib/utils/errorhelper.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
class LevelUpOutOfRangeError extends Error {
constructor(type, index, len) {
const message = "LevelUpArrayAdapter named '" + type + "' index out of range: index " + index + "; length: " + len;
super(message);
this.message = message;
this.name = `${this.constructor.name}:${type}`;
this.type = type;
}
}

class BlockOutOfRangeError extends LevelUpOutOfRangeError {
constructor(index, len) {
super("blocks", index, len);
}
}

module.exports = {
LevelUpOutOfRangeError,
BlockOutOfRangeError
};

0 comments on commit c02be96

Please sign in to comment.