From f0a2e6e5f7bc6a0c56bd98815072dfa2008ce383 Mon Sep 17 00:00:00 2001 From: yann300 Date: Wed, 15 Mar 2017 10:31:31 +0100 Subject: [PATCH] fix tests --- src/solidity/types/Struct.js | 5 +- test/solidity/mockStorageResolver.js | 38 +++ test/solidity/storageDecoder.js | 450 ++++++++++++++------------- test/traceManager.js | 8 +- 4 files changed, 276 insertions(+), 225 deletions(-) create mode 100644 test/solidity/mockStorageResolver.js diff --git a/src/solidity/types/Struct.js b/src/solidity/types/Struct.js index 013c6e2baa..34cf1e1a8c 100644 --- a/src/solidity/types/Struct.js +++ b/src/solidity/types/Struct.js @@ -10,13 +10,14 @@ class Struct extends RefType { async decodeFromStorage (location, storageResolver) { var ret = {} - this.members.map(async (item, i) => { + for (var k in this.members) { + var item = this.members[k] var globalLocation = { offset: location.offset + item.storagelocation.offset, slot: util.add(location.slot, item.storagelocation.slot) } ret[item.name] = await item.type.decodeFromStorage(globalLocation, storageResolver) - }) + } return { value: ret, type: this.typeName diff --git a/test/solidity/mockStorageResolver.js b/test/solidity/mockStorageResolver.js new file mode 100644 index 0000000000..5061d84d56 --- /dev/null +++ b/test/solidity/mockStorageResolver.js @@ -0,0 +1,38 @@ +'use strict' +var util = require('../../babelify-src/helpers/util') + +class MockStorageResolver { + constructor (_storage) { + this.storage = {} + for (var k in _storage) { + var hashed = util.sha3(k) + this.storage[hashed] = { + hashed: hashed, + key: k, + value: _storage[k] + } + } + } + + storageRange (callback) { + callback(null, this.storage) + } + + storageSlot (slot, callback) { + var hashed = util.sha3(slot) + callback(null, this.storage[hashed]) + } + + isComplete (address) { + return true + } + + fromCache (address, slotKey) { + return this.storage[slotKey] + } + + toCache (address, storage, complete) { + } +} + +module.exports = MockStorageResolver diff --git a/test/solidity/storageDecoder.js b/test/solidity/storageDecoder.js index 8abeb9fb31..b2cca0052d 100644 --- a/test/solidity/storageDecoder.js +++ b/test/solidity/storageDecoder.js @@ -2,150 +2,166 @@ var tape = require('tape') var compiler = require('solc') var stateDecoder = require('../../src/index').solidity.stateDecoder +var MockStorageResolver = require('./mockStorageResolver') tape('solidity', function (t) { t.test('storage decoder', function (st) { - testIntStorage(st) - testByteStorage(st) - testStructArrayStorage(st) - st.end() + testIntStorage(st, function () { + testByteStorage(st, function () { + testStructArrayStorage(st, function () { + st.end() + }) + }) + }) }) }) -function testIntStorage (st) { +function testIntStorage (st, cb) { var intStorage = require('./contracts/intStorage') var output = compiler.compile(intStorage.contract, 0) + var mockStorageResolver for (var storage of [intStorage.fullStorage, shrinkStorage(intStorage.fullStorage)]) { - var decoded = stateDecoder.solidityState(storage, output.sources, 'intStorage') - st.equal(decoded['ui8'].value, '130') - st.equal(decoded['ui16'].value, '456') - st.equal(decoded['ui32'].value, '4356') - st.equal(decoded['ui64'].value, '3543543543') - st.equal(decoded['ui128'].value, '234567') - st.equal(decoded['ui256'].value, '115792089237316195423570985008687907853269984665640564039457584007880697216513') - st.equal(decoded['ui'].value, '123545666') - st.equal(decoded['i8'].value, '-45') - st.equal(decoded['i16'].value, '-1234') - st.equal(decoded['i32'].value, '3455') - st.equal(decoded['i64'].value, '-35566') - st.equal(decoded['i128'].value, '-444444') - st.equal(decoded['i256'].value, '3434343') - st.equal(decoded['i'].value, '-32432423423') - st.equal(decoded['ishrink'].value, '2') + mockStorageResolver = new MockStorageResolver(storage) + stateDecoder.solidityState(mockStorageResolver, output.sources, 'intStorage').then((decoded) => { + st.equal(decoded['ui8'].value, '130') + st.equal(decoded['ui16'].value, '456') + st.equal(decoded['ui32'].value, '4356') + st.equal(decoded['ui64'].value, '3543543543') + st.equal(decoded['ui128'].value, '234567') + st.equal(decoded['ui256'].value, '115792089237316195423570985008687907853269984665640564039457584007880697216513') + st.equal(decoded['ui'].value, '123545666') + st.equal(decoded['i8'].value, '-45') + st.equal(decoded['i16'].value, '-1234') + st.equal(decoded['i32'].value, '3455') + st.equal(decoded['i64'].value, '-35566') + st.equal(decoded['i128'].value, '-444444') + st.equal(decoded['i256'].value, '3434343') + st.equal(decoded['i'].value, '-32432423423') + st.equal(decoded['ishrink'].value, '2') + }) } - decoded = stateDecoder.solidityState({}, output.sources, 'intStorage') - st.equal(decoded['ui8'].value, '0') - st.equal(decoded['ui16'].value, '0') - st.equal(decoded['ui32'].value, '0') - st.equal(decoded['ui64'].value, '0') - st.equal(decoded['ui128'].value, '0') - st.equal(decoded['ui256'].value, '0') - st.equal(decoded['ui'].value, '0') - st.equal(decoded['i8'].value, '0') - st.equal(decoded['i16'].value, '0') - st.equal(decoded['i32'].value, '0') - st.equal(decoded['i64'].value, '0') - st.equal(decoded['i128'].value, '0') - st.equal(decoded['i256'].value, '0') - st.equal(decoded['i'].value, '0') - st.equal(decoded['ishrink'].value, '0') + mockStorageResolver = new MockStorageResolver({}) + stateDecoder.solidityState(mockStorageResolver, output.sources, 'intStorage').then((decoded) => { + st.equal(decoded['ui8'].value, '0') + st.equal(decoded['ui16'].value, '0') + st.equal(decoded['ui32'].value, '0') + st.equal(decoded['ui64'].value, '0') + st.equal(decoded['ui128'].value, '0') + st.equal(decoded['ui256'].value, '0') + st.equal(decoded['ui'].value, '0') + st.equal(decoded['i8'].value, '0') + st.equal(decoded['i16'].value, '0') + st.equal(decoded['i32'].value, '0') + st.equal(decoded['i64'].value, '0') + st.equal(decoded['i128'].value, '0') + st.equal(decoded['i256'].value, '0') + st.equal(decoded['i'].value, '0') + st.equal(decoded['ishrink'].value, '0') + cb() + }) } -function testByteStorage (st) { +function testByteStorage (st, cb) { var byteStorage = require('./contracts/byteStorage') var output = compiler.compile(byteStorage.contract, 0) + var mockStorageResolver for (var storage of [byteStorage.storage, shrinkStorage(byteStorage.storage)]) { - var decoded = stateDecoder.solidityState(storage, output.sources, 'byteStorage') - st.equal(decoded['b1'].value, false) - st.equal(decoded['a1'].value, '0xFE350F199F244AC9A79038D254400B632A633225') - st.equal(decoded['b2'].value, true) - st.equal(decoded['dynb1'].value, '0x64796e616d69636279746573') - st.equal(decoded['dynb1'].length, '0xc') - st.equal(decoded['stab'].value, '0x01') - st.equal(decoded['stab1'].value, '0x12') - st.equal(decoded['stab2'].value, '0x1579') - st.equal(decoded['stab3'].value, '0x359356') - st.equal(decoded['stab4'].value, '0x23750000') - st.equal(decoded['stab5'].value, '0x0235764500') - st.equal(decoded['stab6'].value, '0x324435000000') - st.equal(decoded['stab7'].value, '0x00432400000000') - st.equal(decoded['stab8'].value, '0x3245546457650000') - st.equal(decoded['stab9'].value, '0x034345430000000000') - st.equal(decoded['stab10'].value, '0x04543543654657000000') - st.equal(decoded['stab11'].value, '0x5435465400000000000000') - st.equal(decoded['stab12'].value, '0x030000000000000000000000') - st.equal(decoded['stab13'].value, '0x03243242345435000000000000') - st.equal(decoded['stab14'].value, '0x3245435435435300000000000000') - st.equal(decoded['stab15'].value, '0x032454434435000000000000000000') - st.equal(decoded['stab16'].value, '0x32454354440000000000000000000000') - st.equal(decoded['stab17'].value, '0x0324543432432432450000000000000000') - st.equal(decoded['stab18'].value, '0x032453432543543500000000000000000000') - st.equal(decoded['stab19'].value, '0x03245434354354350000000000000000000000') - st.equal(decoded['stab20'].value, '0x032454543543AB35000000000000000000000000') - st.equal(decoded['stab21'].value, '0x324544324234350000000000000000000000000000') - st.equal(decoded['stab22'].value, '0x324543AEF50000000000000000000000000000000000') - st.equal(decoded['stab23'].value, '0x3245435FFF000000000000000000000000000000000000') - st.equal(decoded['stab24'].value, '0x3245435F0000000000000000000000000000000000000000') - st.equal(decoded['stab25'].value, '0x3245435F000000000000000000000000000000000000000000') - st.equal(decoded['stab26'].value, '0x3245435F00000000000000000000000000000000000000000000') - st.equal(decoded['stab27'].value, '0x03245FFFFFFF000000000000000000000000000000000000000000') - st.equal(decoded['stab28'].value, '0x03241235000000000000000000000000000000000000000000000000') - st.equal(decoded['stab29'].value, '0x0325213213000000000000000000000000000000000000000000000000') - st.equal(decoded['stab30'].value, '0x032454352324230000000000000000000000000000000000000000000000') - st.equal(decoded['stab31'].value, '0x32454351230000000000000000000000000000000000000000000000000000') - st.equal(decoded['stab32'].value, '0x324324423432543543AB00000000000000000000000000000000000000000000') - st.equal(decoded['enumDec'].value, 'e240') - st.equal(decoded['str1'].value, 'short') - st.equal(decoded['str12'].value, 'шеллы') - st.equal(decoded['str2'].value, 'long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long') + mockStorageResolver = new MockStorageResolver(storage) + stateDecoder.solidityState(mockStorageResolver, output.sources, 'byteStorage').then((decoded) => { + st.equal(decoded['b1'].value, false) + st.equal(decoded['a1'].value, '0xFE350F199F244AC9A79038D254400B632A633225') + st.equal(decoded['b2'].value, true) + st.equal(decoded['dynb1'].value, '0x64796e616d69636279746573') + st.equal(decoded['dynb1'].length, '0xc') + st.equal(decoded['stab'].value, '0x01') + st.equal(decoded['stab1'].value, '0x12') + st.equal(decoded['stab2'].value, '0x1579') + st.equal(decoded['stab3'].value, '0x359356') + st.equal(decoded['stab4'].value, '0x23750000') + st.equal(decoded['stab5'].value, '0x0235764500') + st.equal(decoded['stab6'].value, '0x324435000000') + st.equal(decoded['stab7'].value, '0x00432400000000') + st.equal(decoded['stab8'].value, '0x3245546457650000') + st.equal(decoded['stab9'].value, '0x034345430000000000') + st.equal(decoded['stab10'].value, '0x04543543654657000000') + st.equal(decoded['stab11'].value, '0x5435465400000000000000') + st.equal(decoded['stab12'].value, '0x030000000000000000000000') + st.equal(decoded['stab13'].value, '0x03243242345435000000000000') + st.equal(decoded['stab14'].value, '0x3245435435435300000000000000') + st.equal(decoded['stab15'].value, '0x032454434435000000000000000000') + st.equal(decoded['stab16'].value, '0x32454354440000000000000000000000') + st.equal(decoded['stab17'].value, '0x0324543432432432450000000000000000') + st.equal(decoded['stab18'].value, '0x032453432543543500000000000000000000') + st.equal(decoded['stab19'].value, '0x03245434354354350000000000000000000000') + st.equal(decoded['stab20'].value, '0x032454543543AB35000000000000000000000000') + st.equal(decoded['stab21'].value, '0x324544324234350000000000000000000000000000') + st.equal(decoded['stab22'].value, '0x324543AEF50000000000000000000000000000000000') + st.equal(decoded['stab23'].value, '0x3245435FFF000000000000000000000000000000000000') + st.equal(decoded['stab24'].value, '0x3245435F0000000000000000000000000000000000000000') + st.equal(decoded['stab25'].value, '0x3245435F000000000000000000000000000000000000000000') + st.equal(decoded['stab26'].value, '0x3245435F00000000000000000000000000000000000000000000') + st.equal(decoded['stab27'].value, '0x03245FFFFFFF000000000000000000000000000000000000000000') + st.equal(decoded['stab28'].value, '0x03241235000000000000000000000000000000000000000000000000') + st.equal(decoded['stab29'].value, '0x0325213213000000000000000000000000000000000000000000000000') + st.equal(decoded['stab30'].value, '0x032454352324230000000000000000000000000000000000000000000000') + st.equal(decoded['stab31'].value, '0x32454351230000000000000000000000000000000000000000000000000000') + st.equal(decoded['stab32'].value, '0x324324423432543543AB00000000000000000000000000000000000000000000') + st.equal(decoded['enumDec'].value, 'e240') + st.equal(decoded['str1'].value, 'short') + st.equal(decoded['str12'].value, 'шеллы') + st.equal(decoded['str2'].value, 'long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long__long') + }) } - decoded = stateDecoder.solidityState({}, output.sources, 'byteStorage') - st.equal(decoded['b1'].value, false) - st.equal(decoded['a1'].value, '0x0000000000000000000000000000000000000000') - st.equal(decoded['b2'].value, false) - st.equal(decoded['dynb1'].value, '0x') - st.equal(decoded['dynb1'].length, '0x0') - st.equal(decoded['stab'].value, '0x00') - st.equal(decoded['stab1'].value, '0x00') - st.equal(decoded['stab2'].value, '0x0000') - st.equal(decoded['stab3'].value, '0x000000') - st.equal(decoded['stab4'].value, '0x00000000') - st.equal(decoded['stab5'].value, '0x0000000000') - st.equal(decoded['stab6'].value, '0x000000000000') - st.equal(decoded['stab7'].value, '0x00000000000000') - st.equal(decoded['stab8'].value, '0x0000000000000000') - st.equal(decoded['stab9'].value, '0x000000000000000000') - st.equal(decoded['stab10'].value, '0x00000000000000000000') - st.equal(decoded['stab11'].value, '0x0000000000000000000000') - st.equal(decoded['stab12'].value, '0x000000000000000000000000') - st.equal(decoded['stab13'].value, '0x00000000000000000000000000') - st.equal(decoded['stab14'].value, '0x0000000000000000000000000000') - st.equal(decoded['stab15'].value, '0x000000000000000000000000000000') - st.equal(decoded['stab16'].value, '0x00000000000000000000000000000000') - st.equal(decoded['stab17'].value, '0x0000000000000000000000000000000000') - st.equal(decoded['stab18'].value, '0x000000000000000000000000000000000000') - st.equal(decoded['stab19'].value, '0x00000000000000000000000000000000000000') - st.equal(decoded['stab20'].value, '0x0000000000000000000000000000000000000000') - st.equal(decoded['stab21'].value, '0x000000000000000000000000000000000000000000') - st.equal(decoded['stab22'].value, '0x00000000000000000000000000000000000000000000') - st.equal(decoded['stab23'].value, '0x0000000000000000000000000000000000000000000000') - st.equal(decoded['stab24'].value, '0x000000000000000000000000000000000000000000000000') - st.equal(decoded['stab25'].value, '0x00000000000000000000000000000000000000000000000000') - st.equal(decoded['stab26'].value, '0x0000000000000000000000000000000000000000000000000000') - st.equal(decoded['stab27'].value, '0x000000000000000000000000000000000000000000000000000000') - st.equal(decoded['stab28'].value, '0x00000000000000000000000000000000000000000000000000000000') - st.equal(decoded['stab29'].value, '0x0000000000000000000000000000000000000000000000000000000000') - st.equal(decoded['stab30'].value, '0x000000000000000000000000000000000000000000000000000000000000') - st.equal(decoded['stab31'].value, '0x00000000000000000000000000000000000000000000000000000000000000') - st.equal(decoded['stab32'].value, '0x0000000000000000000000000000000000000000000000000000000000000000') - st.equal(decoded['enumDec'].value, 'e0') - st.equal(decoded['str1'].length, '0x0') - st.equal(decoded['str2'].length, '0x0') - st.equal(decoded['str1'].value, '') - st.equal(decoded['str12'].value, '') - st.equal(decoded['str2'].value, '') + mockStorageResolver = new MockStorageResolver({}) + stateDecoder.solidityState(mockStorageResolver, output.sources, 'byteStorage').then((decoded) => { + st.equal(decoded['b1'].value, false) + st.equal(decoded['a1'].value, '0x0000000000000000000000000000000000000000') + st.equal(decoded['b2'].value, false) + st.equal(decoded['dynb1'].value, '0x') + st.equal(decoded['dynb1'].length, '0x0') + st.equal(decoded['stab'].value, '0x00') + st.equal(decoded['stab1'].value, '0x00') + st.equal(decoded['stab2'].value, '0x0000') + st.equal(decoded['stab3'].value, '0x000000') + st.equal(decoded['stab4'].value, '0x00000000') + st.equal(decoded['stab5'].value, '0x0000000000') + st.equal(decoded['stab6'].value, '0x000000000000') + st.equal(decoded['stab7'].value, '0x00000000000000') + st.equal(decoded['stab8'].value, '0x0000000000000000') + st.equal(decoded['stab9'].value, '0x000000000000000000') + st.equal(decoded['stab10'].value, '0x00000000000000000000') + st.equal(decoded['stab11'].value, '0x0000000000000000000000') + st.equal(decoded['stab12'].value, '0x000000000000000000000000') + st.equal(decoded['stab13'].value, '0x00000000000000000000000000') + st.equal(decoded['stab14'].value, '0x0000000000000000000000000000') + st.equal(decoded['stab15'].value, '0x000000000000000000000000000000') + st.equal(decoded['stab16'].value, '0x00000000000000000000000000000000') + st.equal(decoded['stab17'].value, '0x0000000000000000000000000000000000') + st.equal(decoded['stab18'].value, '0x000000000000000000000000000000000000') + st.equal(decoded['stab19'].value, '0x00000000000000000000000000000000000000') + st.equal(decoded['stab20'].value, '0x0000000000000000000000000000000000000000') + st.equal(decoded['stab21'].value, '0x000000000000000000000000000000000000000000') + st.equal(decoded['stab22'].value, '0x00000000000000000000000000000000000000000000') + st.equal(decoded['stab23'].value, '0x0000000000000000000000000000000000000000000000') + st.equal(decoded['stab24'].value, '0x000000000000000000000000000000000000000000000000') + st.equal(decoded['stab25'].value, '0x00000000000000000000000000000000000000000000000000') + st.equal(decoded['stab26'].value, '0x0000000000000000000000000000000000000000000000000000') + st.equal(decoded['stab27'].value, '0x000000000000000000000000000000000000000000000000000000') + st.equal(decoded['stab28'].value, '0x00000000000000000000000000000000000000000000000000000000') + st.equal(decoded['stab29'].value, '0x0000000000000000000000000000000000000000000000000000000000') + st.equal(decoded['stab30'].value, '0x000000000000000000000000000000000000000000000000000000000000') + st.equal(decoded['stab31'].value, '0x00000000000000000000000000000000000000000000000000000000000000') + st.equal(decoded['stab32'].value, '0x0000000000000000000000000000000000000000000000000000000000000000') + st.equal(decoded['enumDec'].value, 'e0') + st.equal(decoded['str1'].length, '0x0') + st.equal(decoded['str2'].length, '0x0') + st.equal(decoded['str1'].value, '') + st.equal(decoded['str12'].value, '') + st.equal(decoded['str2'].value, '') + cb() + }) } function shrinkStorage (storage) { @@ -158,99 +174,95 @@ function shrinkStorage (storage) { return shrinkedStorage } -function testStructArrayStorage (st) { +function testStructArrayStorage (st, cb) { var structArrayStorage = require('./contracts/structArrayStorage') var output = compiler.compile(structArrayStorage.contract, 0) - var decoded = stateDecoder.solidityState(structArrayStorage.storage, output.sources, 'structArrayStorage') - st.equal(decoded['intStructDec'].value['i8'].value, '32') - st.equal(decoded['intStructDec'].value['i16'].value, '-54') - st.equal(decoded['intStructDec'].value['ui32'].value, '128') - st.equal(decoded['intStructDec'].value['i256'].value, '-1243565465756') - st.equal(decoded['intStructDec'].value['ui16'].value, '34556') - st.equal(decoded['intStructDec'].value['i32'].value, '-345446546') - - st.equal(decoded['i5'].length, '0x7') - st.equal(decoded['i5'].value[0].value, '-2134') - st.equal(decoded['i5'].value[1].value, '345') - st.equal(decoded['i5'].value[2].value, '-3246') - st.equal(decoded['i5'].value[3].value, '4357') - st.equal(decoded['i5'].value[4].value, '324') - st.equal(decoded['i5'].value[5].value, '-2344') - st.equal(decoded['i5'].value[6].value, '3254') - - st.equal(decoded['idyn5'].length, '0x9') - st.equal(decoded['idyn5'].value[0].value, '-2134') - st.equal(decoded['idyn5'].value[1].value, '345') - st.equal(decoded['idyn5'].value[2].value, '-3246') - st.equal(decoded['idyn5'].value[3].value, '4357') - st.equal(decoded['idyn5'].value[4].value, '324') - st.equal(decoded['idyn5'].value[5].value, '-2344') - st.equal(decoded['idyn5'].value[6].value, '3254') - st.equal(decoded['idyn5'].value[7].value, '-254') - st.equal(decoded['idyn5'].value[8].value, '-2354') - - st.equal(decoded['dyn1'].length, '0x4') - st.equal(decoded['dyn1'].value[0].length, '0x1') - st.equal(decoded['dyn1'].value[0].value[0].value, '3') - - st.equal(decoded['dyn1'].value[1].length, '0x3') - st.equal(decoded['dyn1'].value[1].value[0].value, '12') - st.equal(decoded['dyn1'].value[1].value[1].value, '-12') - st.equal(decoded['dyn1'].value[1].value[2].value, '-1234') - - st.equal(decoded['dyn1'].value[2].length, '0xa') - st.equal(decoded['dyn1'].value[2].value[0].value, '1') - st.equal(decoded['dyn1'].value[2].value[1].value, '12') - st.equal(decoded['dyn1'].value[2].value[2].value, '1235') - st.equal(decoded['dyn1'].value[2].value[3].value, '-12') - st.equal(decoded['dyn1'].value[2].value[4].value, '-123456') - st.equal(decoded['dyn1'].value[2].value[5].value, '-23435435') - st.equal(decoded['dyn1'].value[2].value[6].value, '543543') - st.equal(decoded['dyn1'].value[2].value[7].value, '2') - st.equal(decoded['dyn1'].value[2].value[8].value, '-1') - st.equal(decoded['dyn1'].value[2].value[9].value, '232432') - - st.equal(decoded['dyn1'].value[3].length, '0x2') - st.equal(decoded['dyn1'].value[3].value[0].value, '232432') - st.equal(decoded['dyn1'].value[3].value[0].value, '232432') - - st.equal(decoded['dyn2'].length, '0x2') - st.equal(decoded['dyn2'].value[0].length, '0x4') - st.equal(decoded['dyn2'].value[0].value[0].value[0].value, '23') - st.equal(decoded['dyn2'].value[0].value[0].value[1].value, '-23') - st.equal(decoded['dyn2'].value[0].value[0].value[2].value, '-28') - st.equal(decoded['dyn2'].value[0].value[1].value[0].value, '23') - st.equal(decoded['dyn2'].value[0].value[1].value[1].value, '-23') - st.equal(decoded['dyn2'].value[0].value[1].value[2].value, '-28') - st.equal(decoded['dyn2'].value[0].value[2].value[0].value, '23') - st.equal(decoded['dyn2'].value[0].value[2].value[1].value, '-23') - st.equal(decoded['dyn2'].value[0].value[2].value[2].value, '-28') - st.equal(decoded['dyn2'].value[0].value[3].value[0].value, '23') - st.equal(decoded['dyn2'].value[0].value[3].value[1].value, '-23') - st.equal(decoded['dyn2'].value[0].value[3].value[2].value, '-28') - st.equal(decoded['dyn2'].value[1].length, '0x4') - st.equal(decoded['dyn2'].value[1].value[0].value[0].value, '23') - st.equal(decoded['dyn2'].value[1].value[0].value[1].value, '-23') - st.equal(decoded['dyn2'].value[1].value[0].value[2].value, '-28') - st.equal(decoded['dyn2'].value[1].value[1].value[0].value, '23') - st.equal(decoded['dyn2'].value[1].value[1].value[1].value, '-23') - st.equal(decoded['dyn2'].value[1].value[1].value[2].value, '-28') - st.equal(decoded['dyn2'].value[1].value[2].value[0].value, '23') - st.equal(decoded['dyn2'].value[1].value[2].value[1].value, '-23') - st.equal(decoded['dyn2'].value[1].value[2].value[2].value, '-28') - st.equal(decoded['dyn2'].value[1].value[3].value[0].value, '23') - st.equal(decoded['dyn2'].value[1].value[3].value[1].value, '-23') - st.equal(decoded['dyn2'].value[1].value[3].value[2].value, '-28') - st.equal(decoded['arrayStruct'].value[0].value[0].value.i8.value, '34') - st.equal(decoded['arrayStruct'].value[0].value[0].value.str.value, 'test_str_short') - st.equal(decoded['arrayStruct'].value[0].value[1].value.i8.value, '-123') - st.equal(decoded['arrayStruct'].value[0].value[1].value.str.value, 'test_str_long test_str_lo ngtest_str_longtest_str_ longtest_str_longtest_ str_longtest_str_l ongtest_str_long') - st.equal(decoded['arrayStruct'].value[1].value[0].value.i8.value, '50') - st.equal(decoded['arrayStruct'].value[1].value[0].value.str.value, 'test_str_short') - st.equal(decoded['arrayStruct'].value[2].value[0].value.i8.value, '60') - st.equal(decoded['arrayStruct'].value[2].value[0].value.str.value, 'test_str_short') - st.equal(decoded['arrayStruct'].value[2].value[1].value.i8.value, '84') - st.equal(decoded['arrayStruct'].value[2].value[1].value.str.value, 'test_str_long test_str_lo ngtest_str_longtest_str_ longtest_str_longtest_ str_longtest_str_l ongtest_str_long') - st.equal(decoded['arrayStruct'].value[2].value[2].value.i8.value, '-34') - st.equal(decoded['arrayStruct'].value[2].value[2].value.str.value, 'test_str_short') + var mockStorageResolver = new MockStorageResolver(structArrayStorage.storage) + stateDecoder.solidityState(mockStorageResolver, output.sources, 'structArrayStorage').then((decoded) => { + st.equal(decoded['intStructDec'].value['i8'].value, '32') + st.equal(decoded['intStructDec'].value['i16'].value, '-54') + st.equal(decoded['intStructDec'].value['ui32'].value, '128') + st.equal(decoded['intStructDec'].value['i256'].value, '-1243565465756') + st.equal(decoded['intStructDec'].value['ui16'].value, '34556') + st.equal(decoded['intStructDec'].value['i32'].value, '-345446546') + st.equal(decoded['i5'].length, '0x7') + st.equal(decoded['i5'].value[0].value, '-2134') + st.equal(decoded['i5'].value[1].value, '345') + st.equal(decoded['i5'].value[2].value, '-3246') + st.equal(decoded['i5'].value[3].value, '4357') + st.equal(decoded['i5'].value[4].value, '324') + st.equal(decoded['i5'].value[5].value, '-2344') + st.equal(decoded['i5'].value[6].value, '3254') + st.equal(decoded['idyn5'].length, '0x9') + st.equal(decoded['idyn5'].value[0].value, '-2134') + st.equal(decoded['idyn5'].value[1].value, '345') + st.equal(decoded['idyn5'].value[2].value, '-3246') + st.equal(decoded['idyn5'].value[3].value, '4357') + st.equal(decoded['idyn5'].value[4].value, '324') + st.equal(decoded['idyn5'].value[5].value, '-2344') + st.equal(decoded['idyn5'].value[6].value, '3254') + st.equal(decoded['idyn5'].value[7].value, '-254') + st.equal(decoded['idyn5'].value[8].value, '-2354') + st.equal(decoded['dyn1'].length, '0x4') + st.equal(decoded['dyn1'].value[0].length, '0x1') + st.equal(decoded['dyn1'].value[0].value[0].value, '3') + st.equal(decoded['dyn1'].value[1].length, '0x3') + st.equal(decoded['dyn1'].value[1].value[0].value, '12') + st.equal(decoded['dyn1'].value[1].value[1].value, '-12') + st.equal(decoded['dyn1'].value[1].value[2].value, '-1234') + st.equal(decoded['dyn1'].value[2].length, '0xa') + st.equal(decoded['dyn1'].value[2].value[0].value, '1') + st.equal(decoded['dyn1'].value[2].value[1].value, '12') + st.equal(decoded['dyn1'].value[2].value[2].value, '1235') + st.equal(decoded['dyn1'].value[2].value[3].value, '-12') + st.equal(decoded['dyn1'].value[2].value[4].value, '-123456') + st.equal(decoded['dyn1'].value[2].value[5].value, '-23435435') + st.equal(decoded['dyn1'].value[2].value[6].value, '543543') + st.equal(decoded['dyn1'].value[2].value[7].value, '2') + st.equal(decoded['dyn1'].value[2].value[8].value, '-1') + st.equal(decoded['dyn1'].value[2].value[9].value, '232432') + st.equal(decoded['dyn1'].value[3].length, '0x2') + st.equal(decoded['dyn1'].value[3].value[0].value, '232432') + st.equal(decoded['dyn1'].value[3].value[0].value, '232432') + st.equal(decoded['dyn2'].length, '0x2') + st.equal(decoded['dyn2'].value[0].length, '0x4') + st.equal(decoded['dyn2'].value[0].value[0].value[0].value, '23') + st.equal(decoded['dyn2'].value[0].value[0].value[1].value, '-23') + st.equal(decoded['dyn2'].value[0].value[0].value[2].value, '-28') + st.equal(decoded['dyn2'].value[0].value[1].value[0].value, '23') + st.equal(decoded['dyn2'].value[0].value[1].value[1].value, '-23') + st.equal(decoded['dyn2'].value[0].value[1].value[2].value, '-28') + st.equal(decoded['dyn2'].value[0].value[2].value[0].value, '23') + st.equal(decoded['dyn2'].value[0].value[2].value[1].value, '-23') + st.equal(decoded['dyn2'].value[0].value[2].value[2].value, '-28') + st.equal(decoded['dyn2'].value[0].value[3].value[0].value, '23') + st.equal(decoded['dyn2'].value[0].value[3].value[1].value, '-23') + st.equal(decoded['dyn2'].value[0].value[3].value[2].value, '-28') + st.equal(decoded['dyn2'].value[1].length, '0x4') + st.equal(decoded['dyn2'].value[1].value[0].value[0].value, '23') + st.equal(decoded['dyn2'].value[1].value[0].value[1].value, '-23') + st.equal(decoded['dyn2'].value[1].value[0].value[2].value, '-28') + st.equal(decoded['dyn2'].value[1].value[1].value[0].value, '23') + st.equal(decoded['dyn2'].value[1].value[1].value[1].value, '-23') + st.equal(decoded['dyn2'].value[1].value[1].value[2].value, '-28') + st.equal(decoded['dyn2'].value[1].value[2].value[0].value, '23') + st.equal(decoded['dyn2'].value[1].value[2].value[1].value, '-23') + st.equal(decoded['dyn2'].value[1].value[2].value[2].value, '-28') + st.equal(decoded['dyn2'].value[1].value[3].value[0].value, '23') + st.equal(decoded['dyn2'].value[1].value[3].value[1].value, '-23') + st.equal(decoded['dyn2'].value[1].value[3].value[2].value, '-28') + st.equal(decoded['arrayStruct'].value[0].value[0].value.i8.value, '34') + st.equal(decoded['arrayStruct'].value[0].value[0].value.str.value, 'test_str_short') + st.equal(decoded['arrayStruct'].value[0].value[1].value.i8.value, '-123') + st.equal(decoded['arrayStruct'].value[0].value[1].value.str.value, 'test_str_long test_str_lo ngtest_str_longtest_str_ longtest_str_longtest_ str_longtest_str_l ongtest_str_long') + st.equal(decoded['arrayStruct'].value[1].value[0].value.i8.value, '50') + st.equal(decoded['arrayStruct'].value[1].value[0].value.str.value, 'test_str_short') + st.equal(decoded['arrayStruct'].value[2].value[0].value.i8.value, '60') + st.equal(decoded['arrayStruct'].value[2].value[0].value.str.value, 'test_str_short') + st.equal(decoded['arrayStruct'].value[2].value[1].value.i8.value, '84') + st.equal(decoded['arrayStruct'].value[2].value[1].value.str.value, 'test_str_long test_str_lo ngtest_str_longtest_str_ longtest_str_longtest_ str_longtest_str_l ongtest_str_long') + st.equal(decoded['arrayStruct'].value[2].value[2].value.i8.value, '-34') + st.equal(decoded['arrayStruct'].value[2].value[2].value.str.value, 'test_str_short') + cb() + }) } diff --git a/test/traceManager.js b/test/traceManager.js index 7ac63af98e..1ffac3c617 100644 --- a/test/traceManager.js +++ b/test/traceManager.js @@ -53,13 +53,13 @@ tape('TraceManager', function (t) { st.end() }) - t.test('TraceManager.getStorageAt', function (st) { - var tx = util.web3.eth.getTransaction('0x20ef65b8b186ca942fcccd634f37074dde49b541c27994fc7596740ef44cfd51') - traceManager.getStorageAt(110, tx, function (error, result) { + t.test('TraceManager.resolveStorage', function (st) { + traceManager.resolveStorage(110, '0x0d3a18d64dfe4f927832ab58d6451cecc4e517c5', {}, function (error, result) { if (error) { st.fail(error) } else { - st.ok(result['0x00'] === '0x38') + console.log(JSON.stringify(result)) + st.ok(result['0x290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563'].value === '0x38') st.end() } })