Commit 6698706e authored by Iuri Matias's avatar Iuri Matias

refactor storageResolver

parent 7feb9edb
...@@ -39,17 +39,14 @@ class StorageResolver { ...@@ -39,17 +39,14 @@ class StorageResolver {
* @param {Array} corrections - used in case the calculated sha3 has been modifyed before SSTORE (notably used for struct in mapping). * @param {Array} corrections - used in case the calculated sha3 has been modifyed before SSTORE (notably used for struct in mapping).
* @return {Function} - callback * @return {Function} - callback
*/ */
initialPreimagesMappings (tx, stepIndex, address, corrections) { async initialPreimagesMappings (tx, stepIndex, address, corrections) {
return new Promise((resolve, reject) => {
if (this.preimagesMappingByAddress[address]) { if (this.preimagesMappingByAddress[address]) {
return resolve(this.preimagesMappingByAddress[address]) return this.preimagesMappingByAddress[address]
} }
this.storageRange(tx, stepIndex, address).then((storage) => { const storage = await this.storageRange(tx, stepIndex, address)
const mappings = mappingPreimages.decodeMappingsKeys(this.web3, storage, corrections) const mappings = mappingPreimages.decodeMappingsKeys(this.web3, storage, corrections)
this.preimagesMappingByAddress[address] = mappings this.preimagesMappingByAddress[address] = mappings
resolve(mappings) return mappings
}).catch(reject)
})
} }
/** /**
...@@ -61,12 +58,9 @@ class StorageResolver { ...@@ -61,12 +58,9 @@ class StorageResolver {
* @param {String} - address - lookup address * @param {String} - address - lookup address
* @param {Function} - callback - {key, hashedKey, value} - * @param {Function} - callback - {key, hashedKey, value} -
*/ */
storageSlot (slot, tx, stepIndex, address) { async storageSlot (slot, tx, stepIndex, address) {
return new Promise((resolve, reject) => { const storage = await this.storageRangeInternal(this, slot, tx, stepIndex, address)
this.storageRangeInternal(this, slot, tx, stepIndex, address).then((storage) => { return (storage[slot] !== undefined ? storage[slot] : null)
resolve(storage[slot] !== undefined ? storage[slot] : null)
}).catch(reject)
})
} }
/** /**
...@@ -85,27 +79,21 @@ class StorageResolver { ...@@ -85,27 +79,21 @@ class StorageResolver {
* even if the next 1000 items are not in the cache. * even if the next 1000 items are not in the cache.
* - If @arg slot is not cached, the corresponding value will be resolved and the next 1000 slots. * - If @arg slot is not cached, the corresponding value will be resolved and the next 1000 slots.
*/ */
storageRangeInternal (self, slotKey, tx, stepIndex, address) { async storageRangeInternal (self, slotKey, tx, stepIndex, address) {
return new Promise((resolve, reject) => {
var cached = this.fromCache(self, address) var cached = this.fromCache(self, address)
if (cached && cached.storage[slotKey]) { // we have the current slot in the cache and maybe the next 1000... if (cached && cached.storage[slotKey]) { // we have the current slot in the cache and maybe the next 1000...
return resolve(cached.storage) return cached.storage
} }
this.storageRangeWeb3Call(tx, address, slotKey, self.maxSize).then((result) => { const result = await this.storageRangeWeb3Call(tx, address, slotKey, self.maxSize)
const [storage, nextKey] = result const [storage, nextKey] = result
if (!storage[slotKey] && slotKey !== self.zeroSlot) { // we don't cache the zero slot (could lead to inconsistency) if (!storage[slotKey] && slotKey !== self.zeroSlot) { // we don't cache the zero slot (could lead to inconsistency)
storage[slotKey] = { storage[slotKey] = {key: slotKey, value: self.zeroSlot}
key: slotKey,
value: self.zeroSlot
}
} }
self.toCache(self, address, storage) self.toCache(self, address, storage)
if (slotKey === self.zeroSlot && !nextKey) { // only working if keys are sorted !! if (slotKey === self.zeroSlot && !nextKey) { // only working if keys are sorted !!
self.storageByAddress[address].complete = true self.storageByAddress[address].complete = true
} }
return resolve(storage) return storage
}).catch(reject)
})
} }
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment