test mapping decoding

pull/3094/head
yann300 7 years ago
parent 389efd959b
commit 99e4e584c4
  1. 2
      remix-solidity/test/decoder/contracts/mappingStorage.js
  2. 67
      remix-solidity/test/decoder/storageDecoder.js

@ -5,9 +5,11 @@ module.exports = {
contract SimpleMappingState { contract SimpleMappingState {
uint _num; uint _num;
mapping(string => uint) _iBreakSolidityState; mapping(string => uint) _iBreakSolidityState;
mapping(uint => uint) _iBreakSolidityStateInt;
function updateNum(uint num, string str) public { function updateNum(uint num, string str) public {
_num = num; _num = num;
_iBreakSolidityState[str] = num; _iBreakSolidityState[str] = num;
_iBreakSolidityStateInt[num] = num;
} }
} }
` `

@ -286,25 +286,12 @@ function testMappingStorage (st, cb) {
console.log(error) console.log(error)
st.end(error) st.end(error)
} else { } else {
vmSendTx(vm, {nonce: 1, privateKey: privateKey}, null, 0, '2fd0a83a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001074686973206973206120737472696e6700000000000000000000000000000000', remixLib.global.web3.eth.getTransaction(txHash, (error, tx) => {
function (error, txHash) {
if (error) { if (error) {
console.log(error)
st.end(error) st.end(error)
} else { } else {
console.log(txHash) testMapping(st, vm, privateKey, tx.contractAddress, output, (error) => {
var TraceManager = require('remix-core').trace.TraceManager st.end(error)
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)
}) })
} }
}) })
@ -334,9 +321,55 @@ function initVM (st, privateKey) {
console.log(mes) console.log(mes)
st.fail(mes) st.fail(mes)
} else { } else {
global.web3 = obj remixLib.global.web3 = obj
st.end() st.end()
} }
}) })
return vm return vm
} }
function testMapping (st, vm, privateKey, contractAddress, output, cb) {
var vmSendTx = require('./vmCall')
vmSendTx(vm, {nonce: 1, privateKey: privateKey}, contractAddress, 0, '2fd0a83a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000001074686973206973206120737472696e6700000000000000000000000000000000',
function (error, txHash) {
if (error) {
console.log(error)
st.end(error)
} else {
console.log(txHash)
remixLib.global.web3.eth.getTransaction(txHash, (error, tx) => {
if (error) {
st.end(error)
} else {
var TraceManager = require('remix-core').trace.TraceManager
var traceManager = new TraceManager()
traceManager.resolveTrace(tx, () => {
var StorageResolver = require('remix-core').storage.StorageResolver
var StorageViewer = require('remix-core').storage.StorageViewer
var storageViewer = new StorageViewer({
stepIndex: 199,
tx: tx,
address: contractAddress
}, new StorageResolver(), traceManager)
var stateVars = stateDecoder.extractStateVariables('SimpleMappingState', output.sources)
stateDecoder.decodeState(stateVars, storageViewer).then((result) => {
console.log('ok', JSON.stringify(result))
st.equal(result['_num'].value, '1')
st.equal(result['_num'].type, 'uint256')
st.equal(result['_iBreakSolidityState'].type, 'mapping(string => uint256)')
st.equal(result['_iBreakSolidityState'].value['74686973206973206120737472696e67'].value, '1')
st.equal(result['_iBreakSolidityState'].value['74686973206973206120737472696e67'].type, 'uint256')
st.equal(result['_iBreakSolidityStateInt'].type, 'mapping(uint256 => uint256)')
st.equal(result['_iBreakSolidityStateInt'].value['0000000000000000000000000000000000000000000000000000000000000001'].value, '1')
st.equal(result['_iBreakSolidityStateInt'].value['0000000000000000000000000000000000000000000000000000000000000001'].type, 'uint256')
// st.end()
}, (reason) => {
console.log('fail')
st.end(reason)
})
})
}
})
}
})
}

Loading…
Cancel
Save