From f46d3af0506b6bce79e71f1605f3fe79e9a18ffd Mon Sep 17 00:00:00 2001 From: Mike Seese Date: Mon, 21 Sep 2020 18:35:03 -0700 Subject: [PATCH] add back check to check if the keyExists to support 'past' lookups --- lib/forking/forked_storage_trie.js | 56 +++++++++++++++++------------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/lib/forking/forked_storage_trie.js b/lib/forking/forked_storage_trie.js index 4963b5fd93..dc2c0e4789 100644 --- a/lib/forking/forked_storage_trie.js +++ b/lib/forking/forked_storage_trie.js @@ -28,42 +28,48 @@ ForkedStorageBaseTrie.prototype.get = function(key, callback) { key = utils.toBuffer(key); - this.getTouchedAt(key, function(err, touchedAt) { + self.keyExists(key, function(err, keyExists) { if (err) { return callback(err); } - if (typeof touchedAt !== "undefined") { - MerklePatriciaTree.prototype.get.call(self, key, function(err, r) { - callback(err, r); - }); - } else { - // If this is the main trie, get the whole account. - if (self.address == null) { - self.blockchain.fetchAccountFromFallback(key, self.forkBlockNumber, function(err, account) { - if (err) { - return callback(err); - } - - callback(null, account.serialize()); + self.getTouchedAt(key, function(err, touchedAt) { + if (err) { + return callback(err); + } + + if (keyExists && typeof touchedAt !== "undefined") { + MerklePatriciaTree.prototype.get.call(self, key, function(err, r) { + callback(err, r); }); } else { - self.web3.eth.getStorageAt( - to.rpcDataHexString(self.address), - to.rpcDataHexString(key), - self.forkBlockNumber, - function(err, value) { + // If this is the main trie, get the whole account. + if (self.address == null) { + self.blockchain.fetchAccountFromFallback(key, self.forkBlockNumber, function(err, account) { if (err) { return callback(err); } - value = utils.rlp.encode(value); - - callback(null, value); - } - ); + callback(null, account.serialize()); + }); + } else { + self.web3.eth.getStorageAt( + to.rpcDataHexString(self.address), + to.rpcDataHexString(key), + self.forkBlockNumber, + function(err, value) { + if (err) { + return callback(err); + } + + value = utils.rlp.encode(value); + + callback(null, value); + } + ); + } } - } + }); }); };