11'use strict'
2-
3- import deepequal from 'deep-equal'
4- import * as sourceMappingDecoder from '../../../src/source/sourceMappingDecoder'
5- import * as vmCall from '../../vmCall'
6- import { TraceManager } from '../../../src/trace/traceManager'
7- import { CodeManager } from '../../../src/code/codeManager'
8- import { SolidityProxy } from '../../../src/solidity-decoder/solidityProxy'
9- import { InternalCallTree } from '../../../src/solidity-decoder/internalCallTree'
10- import { EventManager } from '../../../src/eventManager'
112import * as helper from './helper'
123
134module . exports = async function ( st , privateKey , contractBytecode , compilationResult , contractCode ) {
14- let txHash
15- let web3
165 try {
17- web3 = await ( vmCall as any ) . getWeb3 ( )
18- const hash = await ( vmCall as any ) . sendTx ( web3 , { nonce : 0 , privateKey : privateKey } , undefined , 0 , contractBytecode )
19- const receipt = await web3 . getTransactionReceipt ( hash )
20- const to = receipt . contractAddress
21- console . log ( 'to' , to )
22- // call to level11
23- txHash = await ( vmCall as any ) . sendTx ( web3 , { nonce : 1 , privateKey : privateKey } , to , 0 , 'a372a595000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000000' )
24- } catch ( e ) {
25- return st . fail ( e )
26- }
27- return new Promise ( ( resolve ) => {
28- web3 . getTransaction ( txHash )
29- . then ( tx => {
30- const traceManager = new TraceManager ( { web3 } )
31- const codeManager = new CodeManager ( traceManager )
32- codeManager . clear ( )
33- const solidityProxy = new SolidityProxy ( {
34- getCurrentCalledAddressAt : traceManager . getCurrentCalledAddressAt . bind ( traceManager ) ,
35- getCode : codeManager . getCode . bind ( codeManager ) ,
36- compilationResult : ( ) => compilationResult
37- } )
38- const debuggerEvent = new EventManager ( )
39- const offsetToLineColumnConverter = {
40- offsetToLineColumn : ( rawLocation ) => {
41- return new Promise ( ( resolve ) => {
42- const lineBreaks = sourceMappingDecoder . getLinebreakPositions ( contractCode )
43- resolve ( sourceMappingDecoder . convertOffsetToLineColumn ( rawLocation , lineBreaks ) )
44- } )
45- }
6+ const txData = 'a372a595000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001520000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015400000000000000000000000000000000000000000000000000000000000000'
7+
8+ const { traceManager, callTree, waitForCallTree } = await helper . setupDebugger ( privateKey , contractBytecode , compilationResult , contractCode , txData )
9+
10+ await waitForCallTree ( )
11+
12+ await helper . decodeLocals ( st , 140 , traceManager , callTree , function ( locals ) {
13+ try {
14+ const expected = {
15+ "p" : { "value" : "45" , "type" : "uint256" } ,
16+ "foo" : { "length" : "1" , "value" : [ { "value" : "3" , "type" : "uint8" } ] , "type" : "uint8[1]" } ,
17+ "boo" : { "length" : "1" , "value" : [ { "length" : "2" , "value" : [ { "value" : "R" , "type" : "string" } , { "value" : "T" , "type" : "string" } ] , "type" : "string[2]" } ] , "type" : "string[2][1]" }
4618 }
47- const callTree = new InternalCallTree ( debuggerEvent , traceManager , solidityProxy , codeManager , { includeLocalVariables : true } , offsetToLineColumnConverter )
48- callTree . event . register ( 'callTreeBuildFailed' , ( error ) => {
49- st . fail ( error )
50- } )
51- callTree . event . register ( 'callTreeNotReady' , ( reason ) => {
52- st . fail ( reason )
53- } )
54- callTree . event . register ( 'callTreeReady' , ( ) => {
55- helper . decodeLocals ( st , 140 , traceManager , callTree , function ( locals ) {
56- try {
57- const expected = { "p" :{ "value" :"45" , "type" :"uint256" } , "foo" :{ "length" :"1" , "value" :[ { "value" :"3" , "type" :"uint8" } ] , "type" :"uint8[1]" } , "boo" :{ "length" :"1" , "value" :[ { "length" :"2" , "value" :[ { "value" :"R" , "type" :"string" } , { "value" :"T" , "type" :"string" } ] , "type" :"string[2]" } ] , "type" :"string[2][1]" } }
58- st . deepEqual ( locals , expected )
59- } catch ( e ) {
60- st . fail ( e . message )
61- }
62- resolve ( { } )
63- } )
64- } )
19+ st . deepEqual ( locals , expected )
20+ } catch ( e ) {
21+ st . fail ( e . message )
22+ }
23+ } )
6524
66- traceManager . resolveTrace ( tx ) . then ( ( ) => {
67- debuggerEvent . trigger ( 'newTraceLoaded' , [ traceManager . trace ] )
68- } ) . catch ( ( error ) => {
69- st . fail ( error )
70- } )
71- } )
72- . catch ( error => st . fail ( error ) )
73- } )
25+ } catch ( error ) {
26+ st . fail ( error )
27+ }
7428}
0 commit comments