sol-dbg 0.4.2 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/debug/decoding/general.d.ts.map +1 -1
  2. package/dist/debug/decoding/general.js +3 -2
  3. package/dist/debug/decoding/general.js.map +1 -1
  4. package/dist/debug/index.d.ts +1 -1
  5. package/dist/debug/index.d.ts.map +1 -1
  6. package/dist/debug/index.js +1 -1
  7. package/dist/debug/index.js.map +1 -1
  8. package/dist/debug/tracers/base_tracer.d.ts +30 -0
  9. package/dist/debug/tracers/base_tracer.d.ts.map +1 -0
  10. package/dist/debug/tracers/base_tracer.js +108 -0
  11. package/dist/debug/tracers/base_tracer.js.map +1 -0
  12. package/dist/debug/tracers/index.d.ts +4 -0
  13. package/dist/debug/tracers/index.d.ts.map +1 -0
  14. package/dist/debug/tracers/index.js +20 -0
  15. package/dist/debug/tracers/index.js.map +1 -0
  16. package/dist/debug/tracers/sol_debugger.d.ts +9 -0
  17. package/dist/debug/tracers/sol_debugger.d.ts.map +1 -0
  18. package/dist/debug/tracers/sol_debugger.js +22 -0
  19. package/dist/debug/tracers/sol_debugger.js.map +1 -0
  20. package/dist/debug/tracers/transformers/basic_info.d.ts +23 -0
  21. package/dist/debug/tracers/transformers/basic_info.d.ts.map +1 -0
  22. package/dist/debug/tracers/transformers/basic_info.js +52 -0
  23. package/dist/debug/tracers/transformers/basic_info.js.map +1 -0
  24. package/dist/debug/tracers/transformers/events.d.ts +12 -0
  25. package/dist/debug/tracers/transformers/events.d.ts.map +1 -0
  26. package/dist/debug/tracers/transformers/events.js +30 -0
  27. package/dist/debug/tracers/transformers/events.js.map +1 -0
  28. package/dist/debug/tracers/transformers/ext_stack.d.ts +17 -0
  29. package/dist/debug/tracers/transformers/ext_stack.d.ts.map +1 -0
  30. package/dist/debug/tracers/transformers/ext_stack.js +200 -0
  31. package/dist/debug/tracers/transformers/ext_stack.js.map +1 -0
  32. package/dist/debug/tracers/transformers/index.d.ts +10 -0
  33. package/dist/debug/tracers/transformers/index.d.ts.map +1 -0
  34. package/dist/debug/tracers/transformers/index.js +23 -0
  35. package/dist/debug/tracers/transformers/index.js.map +1 -0
  36. package/dist/debug/tracers/transformers/int_stack.d.ts +13 -0
  37. package/dist/debug/tracers/transformers/int_stack.d.ts.map +1 -0
  38. package/dist/debug/tracers/transformers/int_stack.js +139 -0
  39. package/dist/debug/tracers/transformers/int_stack.js.map +1 -0
  40. package/dist/debug/tracers/transformers/op.d.ts +11 -0
  41. package/dist/debug/tracers/transformers/op.d.ts.map +1 -0
  42. package/dist/debug/tracers/transformers/op.js +11 -0
  43. package/dist/debug/tracers/transformers/op.js.map +1 -0
  44. package/dist/debug/tracers/transformers/source.d.ts +26 -0
  45. package/dist/debug/tracers/transformers/source.d.ts.map +1 -0
  46. package/dist/debug/tracers/transformers/source.js +38 -0
  47. package/dist/debug/tracers/transformers/source.js.map +1 -0
  48. package/dist/debug/types.d.ts +3 -6
  49. package/dist/debug/types.d.ts.map +1 -1
  50. package/dist/debug/types.js +8 -0
  51. package/dist/debug/types.js.map +1 -1
  52. package/dist/utils/pp.d.ts +3 -2
  53. package/dist/utils/pp.d.ts.map +1 -1
  54. package/dist/utils/pp.js +21 -9
  55. package/dist/utils/pp.js.map +1 -1
  56. package/package.json +1 -1
  57. package/dist/debug/sol_debugger.d.ts +0 -107
  58. package/dist/debug/sol_debugger.d.ts.map +0 -1
  59. package/dist/debug/sol_debugger.js +0 -521
  60. package/dist/debug/sol_debugger.js.map +0 -1
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.topExtFrame = topExtFrame;
4
+ exports.getContractInfo = getContractInfo;
5
+ exports.getCode = getCode;
6
+ exports.addExternalFrame = addExternalFrame;
7
+ const util_1 = require("@ethereumjs/util");
8
+ const solc_typed_ast_1 = require("solc-typed-ast");
9
+ const artifacts_1 = require("../../../artifacts");
10
+ const utils_1 = require("../../../utils");
11
+ const abi_1 = require("../../abi");
12
+ const opcodes_1 = require("../../opcodes");
13
+ const types_1 = require("../../types");
14
+ function topExtFrame(arg) {
15
+ if ((0, types_1.isFrame)(arg)) {
16
+ return arg.kind === types_1.FrameKind.InternalCall ? arg.nearestExtFrame : arg;
17
+ }
18
+ if (!(arg instanceof Array)) {
19
+ arg = arg.stack;
20
+ }
21
+ (0, solc_typed_ast_1.assert)(arg.length > 0, `Empty stack!`);
22
+ return arg[arg.length - 1];
23
+ }
24
+ function getContractInfo(step) {
25
+ return topExtFrame(step).info;
26
+ }
27
+ function getCode(step) {
28
+ return topExtFrame(step).code;
29
+ }
30
+ /**
31
+ * Given a contract info and a function selector find the (potentially inherited) entry point (function or public var getter).
32
+ * @param info
33
+ * @param selector
34
+ * @returns
35
+ */
36
+ function findEntryPoint(info, selector, artifactManager) {
37
+ if (info.ast === undefined) {
38
+ return undefined;
39
+ }
40
+ const contract = info.ast;
41
+ const infer = artifactManager.infer(info.artifact.compilerVersion);
42
+ return (0, abi_1.findMethodBySelector)(selector, contract, infer);
43
+ }
44
+ /**
45
+ * Build a `CallFrame` from the given `sender` address, `receiver` address, `data` `Uint8Array`, (msg.data) and the current trace step number.
46
+ */
47
+ function makeCallFrame(sender, receiver, codeAddress, data, receiverCode, codeHash, step, artifactManager) {
48
+ const contractInfo = codeHash === undefined ? codeHash : artifactManager.getContractFromMDHash(codeHash);
49
+ const selector = (0, util_1.bytesToHex)(data.slice(0, 4)).slice(2);
50
+ let callee;
51
+ let args;
52
+ if (contractInfo && contractInfo.ast) {
53
+ const abiVersion = contractInfo.artifact.abiEncoderVersion;
54
+ const infer = artifactManager.infer(contractInfo.artifact.compilerVersion);
55
+ callee = findEntryPoint(contractInfo, selector, artifactManager);
56
+ if (callee !== undefined) {
57
+ try {
58
+ args = (0, abi_1.buildMsgDataViews)(callee, data, types_1.DataLocationKind.CallData, infer, abiVersion);
59
+ }
60
+ catch (e) {
61
+ args = undefined;
62
+ }
63
+ }
64
+ }
65
+ return {
66
+ kind: types_1.FrameKind.Call,
67
+ sender, // TODO: This should be Address
68
+ msgData: data,
69
+ receiver: receiver, // TODO: This should be Address
70
+ code: receiverCode,
71
+ info: contractInfo,
72
+ callee,
73
+ address: receiver,
74
+ startStep: step,
75
+ arguments: args,
76
+ codeMdHash: codeHash,
77
+ codeAddress,
78
+ internalFrames: []
79
+ };
80
+ }
81
+ /**
82
+ * Build a `CreationFrame` from the given `sender` address, `data` `Uint8Array`(msg.data) and the current trace step number.
83
+ */
84
+ function makeCreationFrame(sender, data, step, artifactManager) {
85
+ const contractInfo = artifactManager.getContractFromCreationBytecode(data);
86
+ let args;
87
+ const callee = contractInfo && contractInfo.ast ? contractInfo.ast.vConstructor : undefined;
88
+ if (contractInfo && callee instanceof solc_typed_ast_1.FunctionDefinition) {
89
+ // TODO: Try and find the arguments inside the creation code and decode them
90
+ }
91
+ return {
92
+ kind: types_1.FrameKind.Creation,
93
+ sender,
94
+ msgData: data,
95
+ code: data,
96
+ info: contractInfo,
97
+ callee,
98
+ address: utils_1.ZERO_ADDRESS,
99
+ startStep: step,
100
+ arguments: args,
101
+ codeMdHash: (0, artifacts_1.getCreationCodeHash)(data),
102
+ internalFrames: []
103
+ };
104
+ }
105
+ /**
106
+ * Decode a *CALL* instruction. Computes:
107
+ * 1. The receiver address
108
+ * 2. The code address
109
+ * 3. The msg.data
110
+ * @param step
111
+ */
112
+ function decodeCall(step) {
113
+ const op = step.op;
114
+ (0, solc_typed_ast_1.assert)(op.opcode === opcodes_1.OPCODES.CALL ||
115
+ op.opcode === opcodes_1.OPCODES.CALLCODE ||
116
+ op.opcode === opcodes_1.OPCODES.DELEGATECALL ||
117
+ op.opcode === opcodes_1.OPCODES.STATICCALL, `Unexpected call instruction {0}`, op.mnemonic);
118
+ const stackTop = step.evmStack.length - 1;
119
+ const argStackOff = op.opcode === opcodes_1.OPCODES.CALL || op.opcode === opcodes_1.OPCODES.CALLCODE ? 3 : 2;
120
+ const argSizeStackOff = argStackOff + 1;
121
+ const receiverArg = (0, utils_1.wordToAddress)(step.evmStack[stackTop - 1]);
122
+ const argOff = (0, utils_1.bigEndianBufToNumber)(step.evmStack[stackTop - argStackOff]);
123
+ const argSize = (0, utils_1.bigEndianBufToNumber)(step.evmStack[stackTop - argSizeStackOff]);
124
+ const receiver = op.opcode === opcodes_1.OPCODES.DELEGATECALL ? step.address : receiverArg;
125
+ const codeAddr = receiverArg;
126
+ const msgData = step.memory.slice(argOff, argOff + argSize);
127
+ return [receiver, codeAddr, msgData];
128
+ }
129
+ /**
130
+ * Adds external frame info for each step
131
+ */
132
+ async function addExternalFrame(vm, step, state, trace, artifactManager, tx) {
133
+ let extFrame;
134
+ if (trace.length === 0) {
135
+ const sender = tx.getSenderAddress();
136
+ if (tx.to === undefined) {
137
+ extFrame = makeCreationFrame(sender, tx.data, 0, artifactManager);
138
+ }
139
+ else {
140
+ const code = await vm.stateManager.getContractCode(tx.to);
141
+ /// @todo remove - arbitrary restriction, only good for debugging
142
+ (0, solc_typed_ast_1.assert)(code.length > 0, "Missing code for address {0}", tx.to.toString());
143
+ const codeHash = (0, artifacts_1.getCodeHash)(code);
144
+ extFrame = makeCallFrame(sender, tx.to, tx.to, tx.data, code, codeHash, 0, artifactManager);
145
+ }
146
+ return {
147
+ stack: [extFrame],
148
+ ...state
149
+ };
150
+ }
151
+ const lastStep = trace[trace.length - 1];
152
+ if (lastStep.depth === state.depth) {
153
+ return {
154
+ stack: lastStep.stack,
155
+ ...state
156
+ };
157
+ }
158
+ const lastStackTop = lastStep.evmStack.length - 1;
159
+ const lastOp = lastStep.op;
160
+ if (state.depth > lastStep.depth) {
161
+ (0, solc_typed_ast_1.assert)(state.depth === lastStep.depth + 1, `Unexpected depth increase by more than 1 on step {0}`, trace.length);
162
+ (0, solc_typed_ast_1.assert)((0, opcodes_1.increasesDepth)(lastOp), `Unexpected depth increase on op ${lastOp.mnemonic}`);
163
+ if ((0, opcodes_1.createsContract)(lastOp)) {
164
+ // Contract creation call
165
+ const off = (0, utils_1.bigEndianBufToNumber)(lastStep.evmStack[lastStackTop - 1]);
166
+ const size = (0, utils_1.bigEndianBufToNumber)(lastStep.evmStack[lastStackTop - 2]);
167
+ const creationBytecode = lastStep.memory.slice(off, off + size);
168
+ extFrame = makeCreationFrame(lastStep.address, creationBytecode, trace.length, artifactManager);
169
+ }
170
+ else {
171
+ const [receiver, codeAddr, msgData] = decodeCall(lastStep);
172
+ const code = await vm.stateManager.getContractCode(codeAddr);
173
+ const codeHash = (0, artifacts_1.getCodeHash)(code);
174
+ extFrame = await makeCallFrame(lastStep.address, receiver, codeAddr, msgData, code, codeHash, trace.length, artifactManager);
175
+ }
176
+ return {
177
+ stack: [...lastStep.stack, extFrame],
178
+ ...state
179
+ };
180
+ }
181
+ else {
182
+ const stack = [...lastStep.stack];
183
+ // External return or exception
184
+ let nFramesPopped = lastStep.depth - state.depth;
185
+ // Pop as many external frames as neccessary to match the decrease in
186
+ // depth reported by web3. We need the loop since we don't count the internal frames as decreasing depth
187
+ while (nFramesPopped > 0 && stack.length > 0) {
188
+ const topFrame = stack[stack.length - 1];
189
+ if (topFrame.kind === types_1.FrameKind.Creation || topFrame.kind === types_1.FrameKind.Call) {
190
+ nFramesPopped--;
191
+ }
192
+ stack.pop();
193
+ }
194
+ return {
195
+ stack: stack,
196
+ ...state
197
+ };
198
+ }
199
+ }
200
+ //# sourceMappingURL=ext_stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ext_stack.js","sourceRoot":"","sources":["../../../../src/debug/tracers/transformers/ext_stack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { InterpreterStep } from "@ethereumjs/evm";
2
+ import { VM } from "@ethereumjs/vm";
3
+ export type TransformerF<T extends object, T1 extends T> = (vm: VM, step: InterpreterStep, state: T, trace: T1[]) => T1;
4
+ export * from "./basic_info";
5
+ export * from "./events";
6
+ export * from "./ext_stack";
7
+ export * from "./int_stack";
8
+ export * from "./op";
9
+ export * from "./source";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/debug/tracers/transformers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,SAAS,CAAC,IAAI,CACvD,EAAE,EAAE,EAAE,EACN,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,CAAC,EACR,KAAK,EAAE,EAAE,EAAE,KACV,EAAE,CAAC;AAER,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,MAAM,CAAC;AACrB,cAAc,UAAU,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./basic_info"), exports);
18
+ __exportStar(require("./events"), exports);
19
+ __exportStar(require("./ext_stack"), exports);
20
+ __exportStar(require("./int_stack"), exports);
21
+ __exportStar(require("./op"), exports);
22
+ __exportStar(require("./source"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/debug/tracers/transformers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAUA,+CAA6B;AAC7B,2CAAyB;AACzB,8CAA4B;AAC5B,8CAA4B;AAC5B,uCAAqB;AACrB,2CAAyB"}
@@ -0,0 +1,13 @@
1
+ import { InterpreterStep } from "@ethereumjs/evm";
2
+ import { VM } from "@ethereumjs/vm";
3
+ import { IArtifactManager } from "../../artifact_manager";
4
+ import { ExternalFrame, Frame } from "../../types";
5
+ import { BasicStepInfo } from "./basic_info";
6
+ import { ExternalFrameInfo } from "./ext_stack";
7
+ import { SourceInfo } from "./source";
8
+ export declare function topFrame(stack: ExternalFrame[] | ExternalFrameInfo): Frame;
9
+ /**
10
+ * Adds external frame info for each step
11
+ */
12
+ export declare function addInternalFrame<T extends object & BasicStepInfo & ExternalFrameInfo & SourceInfo>(vm: VM, step: InterpreterStep, state: T, trace: T[], artifactManager: IArtifactManager, strict: boolean): Promise<T>;
13
+ //# sourceMappingURL=int_stack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"int_stack.d.ts","sourceRoot":"","sources":["../../../../src/debug/tracers/transformers/int_stack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC,OAAO,EAAgB,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAExE,OAAO,EAGH,aAAa,EACb,KAAK,EAIR,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAe,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,iBAAiB,GAAG,KAAK,CAQ1E;AA2DD;;GAEG;AACH,wBAAsB,gBAAgB,CAClC,CAAC,SAAS,MAAM,GAAG,aAAa,GAAG,iBAAiB,GAAG,UAAU,EAEjE,EAAE,EAAE,EAAE,EACN,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,CAAC,EACR,KAAK,EAAE,CAAC,EAAE,EACV,eAAe,EAAE,gBAAgB,EACjC,MAAM,EAAE,OAAO,GAChB,OAAO,CAAC,CAAC,CAAC,CAkGZ"}
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.topFrame = topFrame;
4
+ exports.addInternalFrame = addInternalFrame;
5
+ const solc_typed_ast_1 = require("solc-typed-ast");
6
+ const decoding_1 = require("../../decoding");
7
+ const types_1 = require("../../types");
8
+ const ext_stack_1 = require("./ext_stack");
9
+ function topFrame(stack) {
10
+ const topExt = (0, ext_stack_1.topExtFrame)(stack);
11
+ if (topExt.internalFrames === undefined || topExt.internalFrames.length === 0) {
12
+ return topExt;
13
+ }
14
+ return topExt.internalFrames[topExt.internalFrames.length - 1];
15
+ }
16
+ /**
17
+ * WIP: TODO document
18
+ */
19
+ function buildFunArgViews(callee, stack, contractInfo, artifactManager) {
20
+ const res = [];
21
+ let formals;
22
+ const infer = artifactManager.infer(contractInfo.artifact.compilerVersion);
23
+ try {
24
+ formals =
25
+ callee instanceof solc_typed_ast_1.FunctionDefinition
26
+ ? callee.vParameters.vParameters.map((argDef) => [
27
+ argDef.name,
28
+ infer.variableDeclarationToTypeNode(argDef)
29
+ ])
30
+ : infer
31
+ .getterArgsAndReturn(callee)[0]
32
+ .map((typ, i) => [`ARG_${i}`, typ]);
33
+ }
34
+ catch (e) {
35
+ // `variableDeclarationToTypeNode` may fail when referencing structs/contracts that are defined
36
+ // in SourceUnits that are missing
37
+ return undefined;
38
+ }
39
+ let offsetFromTop = -1;
40
+ for (let i = formals.length - 1; i >= 0; i--) {
41
+ const [name, typ] = formals[i];
42
+ const stackSize = (0, decoding_1.isCalldataType2Slots)(typ) ? 2 : 1;
43
+ offsetFromTop += stackSize;
44
+ if (offsetFromTop > stack.length) {
45
+ // Stack underflow. Could be due to optimized code?
46
+ return undefined;
47
+ }
48
+ res.unshift([
49
+ name,
50
+ {
51
+ type: typ,
52
+ loc: {
53
+ kind: types_1.DataLocationKind.Stack,
54
+ offsetFromTop
55
+ }
56
+ }
57
+ ]);
58
+ }
59
+ return res;
60
+ }
61
+ /**
62
+ * Adds external frame info for each step
63
+ */
64
+ async function addInternalFrame(vm, step, state, trace, artifactManager, strict) {
65
+ // No internal stack frame on first step of trace
66
+ if (trace.length === 0) {
67
+ return state;
68
+ }
69
+ const lastStep = trace[trace.length - 1];
70
+ // External call/return - no change to internal stack
71
+ if (lastStep.depth !== state.depth) {
72
+ return state;
73
+ }
74
+ // There are 2 ways to enter an internal function:
75
+ let enteringInternalFun = false;
76
+ // 1. Jumping into an internal function (the previous instruction is a JUMP with source map jump index i)
77
+ if (state.op.mnemonic === "JUMPDEST" &&
78
+ lastStep.op.mnemonic === "JUMP" &&
79
+ lastStep.src &&
80
+ lastStep.src.jump === "i") {
81
+ enteringInternalFun = true;
82
+ }
83
+ const ast = state.astNode;
84
+ const curExtFrame = (0, ext_stack_1.topExtFrame)(state.stack);
85
+ // 2. Fall-through (the previous instruction is literally the pervious instruction in the contract body,
86
+ // AND the current JUMPDEST corresponds to a whole function, AND the pervious instructions' callee is different
87
+ // from the current instruction's function.
88
+ if (!enteringInternalFun &&
89
+ state.op.mnemonic === "JUMPDEST" &&
90
+ (ast instanceof solc_typed_ast_1.FunctionDefinition ||
91
+ (ast instanceof solc_typed_ast_1.VariableDeclaration && ast.stateVariable)) &&
92
+ topFrame(lastStep.stack).callee !== ast) {
93
+ enteringInternalFun = true;
94
+ }
95
+ if (enteringInternalFun) {
96
+ let args;
97
+ if (ast instanceof solc_typed_ast_1.FunctionDefinition ||
98
+ (ast instanceof solc_typed_ast_1.VariableDeclaration && ast.stateVariable)) {
99
+ (0, solc_typed_ast_1.assert)(curExtFrame.info !== undefined, ``);
100
+ args = buildFunArgViews(ast, state.evmStack, curExtFrame.info, artifactManager);
101
+ }
102
+ const newFrame = {
103
+ kind: types_1.FrameKind.InternalCall,
104
+ nearestExtFrame: curExtFrame,
105
+ callee: ast,
106
+ offset: state.pc,
107
+ startStep: trace.length,
108
+ arguments: args
109
+ };
110
+ const newInternalFrames = [...curExtFrame.internalFrames, newFrame];
111
+ return {
112
+ ...state,
113
+ stack: [
114
+ ...state.stack.slice(0, -1),
115
+ { ...curExtFrame, internalFrames: newInternalFrames }
116
+ ]
117
+ };
118
+ }
119
+ // Returning from an internal function call
120
+ if (state.op.mnemonic === "JUMP" && state.src && state.src.jump === "o") {
121
+ const curFrame = topFrame(state.stack);
122
+ const newInternalFrames = curExtFrame.internalFrames.slice(0, -1);
123
+ if (strict) {
124
+ (0, solc_typed_ast_1.assert)(curFrame.kind === types_1.FrameKind.InternalCall, `Mismatched internal return from frame `, curFrame.kind);
125
+ }
126
+ else {
127
+ // @todo log an error somewhere
128
+ }
129
+ return {
130
+ ...state,
131
+ stack: [
132
+ ...state.stack.slice(0, -1),
133
+ { ...curExtFrame, internalFrames: newInternalFrames }
134
+ ]
135
+ };
136
+ }
137
+ return state;
138
+ }
139
+ //# sourceMappingURL=int_stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"int_stack.js","sourceRoot":"","sources":["../../../../src/debug/tracers/transformers/int_stack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { InterpreterStep } from "@ethereumjs/evm";
2
+ import { VM } from "@ethereumjs/vm";
3
+ import { EVMOpInfo } from "../../opcodes";
4
+ export interface OpInfo {
5
+ op: EVMOpInfo;
6
+ }
7
+ /**
8
+ * Adds op info to each step
9
+ */
10
+ export declare function addOpInfo<T extends object>(vm: VM, step: InterpreterStep, state: T): T & OpInfo;
11
+ //# sourceMappingURL=op.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"op.d.ts","sourceRoot":"","sources":["../../../../src/debug/tracers/transformers/op.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,SAAS,EAAa,MAAM,eAAe,CAAC;AAErD,MAAM,WAAW,MAAM;IACnB,EAAE,EAAE,SAAS,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAE/F"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addOpInfo = addOpInfo;
4
+ const opcodes_1 = require("../../opcodes");
5
+ /**
6
+ * Adds op info to each step
7
+ */
8
+ function addOpInfo(vm, step, state) {
9
+ return { op: (0, opcodes_1.getOpInfo)(step.opcode.name), ...state };
10
+ }
11
+ //# sourceMappingURL=op.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"op.js","sourceRoot":"","sources":["../../../../src/debug/tracers/transformers/op.ts"],"names":[],"mappings":";;AAWA,8BAEC;AAXD,2CAAqD;AAMrD;;GAEG;AACH,SAAgB,SAAS,CAAmB,EAAM,EAAE,IAAqB,EAAE,KAAQ;IAC/E,OAAO,EAAE,EAAE,EAAE,IAAA,mBAAS,EAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;AACzD,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { InterpreterStep } from "@ethereumjs/evm";
2
+ import { VM } from "@ethereumjs/vm";
3
+ import * as sol from "solc-typed-ast";
4
+ import { ExternalFrame } from "../../types";
5
+ import { BasicStepInfo } from "./basic_info";
6
+ import { ExternalFrameInfo } from "./ext_stack";
7
+ export interface SourceInfo {
8
+ src: sol.DecodedBytecodeSourceMapEntry | undefined;
9
+ astNode: sol.ASTNode | undefined;
10
+ }
11
+ /**
12
+ * Helper function to get the source information for the instruction at a given `instrOffset`,
13
+ * in the context of the external call `ctx`.
14
+ *
15
+ * There are several cases this handles:
16
+ *
17
+ * 1. If there is no debug info for the contract executing in `ctx` return undefined
18
+ * 2. If there is debug info, but no AST return only the decoded bytecode sourcemap entry
19
+ * 3. If there is both debug info and an AST return the decoded source location and any AST nodes that match this location
20
+ */
21
+ export declare function decodeSourceLoc(instrOffset: number, ctx: ExternalFrame): [sol.DecodedBytecodeSourceMapEntry | undefined, sol.ASTNode | undefined];
22
+ /**
23
+ * Adds source info for each step (if available)
24
+ */
25
+ export declare function addSource<T extends object & BasicStepInfo & ExternalFrameInfo>(vm: VM, step: InterpreterStep, state: T): Promise<T & SourceInfo>;
26
+ //# sourceMappingURL=source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../../src/debug/tracers/transformers/source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,aAAa,EAAa,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAe,MAAM,aAAa,CAAC;AAE7D,MAAM,WAAW,UAAU;IACvB,GAAG,EAAE,GAAG,CAAC,6BAA6B,GAAG,SAAS,CAAC;IACnD,OAAO,EAAE,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC;CACpC;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC3B,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,aAAa,GACnB,CAAC,GAAG,CAAC,6BAA6B,GAAG,SAAS,EAAE,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC,CAa1E;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,CAAC,SAAS,MAAM,GAAG,aAAa,GAAG,iBAAiB,EAChF,EAAE,EAAE,EAAE,EACN,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,CAAC,GACT,OAAO,CAAC,CAAC,GAAG,UAAU,CAAC,CAQzB"}
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.decodeSourceLoc = decodeSourceLoc;
4
+ exports.addSource = addSource;
5
+ const artifact_manager_1 = require("../../artifact_manager");
6
+ const types_1 = require("../../types");
7
+ const ext_stack_1 = require("./ext_stack");
8
+ /**
9
+ * Helper function to get the source information for the instruction at a given `instrOffset`,
10
+ * in the context of the external call `ctx`.
11
+ *
12
+ * There are several cases this handles:
13
+ *
14
+ * 1. If there is no debug info for the contract executing in `ctx` return undefined
15
+ * 2. If there is debug info, but no AST return only the decoded bytecode sourcemap entry
16
+ * 3. If there is both debug info and an AST return the decoded source location and any AST nodes that match this location
17
+ */
18
+ function decodeSourceLoc(instrOffset, ctx) {
19
+ if (!ctx.info) {
20
+ return [undefined, undefined];
21
+ }
22
+ const bytecodeInfo = ctx.kind === types_1.FrameKind.Creation ? ctx.info.bytecode : ctx.info.deployedBytecode;
23
+ const src = (0, artifact_manager_1.getOffsetSrc)(instrOffset, bytecodeInfo);
24
+ const astNode = ctx.info.artifact.srcMap.get(`${src.start}:${src.length}:${src.sourceIndex}`);
25
+ return [src, astNode];
26
+ }
27
+ /**
28
+ * Adds source info for each step (if available)
29
+ */
30
+ async function addSource(vm, step, state) {
31
+ const [src, astNode] = decodeSourceLoc(state.pc, (0, ext_stack_1.topExtFrame)(state.stack));
32
+ return {
33
+ src,
34
+ astNode,
35
+ ...state
36
+ };
37
+ }
38
+ //# sourceMappingURL=source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.js","sourceRoot":"","sources":["../../../../src/debug/tracers/transformers/source.ts"],"names":[],"mappings":";;AAuBA,0CAgBC;AAKD,8BAYC;AArDD,6DAAsD;AACtD,uCAAuD;AAEvD,2CAA6D;AAO7D;;;;;;;;;GASG;AACH,SAAgB,eAAe,CAC3B,WAAmB,EACnB,GAAkB;IAElB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,YAAY,GACd,GAAG,CAAC,IAAI,KAAK,iBAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC;IAEpF,MAAM,GAAG,GAAG,IAAA,+BAAY,EAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAEpD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IAE9F,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,SAAS,CAC3B,EAAM,EACN,IAAqB,EACrB,KAAQ;IAER,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,EAAE,EAAE,IAAA,uBAAW,EAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAE3E,OAAO;QACH,GAAG;QACH,OAAO;QACP,GAAG,KAAK;KACX,CAAC;AACN,CAAC"}
@@ -69,6 +69,7 @@ export interface BaseExternalFrame extends BaseFrame {
69
69
  readonly info?: ContractInfo;
70
70
  readonly code: Uint8Array;
71
71
  readonly codeMdHash: HexString | undefined;
72
+ internalFrames: InternalCallFrame[];
72
73
  }
73
74
  /**
74
75
  * Stack frame corresponding to an external call
@@ -95,6 +96,7 @@ export interface InternalCallFrame extends BaseFrame {
95
96
  export type ExternalFrame = CallFrame | CreationFrame;
96
97
  export type Frame = ExternalFrame | InternalCallFrame;
97
98
  export type DbgStack = Frame[];
99
+ export declare function isFrame(a: any): a is Frame;
98
100
  export declare enum DataLocationKind {
99
101
  Stack = "stack",
100
102
  Memory = "memory",
@@ -138,9 +140,6 @@ export interface EventDesc {
138
140
  topics: bigint[];
139
141
  }
140
142
  /**
141
- * TODO(dimo): Make memory and storage be computed only for instructions that change them, and for all other
142
- * instructions alias the previous steps' memory/storage
143
- *
144
143
  * Low-level machine state at a given trace step. It directly mirrors the state reported from Web3
145
144
  * and doesn't include any higher-level information that requires debug info.
146
145
  */
@@ -155,7 +154,6 @@ export interface StepVMState {
155
154
  gas: bigint;
156
155
  depth: number;
157
156
  address: Address;
158
- codeAddress: Address | undefined;
159
157
  }
160
158
  /**
161
159
  * State that the debugger maintains for each trace step.
@@ -164,11 +162,10 @@ export interface StepVMState {
164
162
  * that may be emitted on this step.
165
163
  */
166
164
  export interface StepState extends StepVMState {
167
- stack: DbgStack;
165
+ stack: ExternalFrame[];
168
166
  src: sol.DecodedBytecodeSourceMapEntry | undefined;
169
167
  astNode: sol.ASTNode | undefined;
170
168
  emittedEvent: EventDesc | undefined;
171
- contractInfo: ContractInfo | undefined;
172
169
  }
173
170
  /**
174
171
  * Trace step struct contained in the array returned by web3.debug.traceTransaction().
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/debug/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/debug/types.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DataLocationKind = exports.FrameKind = void 0;
4
+ exports.isFrame = isFrame;
4
5
  var FrameKind;
5
6
  (function (FrameKind) {
6
7
  FrameKind["Call"] = "call";
7
8
  FrameKind["Creation"] = "creation";
8
9
  FrameKind["InternalCall"] = "internal_call";
9
10
  })(FrameKind || (exports.FrameKind = FrameKind = {}));
11
+ function isFrame(a) {
12
+ return (a instanceof Object &&
13
+ a.hasOwnProperty("kind") &&
14
+ (a.kind === FrameKind.Call ||
15
+ a.kind === FrameKind.Creation ||
16
+ a.kind === FrameKind.InternalCall));
17
+ }
10
18
  var DataLocationKind;
11
19
  (function (DataLocationKind) {
12
20
  DataLocationKind["Stack"] = "stack";
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/debug/types.ts"],"names":[],"mappings":";;;AAoCA,IAAY,SAIX;AAJD,WAAY,SAAS;IACjB,0BAAa,CAAA;IACb,kCAAqB,CAAA;IACrB,2CAA8B,CAAA;AAClC,CAAC,EAJW,SAAS,yBAAT,SAAS,QAIpB;AAiED,IAAY,gBAKX;AALD,WAAY,gBAAgB;IACxB,mCAAe,CAAA;IACf,qCAAiB,CAAA;IACjB,uCAAmB,CAAA;IACnB,yCAAqB,CAAA;AACzB,CAAC,EALW,gBAAgB,gCAAhB,gBAAgB,QAK3B"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/debug/types.ts"],"names":[],"mappings":";;;AA0GA,0BAQC;AA9ED,IAAY,SAIX;AAJD,WAAY,SAAS;IACjB,0BAAa,CAAA;IACb,kCAAqB,CAAA;IACrB,2CAA8B,CAAA;AAClC,CAAC,EAJW,SAAS,yBAAT,SAAS,QAIpB;AAkED,SAAgB,OAAO,CAAC,CAAM;IAC1B,OAAO,CACH,CAAC,YAAY,MAAM;QACnB,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC;QACxB,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI;YACtB,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,QAAQ;YAC7B,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,YAAY,CAAC,CACzC,CAAC;AACN,CAAC;AAED,IAAY,gBAKX;AALD,WAAY,gBAAgB;IACxB,mCAAe,CAAA;IACf,qCAAiB,CAAA;IACjB,uCAAmB,CAAA;IACnB,yCAAqB,CAAA;AACzB,CAAC,EALW,gBAAgB,gCAAhB,gBAAgB,QAK3B"}
@@ -1,5 +1,6 @@
1
- import { ArtifactManager, DbgStack, ExternalFrame, SolTxDebugger, StepState } from "../debug";
2
- export declare function ppStackTrace(solDbg: SolTxDebugger, trace: StepState[], stack: DbgStack, curOffset: number): string;
1
+ import { ArtifactManager, ExternalFrame, Frame, SolTxDebugger, StepState } from "../debug";
2
+ export declare function flattenStack(s: ExternalFrame[]): Frame[];
3
+ export declare function ppStackTrace(solDbg: SolTxDebugger, trace: StepState[], extStack: ExternalFrame[], curOffset: number): string;
3
4
  export declare function printStepSourceString(step: StepState, lastExtStep: ExternalFrame, sources: Map<string, string>, artifactManager: ArtifactManager, prefix: string | undefined): string | undefined;
4
5
  export declare function debugDumpTrace(trace: StepState[], artifactManager: ArtifactManager, prefix?: string): void;
5
6
  export declare function ppStep(step: StepState): string;