|
|
|
@ -11,12 +11,14 @@ tape('solidity', function (t) { |
|
|
|
|
testIntStorage(st, function () { |
|
|
|
|
testByteStorage(st, function () { |
|
|
|
|
testStructArrayStorage(st, function () { |
|
|
|
|
testMappingStorage(st, function () { |
|
|
|
|
st.end() |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
function testIntStorage (st, cb) { |
|
|
|
|
var intStorage = require('./contracts/intStorage') |
|
|
|
@ -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 |
|
|
|
|
} |
|
|
|
|