From 4d79298d86c913f3d49fca3aeae6d6470bc3d914 Mon Sep 17 00:00:00 2001 From: yann300 Date: Tue, 29 Nov 2016 20:06:26 +0100 Subject: [PATCH 1/3] Extend state manager --- src/app/execution-context.js | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/app/execution-context.js b/src/app/execution-context.js index aa5453404d..957da63715 100644 --- a/src/app/execution-context.js +++ b/src/app/execution-context.js @@ -5,6 +5,8 @@ var $ = require('jquery') var Web3 = require('web3') var EventManager = require('../lib/eventManager') var EthJSVM = require('ethereumjs-vm') +var ethUtil = require('ethereumjs-util') +var StateManager = require('ethereumjs-vm/lib/stateManager') var injectedProvider @@ -16,10 +18,41 @@ if (typeof window.web3 !== 'undefined') { web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545')) } +/* + extend vm state manager and instanciate VM +*/ +var stateManager = new StateManager({}) +stateManager.keyHashes = {} +var base = stateManager.putContractStorage +stateManager.putContractStorage = function (address, key, value, cb) { + stateManager.keyHashes[ethUtil.sha3(key)] = ethUtil.bufferToHex(key) + base.apply(stateManager, [address, key, value, cb]) +} + +stateManager.dumpStorage = function (address, cb) { + stateManager._getStorageTrie(address, function (err, trie) { + if (err) { + return cb(err) + } + var storage = {} + var stream = trie.createReadStream() + stream.on('data', function (val) { + storage[stateManager.keyHashes[val.key]] = val.value.toString('hex') + }) + stream.on('end', function () { + cb(storage) + }) + }) +} + var vm = new EthJSVM({ enableHomestead: true, activatePrecompiles: true }) + +vm.stateManager = stateManager +vm.blockchain = stateManager.blockchain +vm.trie = stateManager.trie vm.stateManager.checkpoint() /* From 8cc2a861e6669caa8394799dad00e04910b2d6da Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 5 Dec 2016 13:38:48 +0100 Subject: [PATCH 2/3] use ES6 class --- src/app/execution-context.js | 47 +++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/src/app/execution-context.js b/src/app/execution-context.js index 957da63715..2697ba54c6 100644 --- a/src/app/execution-context.js +++ b/src/app/execution-context.js @@ -21,30 +21,37 @@ if (typeof window.web3 !== 'undefined') { /* extend vm state manager and instanciate VM */ -var stateManager = new StateManager({}) -stateManager.keyHashes = {} -var base = stateManager.putContractStorage -stateManager.putContractStorage = function (address, key, value, cb) { - stateManager.keyHashes[ethUtil.sha3(key)] = ethUtil.bufferToHex(key) - base.apply(stateManager, [address, key, value, cb]) -} -stateManager.dumpStorage = function (address, cb) { - stateManager._getStorageTrie(address, function (err, trie) { - if (err) { - return cb(err) - } - var storage = {} - var stream = trie.createReadStream() - stream.on('data', function (val) { - storage[stateManager.keyHashes[val.key]] = val.value.toString('hex') - }) - stream.on('end', function () { - cb(storage) +class StateManagerCommonStorageDump extends StateManager { + constructor (arg) { + super(arg) + this.keyHashes = {} + } + + putContractStorage (address, key, value, cb) { + this.keyHashes[ethUtil.sha3(key)] = ethUtil.bufferToHex(key) + super.putContractStorage(address, key, value, cb) + } + + dumpStorage (address, cb) { + var self = this + this._getStorageTrie(address, function (err, trie) { + if (err) { + return cb(err) + } + var storage = {} + var stream = trie.createReadStream() + stream.on('data', function (val) { + storage[self.keyHashes[val.key]] = val.value.toString('hex') + }) + stream.on('end', function () { + cb(storage) + }) }) - }) + } } +var stateManager = new StateManagerCommonStorageDump({}) var vm = new EthJSVM({ enableHomestead: true, activatePrecompiles: true From 5b119359467130b61e0b5d46640b5fc221b43fff Mon Sep 17 00:00:00 2001 From: yann300 Date: Mon, 5 Dec 2016 14:13:15 +0100 Subject: [PATCH 3/3] add note --- src/app/execution-context.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/app/execution-context.js b/src/app/execution-context.js index 2697ba54c6..171360456a 100644 --- a/src/app/execution-context.js +++ b/src/app/execution-context.js @@ -57,6 +57,7 @@ var vm = new EthJSVM({ activatePrecompiles: true }) +// FIXME: move state manager in EthJSVM ctr vm.stateManager = stateManager vm.blockchain = stateManager.blockchain vm.trie = stateManager.trie