diff --git a/remix-solidity/test/decoder/contracts/mappingStorage.js b/remix-solidity/test/decoder/contracts/mappingStorage.js new file mode 100644 index 0000000000..71b12f48d9 --- /dev/null +++ b/remix-solidity/test/decoder/contracts/mappingStorage.js @@ -0,0 +1,14 @@ +module.exports = { + contract: ` + pragma solidity ^0.4.19; + +contract SimpleMappingState { + uint _num; + mapping(string => uint) _iBreakSolidityState; + function updateNum(uint num, string str) public { + _num = num; + _iBreakSolidityState[str] = num; + } +} + ` +} diff --git a/remix-solidity/test/decoder/localsTests/int.js b/remix-solidity/test/decoder/localsTests/int.js index 652907da8f..771f71e092 100644 --- a/remix-solidity/test/decoder/localsTests/int.js +++ b/remix-solidity/test/decoder/localsTests/int.js @@ -2,7 +2,7 @@ var remixCore = require('remix-core') var TraceManager = remixCore.trace.TraceManager var CodeManager = remixCore.code.CodeManager -var vmSendTx = require('./vmCall') +var vmSendTx = require('../vmCall') var remixLib = require('remix-lib') var traceHelper = remixLib.helpers.trace diff --git a/remix-solidity/test/decoder/localsTests/misc.js b/remix-solidity/test/decoder/localsTests/misc.js index 1af4e27004..92a1405a02 100644 --- a/remix-solidity/test/decoder/localsTests/misc.js +++ b/remix-solidity/test/decoder/localsTests/misc.js @@ -2,7 +2,7 @@ var remixCore = require('remix-core') var TraceManager = remixCore.trace.TraceManager var CodeManager = remixCore.code.CodeManager -var vmSendTx = require('./vmCall') +var vmSendTx = require('../vmCall') var remixLib = require('remix-lib') var traceHelper = remixLib.helpers.trace var global = remixLib.global diff --git a/remix-solidity/test/decoder/localsTests/misc2.js b/remix-solidity/test/decoder/localsTests/misc2.js index 64ffba40d8..063292e729 100644 --- a/remix-solidity/test/decoder/localsTests/misc2.js +++ b/remix-solidity/test/decoder/localsTests/misc2.js @@ -2,7 +2,7 @@ var remixCore = require('remix-core') var TraceManager = remixCore.trace.TraceManager var CodeManager = remixCore.code.CodeManager -var vmSendTx = require('./vmCall') +var vmSendTx = require('../vmCall') var remixLib = require('remix-lib') var traceHelper = remixLib.helpers.trace var global = remixLib.global diff --git a/remix-solidity/test/decoder/localsTests/structArray.js b/remix-solidity/test/decoder/localsTests/structArray.js index 2088ac42f1..6ff46607a7 100644 --- a/remix-solidity/test/decoder/localsTests/structArray.js +++ b/remix-solidity/test/decoder/localsTests/structArray.js @@ -2,7 +2,7 @@ var remixCore = require('remix-core') var TraceManager = remixCore.trace.TraceManager var CodeManager = remixCore.code.CodeManager -var vmSendTx = require('./vmCall') +var vmSendTx = require('../vmCall') var remixLib = require('remix-lib') var traceHelper = remixLib.helpers.trace var global = remixLib.global diff --git a/remix-solidity/test/decoder/storageDecoder.js b/remix-solidity/test/decoder/storageDecoder.js index a6df60911e..e2bb91d36b 100644 --- a/remix-solidity/test/decoder/storageDecoder.js +++ b/remix-solidity/test/decoder/storageDecoder.js @@ -11,7 +11,9 @@ tape('solidity', function (t) { testIntStorage(st, function () { testByteStorage(st, function () { testStructArrayStorage(st, function () { - st.end() + testMappingStorage(st, function () { + st.end() + }) }) }) }) @@ -271,3 +273,70 @@ function testStructArrayStorage (st, cb) { cb() }) } + +function testMappingStorage (st, cb) { + var mappingStorage = require('./contracts/mappingStorage') + var vmSendTx = require('./vmCall') + var privateKey = new Buffer('dae9801649ba2d95a21e688b56f77905e5667c44ce868ec83f82e838712a2c7a', 'hex') + var vm = initVM(st, privateKey) + var output = compiler.compileStandardWrapper(compilerInput(mappingStorage.contract)) + output = JSON.parse(output) + vmSendTx(vm, {nonce: 0, privateKey: privateKey}, null, 0, output.contracts['test.sol']['SimpleMappingState'].evm.bytecode.object, function (error, txHash) { + if (error) { + console.log(error) + st.end(error) + } else { + vmSendTx(vm, {nonce: 1, privateKey: privateKey}, null, 0, '2fd0a83a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001074686973206973206120737472696e6700000000000000000000000000000000', + function (error, txHash) { + if (error) { + console.log(error) + st.end(error) + } else { + console.log(txHash) + var TraceManager = require('remix-core').trace.TraceManager + var traceManager = new TraceManager() + var StorageResolver = require('remix-core').storage.StorageResolver + var StorageViewer = require('remix-core').storage.StorageViewer + var storageViewer = new StorageViewer({ + stepIndex: 180, + tx: null, + address: null + }, new StorageResolver(), traceManager) + var stateVars = stateDecoder.extractStateVariables('SimpleMappingState', output.sources) + stateDecoder.decodeState(stateVars, storageViewer).then((result) => { + console.log(result) + }) + } + }) + } + }) +} + +/* + Init VM / Send Transaction +*/ +function initVM (st, privateKey) { + var remixLib = require('remix-lib') + var utileth = require('ethereumjs-util') + var VM = require('ethereumjs-vm') + var Web3Providers = remixLib.vm.Web3Providers + var address = utileth.privateToAddress(privateKey) + var vm = new VM({ + enableHomestead: true, + activatePrecompiles: true + }) + vm.stateManager.putAccountBalance(address, 'f00000000000000001', function cb () {}) + var web3Providers = new Web3Providers() + web3Providers.addVM('VM', vm) + web3Providers.get('VM', function (error, obj) { + if (error) { + var mes = 'provider TEST not defined' + console.log(mes) + st.fail(mes) + } else { + global.web3 = obj + st.end() + } + }) + return vm +} diff --git a/remix-solidity/test/decoder/localsTests/vmCall.js b/remix-solidity/test/decoder/vmCall.js similarity index 89% rename from remix-solidity/test/decoder/localsTests/vmCall.js rename to remix-solidity/test/decoder/vmCall.js index 6f9fb83f06..dc7906960a 100644 --- a/remix-solidity/test/decoder/localsTests/vmCall.js +++ b/remix-solidity/test/decoder/vmCall.js @@ -23,7 +23,9 @@ function sendTx (vm, from, to, value, data, cb) { uncleHeaders: [] }) vm.runTx({block: block, tx: tx, skipBalance: true, skipNonce: true}, function (error, result) { - cb(error, utileth.bufferToHex(tx.hash())) + setTimeout(() => { + cb(error, utileth.bufferToHex(tx.hash())) + }, 500) }) } diff --git a/remix-solidity/test/tests.js b/remix-solidity/test/tests.js index 97853ca9f8..567441f311 100644 --- a/remix-solidity/test/tests.js +++ b/remix-solidity/test/tests.js @@ -1,7 +1,7 @@ -require('./decoder/decodeInfo.js') -require('./decoder/storageLocation.js') +// require('./decoder/decodeInfo.js') +// require('./decoder/storageLocation.js') require('./decoder/storageDecoder.js') -require('./decoder/localDecoder.js') +// require('./decoder/localDecoder.js') -require('./analysis/staticAnalysisCommon-test.js') -require('./analysis/staticAnalysisIntegration-test.js') +// require('./analysis/staticAnalysisCommon-test.js') +// require('./analysis/staticAnalysisIntegration-test.js')