sol-dbg 0.4.2 → 0.6.1
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.
- package/dist/debug/decoding/general.d.ts +2 -1
- package/dist/debug/decoding/general.d.ts.map +1 -1
- package/dist/debug/decoding/general.js +8 -7
- package/dist/debug/decoding/general.js.map +1 -1
- package/dist/debug/decoding/storage.d.ts +6 -3
- package/dist/debug/decoding/storage.d.ts.map +1 -1
- package/dist/debug/decoding/storage.js +73 -13
- package/dist/debug/decoding/storage.js.map +1 -1
- package/dist/debug/foundry_cheatcodes.d.ts +2 -1
- package/dist/debug/foundry_cheatcodes.d.ts.map +1 -1
- package/dist/debug/foundry_cheatcodes.js +4 -0
- package/dist/debug/foundry_cheatcodes.js.map +1 -1
- package/dist/debug/index.d.ts +2 -1
- package/dist/debug/index.d.ts.map +1 -1
- package/dist/debug/index.js +2 -1
- package/dist/debug/index.js.map +1 -1
- package/dist/debug/layout.d.ts +9 -0
- package/dist/debug/layout.d.ts.map +1 -0
- package/dist/debug/layout.js +80 -0
- package/dist/debug/layout.js.map +1 -0
- package/dist/debug/tracers/base_tracer.d.ts +33 -0
- package/dist/debug/tracers/base_tracer.d.ts.map +1 -0
- package/dist/debug/tracers/base_tracer.js +118 -0
- package/dist/debug/tracers/base_tracer.js.map +1 -0
- package/dist/debug/tracers/index.d.ts +5 -0
- package/dist/debug/tracers/index.d.ts.map +1 -0
- package/dist/debug/tracers/index.js +21 -0
- package/dist/debug/tracers/index.js.map +1 -0
- package/dist/debug/tracers/sol_debugger.d.ts +9 -0
- package/dist/debug/tracers/sol_debugger.d.ts.map +1 -0
- package/dist/debug/tracers/sol_debugger.js +22 -0
- package/dist/debug/tracers/sol_debugger.js.map +1 -0
- package/dist/debug/tracers/support_tracer.d.ts +15 -0
- package/dist/debug/tracers/support_tracer.d.ts.map +1 -0
- package/dist/debug/tracers/support_tracer.js +22 -0
- package/dist/debug/tracers/support_tracer.js.map +1 -0
- package/dist/debug/tracers/transformers/basic_info.d.ts +25 -0
- package/dist/debug/tracers/transformers/basic_info.d.ts.map +1 -0
- package/dist/debug/tracers/transformers/basic_info.js +54 -0
- package/dist/debug/tracers/transformers/basic_info.js.map +1 -0
- package/dist/debug/tracers/transformers/contract_lifetime.d.ts +21 -0
- package/dist/debug/tracers/transformers/contract_lifetime.d.ts.map +1 -0
- package/dist/debug/tracers/transformers/contract_lifetime.js +70 -0
- package/dist/debug/tracers/transformers/contract_lifetime.js.map +1 -0
- package/dist/debug/tracers/transformers/events.d.ts +12 -0
- package/dist/debug/tracers/transformers/events.d.ts.map +1 -0
- package/dist/debug/tracers/transformers/events.js +30 -0
- package/dist/debug/tracers/transformers/events.js.map +1 -0
- package/dist/debug/tracers/transformers/ext_stack.d.ts +17 -0
- package/dist/debug/tracers/transformers/ext_stack.d.ts.map +1 -0
- package/dist/debug/tracers/transformers/ext_stack.js +200 -0
- package/dist/debug/tracers/transformers/ext_stack.js.map +1 -0
- package/dist/debug/tracers/transformers/index.d.ts +12 -0
- package/dist/debug/tracers/transformers/index.d.ts.map +1 -0
- package/dist/debug/tracers/transformers/index.js +25 -0
- package/dist/debug/tracers/transformers/index.js.map +1 -0
- package/dist/debug/tracers/transformers/int_stack.d.ts +13 -0
- package/dist/debug/tracers/transformers/int_stack.d.ts.map +1 -0
- package/dist/debug/tracers/transformers/int_stack.js +139 -0
- package/dist/debug/tracers/transformers/int_stack.js.map +1 -0
- package/dist/debug/tracers/transformers/keccak256_invert.d.ts +29 -0
- package/dist/debug/tracers/transformers/keccak256_invert.d.ts.map +1 -0
- package/dist/debug/tracers/transformers/keccak256_invert.js +65 -0
- package/dist/debug/tracers/transformers/keccak256_invert.js.map +1 -0
- package/dist/debug/tracers/transformers/op.d.ts +11 -0
- package/dist/debug/tracers/transformers/op.d.ts.map +1 -0
- package/dist/debug/tracers/transformers/op.js +11 -0
- package/dist/debug/tracers/transformers/op.js.map +1 -0
- package/dist/debug/tracers/transformers/source.d.ts +26 -0
- package/dist/debug/tracers/transformers/source.d.ts.map +1 -0
- package/dist/debug/tracers/transformers/source.js +38 -0
- package/dist/debug/tracers/transformers/source.js.map +1 -0
- package/dist/debug/types.d.ts +3 -6
- package/dist/debug/types.d.ts.map +1 -1
- package/dist/debug/types.js +8 -0
- package/dist/debug/types.js.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/map.d.ts +5 -0
- package/dist/utils/map.d.ts.map +1 -0
- package/dist/utils/map.js +12 -0
- package/dist/utils/map.js.map +1 -0
- package/dist/utils/pp.d.ts +4 -2
- package/dist/utils/pp.d.ts.map +1 -1
- package/dist/utils/pp.js +22 -10
- package/dist/utils/pp.js.map +1 -1
- package/dist/utils/set.d.ts +9 -0
- package/dist/utils/set.d.ts.map +1 -0
- package/dist/utils/set.js +21 -0
- package/dist/utils/set.js.map +1 -0
- package/dist/utils/test_runner.d.ts +22 -10
- package/dist/utils/test_runner.d.ts.map +1 -1
- package/dist/utils/test_runner.js +73 -33
- package/dist/utils/test_runner.js.map +1 -1
- package/package.json +1 -1
- package/dist/debug/sol_debugger.d.ts +0 -107
- package/dist/debug/sol_debugger.d.ts.map +0 -1
- package/dist/debug/sol_debugger.js +0 -521
- package/dist/debug/sol_debugger.js.map +0 -1
package/dist/debug/types.d.ts
CHANGED
|
@@ -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:
|
|
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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,WAAW,oBAAoB;IACjC,OAAO,EAAE,SAAS,CAAC;IACnB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC5B,QAAQ,EAAE,oBAAoB,GAAG,SAAS,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW;IACxB,QAAQ,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,eAAe,GAAG;IAAE,KAAK,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,MAAM,WAAW,UAAU;IACvB,GAAG,EAAE,kBAAkB,CAAC;IACxB,gBAAgB,EAAE;QAAE,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAAA;KAAE,CAAC;IACzD,aAAa,EAAE;QAAE,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAAA;KAAE,CAAC;CACzD;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;AAEtC,oBAAY,SAAS;IACjB,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,YAAY,kBAAkB;CACjC;AAGD,MAAM,MAAM,OAAO,GAAG,GAAG,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC;IACzC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC;IACtE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC9B;AACD;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,SAAS;IAChD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,SAAS,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/debug/types.ts"],"names":[],"mappings":"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"}
|
package/dist/debug/types.js
CHANGED
|
@@ -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";
|
package/dist/debug/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/debug/types.ts"],"names":[],"mappings":";;;
|
|
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"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,QAAQ,CAAC;AACvB,cAAc,MAAM,CAAC;AACrB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC;AACvB,cAAc,MAAM,CAAC;AACrB,cAAc,OAAO,CAAC;AACtB,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC"}
|
package/dist/utils/index.js
CHANGED
|
@@ -15,8 +15,10 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./immutable_map"), exports);
|
|
18
|
+
__exportStar(require("./map"), exports);
|
|
18
19
|
__exportStar(require("./misc"), exports);
|
|
19
20
|
__exportStar(require("./pp"), exports);
|
|
21
|
+
__exportStar(require("./set"), exports);
|
|
20
22
|
__exportStar(require("./srcmap"), exports);
|
|
21
23
|
__exportStar(require("./test_runner"), exports);
|
|
22
24
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,yCAAuB;AACvB,uCAAqB;AACrB,2CAAyB;AACzB,gDAA8B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,wCAAsB;AACtB,yCAAuB;AACvB,uCAAqB;AACrB,wCAAsB;AACtB,2CAAyB;AACzB,gDAA8B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/utils/map.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAI9D"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.map_add = map_add;
|
|
4
|
+
/**
|
|
5
|
+
* Destructively add all entries from map B to map A
|
|
6
|
+
*/
|
|
7
|
+
function map_add(A, B) {
|
|
8
|
+
for (const [k, v] of B) {
|
|
9
|
+
A.set(k, v);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/utils/map.ts"],"names":[],"mappings":";;AAGA,0BAIC;AAPD;;GAEG;AACH,SAAgB,OAAO,CAAO,CAAY,EAAE,CAAY;IACpD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChB,CAAC;AACL,CAAC"}
|
package/dist/utils/pp.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
import { ArtifactManager,
|
|
2
|
-
|
|
1
|
+
import { ArtifactManager, ExternalFrame, Frame, SolTxDebugger, StepState } from "../debug";
|
|
2
|
+
import { MapKeys } from "../debug/tracers/transformers";
|
|
3
|
+
export declare function flattenStack(s: ExternalFrame[]): Frame[];
|
|
4
|
+
export declare function ppStackTrace(solDbg: SolTxDebugger, trace: StepState[], extStack: ExternalFrame[], curOffset: number, mapKeys?: MapKeys): string;
|
|
3
5
|
export declare function printStepSourceString(step: StepState, lastExtStep: ExternalFrame, sources: Map<string, string>, artifactManager: ArtifactManager, prefix: string | undefined): string | undefined;
|
|
4
6
|
export declare function debugDumpTrace(trace: StepState[], artifactManager: ArtifactManager, prefix?: string): void;
|
|
5
7
|
export declare function ppStep(step: StepState): string;
|
package/dist/utils/pp.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pp.d.ts","sourceRoot":"","sources":["../../src/utils/pp.ts"],"names":[],"mappings":"AAsBA,OAAO,EACH,eAAe,
|
|
1
|
+
{"version":3,"file":"pp.d.ts","sourceRoot":"","sources":["../../src/utils/pp.ts"],"names":[],"mappings":"AAsBA,OAAO,EACH,eAAe,EAGf,aAAa,EACb,KAAK,EAEL,aAAa,EAEb,SAAS,EACZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAGH,OAAO,EAEV,MAAM,+BAA+B,CAAC;AA2FvC,wBAAgB,YAAY,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,KAAK,EAAE,CAQxD;AAED,wBAAgB,YAAY,CACxB,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,SAAS,EAAE,EAClB,QAAQ,EAAE,aAAa,EAAE,EACzB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,OAAO,GAClB,MAAM,CA6HR;AAED,wBAAgB,qBAAqB,CACjC,IAAI,EAAE,SAAS,EACf,WAAW,EAAE,aAAa,EAC1B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,MAAM,GAAG,SAAS,GAC3B,MAAM,GAAG,SAAS,CA8CpB;AAED,wBAAgB,cAAc,CAC1B,KAAK,EAAE,SAAS,EAAE,EAClB,eAAe,EAAE,eAAe,EAChC,MAAM,CAAC,EAAE,MAAM,GAChB,IAAI,CAyBN;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CA8B9C"}
|
package/dist/utils/pp.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.flattenStack = flattenStack;
|
|
3
4
|
exports.ppStackTrace = ppStackTrace;
|
|
4
5
|
exports.printStepSourceString = printStepSourceString;
|
|
5
6
|
exports.debugDumpTrace = debugDumpTrace;
|
|
@@ -7,6 +8,7 @@ exports.ppStep = ppStep;
|
|
|
7
8
|
const utils_1 = require("ethereum-cryptography/utils");
|
|
8
9
|
const solc_typed_ast_1 = require("solc-typed-ast");
|
|
9
10
|
const debug_1 = require("../debug");
|
|
11
|
+
const transformers_1 = require("../debug/tracers/transformers");
|
|
10
12
|
const srcLocation = require("src-location");
|
|
11
13
|
const fse = require("fs-extra");
|
|
12
14
|
function ppValue(typ, v, infer) {
|
|
@@ -70,15 +72,24 @@ function ppValue(typ, v, infer) {
|
|
|
70
72
|
}
|
|
71
73
|
throw new Error(`NYI ppValue of type ${typ.pp()}`);
|
|
72
74
|
}
|
|
73
|
-
function
|
|
75
|
+
function flattenStack(s) {
|
|
74
76
|
const res = [];
|
|
77
|
+
for (let i = 0; i < s.length; i++) {
|
|
78
|
+
res.push(s[i]);
|
|
79
|
+
res.push(...s[i].internalFrames);
|
|
80
|
+
}
|
|
81
|
+
return res;
|
|
82
|
+
}
|
|
83
|
+
function ppStackTrace(solDbg, trace, extStack, curOffset, mapKeys) {
|
|
84
|
+
const res = [];
|
|
85
|
+
const stack = flattenStack(extStack);
|
|
75
86
|
for (let i = 0; i < stack.length; i++) {
|
|
76
87
|
const frame = stack[i];
|
|
77
88
|
let frameStr;
|
|
78
89
|
const lastOffset = i < stack.length - 1 ? trace[stack[i + 1].startStep - 1].pc : curOffset;
|
|
79
|
-
const extFrame =
|
|
80
|
-
const [lastPosInFrame] =
|
|
81
|
-
const info =
|
|
90
|
+
const extFrame = frame.kind === debug_1.FrameKind.InternalCall ? frame.nearestExtFrame : frame;
|
|
91
|
+
const [lastPosInFrame] = (0, transformers_1.decodeSourceLoc)(lastOffset, extFrame);
|
|
92
|
+
const info = extFrame.info;
|
|
82
93
|
let funArgs;
|
|
83
94
|
let funName;
|
|
84
95
|
let fileName;
|
|
@@ -135,7 +146,7 @@ function ppStackTrace(solDbg, trace, stack, curOffset) {
|
|
|
135
146
|
const state = trace[frame.startStep];
|
|
136
147
|
(0, solc_typed_ast_1.assert)(info !== undefined, ``);
|
|
137
148
|
const infer = solDbg.artifactManager.infer(info.artifact.compilerVersion);
|
|
138
|
-
const val = (0, debug_1.decodeValue)(view, state, infer);
|
|
149
|
+
const val = (0, debug_1.decodeValue)(view, state, infer, mapKeys);
|
|
139
150
|
funArgEls.push(ppValue(view.type, val, infer));
|
|
140
151
|
}
|
|
141
152
|
funArgs = funArgEls.join(", ");
|
|
@@ -171,7 +182,7 @@ function ppStackTrace(solDbg, trace, stack, curOffset) {
|
|
|
171
182
|
return res.reverse().join("\n");
|
|
172
183
|
}
|
|
173
184
|
function printStepSourceString(step, lastExtStep, sources, artifactManager, prefix) {
|
|
174
|
-
const info = step
|
|
185
|
+
const info = (0, transformers_1.getContractInfo)(step);
|
|
175
186
|
if (info === undefined) {
|
|
176
187
|
return undefined;
|
|
177
188
|
}
|
|
@@ -209,18 +220,19 @@ function debugDumpTrace(trace, artifactManager, prefix) {
|
|
|
209
220
|
const jumpType = (step.op.mnemonic === "JUMP" || step.op.mnemonic === "JUMPI") && step.src
|
|
210
221
|
? step.src.jump
|
|
211
222
|
: "";
|
|
212
|
-
const srcString = printStepSourceString(step, (0,
|
|
223
|
+
const srcString = printStepSourceString(step, (0, transformers_1.topExtFrame)(step.stack), sources, artifactManager, prefix);
|
|
213
224
|
console.error(`${i} ${step.pc}: ${step.op.mnemonic} ${jumpType} ${srcString !== undefined ? srcString : ""}`);
|
|
214
225
|
}
|
|
215
226
|
}
|
|
216
227
|
function ppStep(step) {
|
|
217
228
|
const addrStr = `${step.address.toString().slice(36)}`;
|
|
218
229
|
let contractId;
|
|
219
|
-
const extFrame = (0,
|
|
230
|
+
const extFrame = (0, transformers_1.topExtFrame)(step.stack);
|
|
220
231
|
const code = extFrame.code;
|
|
221
232
|
const codeMdHash = extFrame.codeMdHash;
|
|
222
|
-
|
|
223
|
-
|
|
233
|
+
const contractInfo = (0, transformers_1.getContractInfo)(step);
|
|
234
|
+
if (contractInfo) {
|
|
235
|
+
contractId = `${contractInfo.contractName}@${addrStr}`;
|
|
224
236
|
}
|
|
225
237
|
else if (codeMdHash) {
|
|
226
238
|
contractId = `0x${codeMdHash.slice(0, 6)}...${codeMdHash.slice(60)}@${addrStr}`;
|
package/dist/utils/pp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pp.js","sourceRoot":"","sources":["../../src/utils/pp.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"pp.js","sourceRoot":"","sources":["../../src/utils/pp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Destructively add set B to set A
|
|
3
|
+
*/
|
|
4
|
+
export declare function set_add<T>(A: Set<T>, B: Set<T>): void;
|
|
5
|
+
/**
|
|
6
|
+
* Destructively subtract set B from set A
|
|
7
|
+
*/
|
|
8
|
+
export declare function set_subtract<T>(A: Set<T>, B: Set<T>): void;
|
|
9
|
+
//# sourceMappingURL=set.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.d.ts","sourceRoot":"","sources":["../../src/utils/set.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAIrD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAI1D"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.set_add = set_add;
|
|
4
|
+
exports.set_subtract = set_subtract;
|
|
5
|
+
/**
|
|
6
|
+
* Destructively add set B to set A
|
|
7
|
+
*/
|
|
8
|
+
function set_add(A, B) {
|
|
9
|
+
for (const el of B) {
|
|
10
|
+
A.add(el);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Destructively subtract set B from set A
|
|
15
|
+
*/
|
|
16
|
+
function set_subtract(A, B) {
|
|
17
|
+
for (const el of B) {
|
|
18
|
+
A.delete(el);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"set.js","sourceRoot":"","sources":["../../src/utils/set.ts"],"names":[],"mappings":";;AAGA,0BAIC;AAKD,oCAIC;AAhBD;;GAEG;AACH,SAAgB,OAAO,CAAI,CAAS,EAAE,CAAS;IAC3C,KAAK,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;QACjB,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAI,CAAS,EAAE,CAAS;IAChD,KAAK,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;QACjB,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;AACL,CAAC"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Block } from "@ethereumjs/block";
|
|
2
|
-
import { EVMStateManagerInterface } from "@ethereumjs/common";
|
|
2
|
+
import { Common, EVMStateManagerInterface } from "@ethereumjs/common";
|
|
3
3
|
import { TypedTransaction } from "@ethereumjs/tx";
|
|
4
|
-
import {
|
|
4
|
+
import { PrefixedHexString } from "@ethereumjs/util";
|
|
5
5
|
import { HexString } from "../artifacts";
|
|
6
|
+
import { ContractSolidityState, FoundryTxResult, IArtifactManager, KeccakPreimageMap } from "../debug";
|
|
6
7
|
export interface BaseTestStep {
|
|
7
8
|
address: HexString;
|
|
8
9
|
gasLimit: HexString;
|
|
@@ -62,30 +63,41 @@ export interface TestStep extends BaseTestStep {
|
|
|
62
63
|
errorStack?: string[];
|
|
63
64
|
errorString?: string;
|
|
64
65
|
errorPathPrefix?: string;
|
|
66
|
+
layoutBefore?: ContractSolidityState;
|
|
65
67
|
}
|
|
66
68
|
export interface TestCase extends BaseTestCase {
|
|
67
69
|
steps: TestStep[];
|
|
68
70
|
}
|
|
69
71
|
/**
|
|
70
|
-
* Helper class to
|
|
72
|
+
* Helper class to run a set of TX and record info to allow debuggin any of the TXs independently. This includes:
|
|
73
|
+
*
|
|
74
|
+
* 1. The TX data for each
|
|
75
|
+
* 2. The Block info for each TX
|
|
76
|
+
* 3. The State of the world before each TX
|
|
77
|
+
* 4. The result of the TX
|
|
78
|
+
* 5. The set of contracts before each TX
|
|
79
|
+
* 6. The set of keccak256 (result, preimage) pairs computed by the TX (useful for computing Solidity-level maps)
|
|
71
80
|
*/
|
|
72
81
|
export declare class VMTestRunner {
|
|
73
|
-
private
|
|
82
|
+
private _foundryCheatcodes;
|
|
83
|
+
private tracer;
|
|
74
84
|
private _txs;
|
|
75
85
|
private _txToBlock;
|
|
76
86
|
private _results;
|
|
77
87
|
private _stateRootBeforeTx;
|
|
78
|
-
|
|
79
|
-
|
|
88
|
+
private _contractsBeforeTx;
|
|
89
|
+
private _keccakPreimagesBeforeTx;
|
|
90
|
+
constructor(artifactManager: IArtifactManager, _foundryCheatcodes?: boolean);
|
|
80
91
|
runTestCase(testCaseJSON: BaseTestCase): Promise<void>;
|
|
81
92
|
private setupInitialState;
|
|
82
|
-
harveyStepToTransaction(step: BaseTestStep): Promise<TypedTransaction>;
|
|
83
|
-
harveyStepToBlock(step: BaseTestStep): Block;
|
|
84
|
-
private _runTxInt;
|
|
93
|
+
harveyStepToTransaction(step: BaseTestStep, stateManager: EVMStateManagerInterface, common: Common): Promise<TypedTransaction>;
|
|
94
|
+
harveyStepToBlock(step: BaseTestStep, common: Common): Block;
|
|
85
95
|
get txs(): TypedTransaction[];
|
|
86
|
-
get results():
|
|
96
|
+
get results(): FoundryTxResult[];
|
|
87
97
|
getStateBeforeTx(tx: TypedTransaction): EVMStateManagerInterface;
|
|
88
98
|
getBlock(tx: TypedTransaction): Block;
|
|
99
|
+
getContractsBefore(tx: TypedTransaction): Set<PrefixedHexString>;
|
|
100
|
+
getKeccakPreimagesBefore(tx: TypedTransaction): KeccakPreimageMap;
|
|
89
101
|
}
|
|
90
102
|
export {};
|
|
91
103
|
//# sourceMappingURL=test_runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_runner.d.ts","sourceRoot":"","sources":["../../src/utils/test_runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,wBAAwB,EAAY,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"test_runner.d.ts","sourceRoot":"","sources":["../../src/utils/test_runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,10 @@ const common_1 = require("@ethereumjs/common");
|
|
|
6
6
|
const util_1 = require("@ethereumjs/util");
|
|
7
7
|
const utils_1 = require("ethereum-cryptography/utils");
|
|
8
8
|
const solc_typed_ast_1 = require("solc-typed-ast");
|
|
9
|
+
const debug_1 = require("../debug");
|
|
10
|
+
const map_1 = require("./map");
|
|
9
11
|
const misc_1 = require("./misc");
|
|
12
|
+
const set_1 = require("./set");
|
|
10
13
|
var ResultKind;
|
|
11
14
|
(function (ResultKind) {
|
|
12
15
|
ResultKind["ContractCreated"] = "contract_created";
|
|
@@ -16,30 +19,66 @@ var ResultKind;
|
|
|
16
19
|
ResultKind["FoundryFail"] = "foundry_fail";
|
|
17
20
|
})(ResultKind || (exports.ResultKind = ResultKind = {}));
|
|
18
21
|
/**
|
|
19
|
-
* Helper class to
|
|
22
|
+
* Helper class to run a set of TX and record info to allow debuggin any of the TXs independently. This includes:
|
|
23
|
+
*
|
|
24
|
+
* 1. The TX data for each
|
|
25
|
+
* 2. The Block info for each TX
|
|
26
|
+
* 3. The State of the world before each TX
|
|
27
|
+
* 4. The result of the TX
|
|
28
|
+
* 5. The set of contracts before each TX
|
|
29
|
+
* 6. The set of keccak256 (result, preimage) pairs computed by the TX (useful for computing Solidity-level maps)
|
|
20
30
|
*/
|
|
21
31
|
class VMTestRunner {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
constructor(vm) {
|
|
32
|
+
constructor(artifactManager, _foundryCheatcodes = true) {
|
|
33
|
+
this._foundryCheatcodes = _foundryCheatcodes;
|
|
26
34
|
this._stateRootBeforeTx = new Map();
|
|
27
|
-
this.
|
|
35
|
+
this._contractsBeforeTx = new Map();
|
|
36
|
+
this._keccakPreimagesBeforeTx = new Map();
|
|
37
|
+
this.tracer = new debug_1.SupportTracer(artifactManager, {
|
|
38
|
+
strict: true,
|
|
39
|
+
foundryCheatcodes: this._foundryCheatcodes
|
|
40
|
+
});
|
|
28
41
|
this._txs = [];
|
|
29
42
|
this._results = [];
|
|
30
43
|
this._txToBlock = new Map();
|
|
31
44
|
}
|
|
32
45
|
async runTestCase(testCaseJSON) {
|
|
33
|
-
|
|
46
|
+
/**
|
|
47
|
+
* Dummy VM used just to get a StateManager and a Common instance. The actual VM used for execution is created inside
|
|
48
|
+
* SupportTracer. (@todo this is kinda ugly... oh well)
|
|
49
|
+
*/
|
|
50
|
+
const dummyVM = await debug_1.BaseSolTxTracer.createVm(undefined, this._foundryCheatcodes);
|
|
51
|
+
let stateManager = dummyVM.stateManager.shallowCopy();
|
|
52
|
+
const common = dummyVM.common.copy();
|
|
53
|
+
debug_1.BaseSolTxTracer.releaseVM(dummyVM);
|
|
54
|
+
const contractsBefore = await this.setupInitialState(testCaseJSON.initialState, stateManager);
|
|
55
|
+
const keccakPreimages = new Map();
|
|
34
56
|
for (let i = 0; i < testCaseJSON.steps.length; i++) {
|
|
35
|
-
const tx = await this.harveyStepToTransaction(testCaseJSON.steps[i]);
|
|
36
|
-
const block = this.harveyStepToBlock(testCaseJSON.steps[i]);
|
|
37
|
-
const
|
|
57
|
+
const tx = await this.harveyStepToTransaction(testCaseJSON.steps[i], stateManager, common);
|
|
58
|
+
const block = this.harveyStepToBlock(testCaseJSON.steps[i], common);
|
|
59
|
+
const txHash = (0, utils_1.bytesToHex)(tx.hash());
|
|
60
|
+
// Store the sets before the TX
|
|
61
|
+
this._txs.push(tx);
|
|
62
|
+
this._stateRootBeforeTx.set(txHash, stateManager);
|
|
63
|
+
this._txToBlock.set(txHash, block);
|
|
64
|
+
this._contractsBeforeTx.set(txHash, new Set(contractsBefore));
|
|
65
|
+
this._keccakPreimagesBeforeTx.set(txHash, new Map(keccakPreimages));
|
|
66
|
+
const [trace, res, stateAfter] = await this.tracer.debugTx(tx, block, stateManager);
|
|
67
|
+
await stateManager.flush();
|
|
68
|
+
// Update the set of live contracts
|
|
69
|
+
const [gen, kill] = (0, debug_1.getContractGenKillSet)(trace, res);
|
|
70
|
+
(0, set_1.set_add)(contractsBefore, gen);
|
|
71
|
+
(0, set_1.set_subtract)(contractsBefore, kill);
|
|
72
|
+
const txKeccakPreimages = (0, debug_1.getKeccakPreimages)(trace);
|
|
73
|
+
(0, map_1.map_add)(keccakPreimages, txKeccakPreimages);
|
|
74
|
+
// Update the keccak map
|
|
75
|
+
// Add results
|
|
38
76
|
this._results.push(res);
|
|
77
|
+
stateManager = stateAfter;
|
|
39
78
|
}
|
|
40
79
|
}
|
|
41
|
-
async setupInitialState(initialState) {
|
|
42
|
-
const
|
|
80
|
+
async setupInitialState(initialState, state) {
|
|
81
|
+
const initialContracts = new Set();
|
|
43
82
|
await state.checkpoint();
|
|
44
83
|
for (const addressStr of Object.keys(initialState.accounts)) {
|
|
45
84
|
const { nonce, balance, code, storage } = initialState.accounts[addressStr];
|
|
@@ -55,13 +94,17 @@ class VMTestRunner {
|
|
|
55
94
|
await state.putContractStorage(address, keyBuf, valBuf);
|
|
56
95
|
}
|
|
57
96
|
await state.putContractCode(address, codeBuf);
|
|
97
|
+
if (codeBuf.length > 0) {
|
|
98
|
+
initialContracts.add(address.toString());
|
|
99
|
+
}
|
|
58
100
|
}
|
|
59
101
|
await state.commit();
|
|
60
102
|
await state.flush();
|
|
103
|
+
return initialContracts;
|
|
61
104
|
}
|
|
62
|
-
async harveyStepToTransaction(step) {
|
|
105
|
+
async harveyStepToTransaction(step, stateManager, common) {
|
|
63
106
|
const senderAddress = util_1.Address.fromString(step.origin);
|
|
64
|
-
const senderAccount = await
|
|
107
|
+
const senderAccount = await stateManager.getAccount(senderAddress);
|
|
65
108
|
const senderNonce = senderAccount !== undefined ? senderAccount.nonce : 0;
|
|
66
109
|
const txData = {
|
|
67
110
|
value: step.value,
|
|
@@ -73,36 +116,21 @@ class VMTestRunner {
|
|
|
73
116
|
if (step.address !== misc_1.ZERO_ADDRESS_STRING) {
|
|
74
117
|
txData.to = step.address;
|
|
75
118
|
}
|
|
76
|
-
return (0, misc_1.makeFakeTransaction)(txData, step.origin,
|
|
119
|
+
return (0, misc_1.makeFakeTransaction)(txData, step.origin, common);
|
|
77
120
|
}
|
|
78
|
-
harveyStepToBlock(step) {
|
|
121
|
+
harveyStepToBlock(step, common) {
|
|
79
122
|
return block_1.Block.fromBlockData({
|
|
80
123
|
header: {
|
|
81
124
|
coinbase: step.origin,
|
|
82
|
-
difficulty:
|
|
125
|
+
difficulty: common.hardfork() === common_1.Hardfork.Shanghai ? 0 : step.blockDifficulty,
|
|
83
126
|
gasLimit: step.blockGasLimit,
|
|
84
127
|
number: step.blockNumber,
|
|
85
128
|
timestamp: step.blockTime
|
|
86
129
|
}
|
|
87
130
|
}, {
|
|
88
|
-
common:
|
|
131
|
+
common: common
|
|
89
132
|
});
|
|
90
133
|
}
|
|
91
|
-
async _runTxInt(tx, block) {
|
|
92
|
-
const txHash = (0, utils_1.bytesToHex)(tx.hash());
|
|
93
|
-
this._txs.push(tx);
|
|
94
|
-
this._stateRootBeforeTx.set(txHash, this.vm.stateManager.shallowCopy(true));
|
|
95
|
-
this._txToBlock.set(txHash, block);
|
|
96
|
-
const res = this.vm.runTx({
|
|
97
|
-
tx,
|
|
98
|
-
block,
|
|
99
|
-
skipBalance: true,
|
|
100
|
-
skipNonce: true,
|
|
101
|
-
skipBlockGasLimitValidation: true
|
|
102
|
-
});
|
|
103
|
-
await this.vm.stateManager.flush();
|
|
104
|
-
return res;
|
|
105
|
-
}
|
|
106
134
|
get txs() {
|
|
107
135
|
return this._txs;
|
|
108
136
|
}
|
|
@@ -121,6 +149,18 @@ class VMTestRunner {
|
|
|
121
149
|
(0, solc_typed_ast_1.assert)(res !== undefined, `Unable to find block for tx ${txHash}`);
|
|
122
150
|
return res;
|
|
123
151
|
}
|
|
152
|
+
getContractsBefore(tx) {
|
|
153
|
+
const txHash = (0, utils_1.bytesToHex)(tx.hash());
|
|
154
|
+
const res = this._contractsBeforeTx.get(txHash);
|
|
155
|
+
(0, solc_typed_ast_1.assert)(res !== undefined, `Unable to find contracts for tx ${txHash}`);
|
|
156
|
+
return res;
|
|
157
|
+
}
|
|
158
|
+
getKeccakPreimagesBefore(tx) {
|
|
159
|
+
const txHash = (0, utils_1.bytesToHex)(tx.hash());
|
|
160
|
+
const res = this._keccakPreimagesBeforeTx.get(txHash);
|
|
161
|
+
(0, solc_typed_ast_1.assert)(res !== undefined, `Unable to find keccak preimages for tx ${txHash}`);
|
|
162
|
+
return res;
|
|
163
|
+
}
|
|
124
164
|
}
|
|
125
165
|
exports.VMTestRunner = VMTestRunner;
|
|
126
166
|
//# sourceMappingURL=test_runner.js.map
|