sol-dbg 0.9.21 → 0.9.22
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/tracers/base_tracer.d.ts +6 -5
- package/dist/debug/tracers/base_tracer.d.ts.map +1 -1
- package/dist/debug/tracers/base_tracer.js +8 -6
- package/dist/debug/tracers/base_tracer.js.map +1 -1
- package/dist/debug/tracers/common.d.ts +6 -0
- package/dist/debug/tracers/common.d.ts.map +1 -0
- package/dist/debug/tracers/common.js +53 -0
- package/dist/debug/tracers/common.js.map +1 -0
- package/dist/utils/test_runner.d.ts +4 -3
- package/dist/utils/test_runner.d.ts.map +1 -1
- package/dist/utils/test_runner.js +18 -8
- package/dist/utils/test_runner.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Block } from "@ethereumjs/block";
|
|
2
|
-
import { StateManagerInterface } from "@ethereumjs/common";
|
|
2
|
+
import { Common, Hardfork, StateManagerInterface } from "@ethereumjs/common";
|
|
3
3
|
import { InterpreterStep } from "@ethereumjs/evm";
|
|
4
4
|
import { TypedTransaction } from "@ethereumjs/tx";
|
|
5
5
|
import { RunTxResult, VM } from "@ethereumjs/vm";
|
|
@@ -7,6 +7,7 @@ import { IArtifactManager } from "../artifact_manager";
|
|
|
7
7
|
export interface TracerOpts {
|
|
8
8
|
strict?: boolean;
|
|
9
9
|
foundryCheatcodes?: boolean;
|
|
10
|
+
forceHardfork?: Hardfork;
|
|
10
11
|
}
|
|
11
12
|
export interface FoundryTxResult extends RunTxResult {
|
|
12
13
|
failCalled: boolean;
|
|
@@ -24,6 +25,7 @@ export declare abstract class BaseSolTxTracer<TraceT, CtxT> {
|
|
|
24
25
|
artifactManager: IArtifactManager;
|
|
25
26
|
protected readonly strict: boolean;
|
|
26
27
|
protected readonly foundryCheatcodes: boolean;
|
|
28
|
+
protected readonly forceHardfork: Hardfork | undefined;
|
|
27
29
|
constructor(artifactManager: IArtifactManager, opts?: TracerOpts);
|
|
28
30
|
private static getEVM;
|
|
29
31
|
/**
|
|
@@ -34,7 +36,7 @@ export declare abstract class BaseSolTxTracer<TraceT, CtxT> {
|
|
|
34
36
|
* used.
|
|
35
37
|
*/
|
|
36
38
|
static releaseVM(vm: VM): void;
|
|
37
|
-
static createVm(stateManager: StateManagerInterface | undefined, foundryCheatcodes: boolean): Promise<VM>;
|
|
39
|
+
static createVm(stateManager: StateManagerInterface | undefined, foundryCheatcodes: boolean, common: Common): Promise<VM>;
|
|
38
40
|
abstract processRawTraceStep(vm: VM, step: InterpreterStep, trace: TraceT[], tx: TypedTransaction, ctx: CtxT): Promise<[TraceT, CtxT]>;
|
|
39
41
|
/**
|
|
40
42
|
* Run a TX with the specified "transformers" returning a quadruple including:
|
|
@@ -44,10 +46,9 @@ export declare abstract class BaseSolTxTracer<TraceT, CtxT> {
|
|
|
44
46
|
* 3. The StateManager at the end of the TX
|
|
45
47
|
* 4. The final (reduced) context `CtxT`
|
|
46
48
|
*/
|
|
47
|
-
debugTx(tx: TypedTransaction, block: Block
|
|
48
|
-
stateBefore: StateManagerInterface, ctx: CtxT): Promise<[TraceT[], FoundryTxResult, StateManagerInterface, CtxT]>;
|
|
49
|
+
debugTx(tx: TypedTransaction, block: Block, stateBefore: StateManagerInterface, ctx: CtxT): Promise<[TraceT[], FoundryTxResult, StateManagerInterface, CtxT]>;
|
|
49
50
|
}
|
|
50
51
|
export declare abstract class MapOnlyTracer<TraceT> extends BaseSolTxTracer<TraceT, null> {
|
|
51
|
-
debugTx(tx: TypedTransaction, block: Block
|
|
52
|
+
debugTx(tx: TypedTransaction, block: Block, stateBefore: StateManagerInterface): Promise<[TraceT[], FoundryTxResult, StateManagerInterface, null]>;
|
|
52
53
|
}
|
|
53
54
|
//# sourceMappingURL=base_tracer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base_tracer.d.ts","sourceRoot":"","sources":["../../../src/debug/tracers/base_tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,
|
|
1
|
+
{"version":3,"file":"base_tracer.d.ts","sourceRoot":"","sources":["../../../src/debug/tracers/base_tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAmC,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAmB,WAAW,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAElE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAWvD,MAAM,WAAW,UAAU;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,QAAQ,CAAC;CAC5B;AAED,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAChD,UAAU,EAAE,OAAO,CAAC;CACvB;AAQD;;;;;;;;GAQG;AACH,8BAAsB,eAAe,CAAC,MAAM,EAAE,IAAI;IAC9C,eAAe,EAAG,gBAAgB,CAAC;IACnC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACnC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;IAC9C,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,QAAQ,GAAG,SAAS,CAAC;gBAE3C,eAAe,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,UAAU;mBAkB3C,MAAM;IA8B3B;;;;;;OAMG;IACH,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI;WAUjB,QAAQ,CACjB,YAAY,EAAE,qBAAqB,GAAG,SAAS,EAC/C,iBAAiB,EAAE,OAAO,EAC1B,MAAM,EAAE,MAAM,GACf,OAAO,CAAC,EAAE,CAAC;IAyBd,QAAQ,CAAC,mBAAmB,CACxB,EAAE,EAAE,EAAE,EACN,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,MAAM,EAAE,EACf,EAAE,EAAE,gBAAgB,EACpB,GAAG,EAAE,IAAI,GACV,OAAO,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAE1B;;;;;;;OAOG;IACG,OAAO,CACT,EAAE,EAAE,gBAAgB,EACpB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,qBAAqB,EAClC,GAAG,EAAE,IAAI,GACV,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;CAgDvE;AAED,8BAAsB,aAAa,CAAC,MAAM,CAAE,SAAQ,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC;IACvE,OAAO,CACT,EAAE,EAAE,gBAAgB,EACpB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,qBAAqB,GACnC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;CAGvE"}
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MapOnlyTracer = exports.BaseSolTxTracer = void 0;
|
|
4
4
|
const blockchain_1 = require("@ethereumjs/blockchain");
|
|
5
|
-
const common_1 = require("@ethereumjs/common");
|
|
6
5
|
const evm_1 = require("@ethereumjs/evm");
|
|
7
6
|
const statemanager_1 = require("@ethereumjs/statemanager");
|
|
8
7
|
const vm_1 = require("@ethereumjs/vm");
|
|
9
8
|
const solc_typed_ast_1 = require("solc-typed-ast");
|
|
10
9
|
const foundry_cheatcodes_1 = require("../foundry_cheatcodes");
|
|
11
10
|
const opcode_interposing_1 = require("../opcode_interposing");
|
|
11
|
+
const common_1 = require("./common");
|
|
12
12
|
/**
|
|
13
13
|
* Private map tracking VM-to-EVM mapping, used when releasing EVMs from the
|
|
14
14
|
* global listener map for foundry cheatcodes.
|
|
@@ -34,6 +34,7 @@ class BaseSolTxTracer {
|
|
|
34
34
|
opts.foundryCheatcodes !== undefined
|
|
35
35
|
? opts.foundryCheatcodes
|
|
36
36
|
: this.foundryCheatcodes;
|
|
37
|
+
this.forceHardfork = opts.forceHardfork;
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
40
|
static async getEVM(opts, foundryCheatcodes) {
|
|
@@ -75,8 +76,7 @@ class BaseSolTxTracer {
|
|
|
75
76
|
}
|
|
76
77
|
vmToEVMMap.delete(vm);
|
|
77
78
|
}
|
|
78
|
-
static async createVm(stateManager, foundryCheatcodes) {
|
|
79
|
-
const common = new common_1.Common({ chain: common_1.Mainnet, hardfork: common_1.Hardfork.Cancun });
|
|
79
|
+
static async createVm(stateManager, foundryCheatcodes, common) {
|
|
80
80
|
const blockchain = await (0, blockchain_1.createBlockchain)({ common });
|
|
81
81
|
if (!stateManager) {
|
|
82
82
|
stateManager = new statemanager_1.MerkleStateManager();
|
|
@@ -100,9 +100,11 @@ class BaseSolTxTracer {
|
|
|
100
100
|
* 3. The StateManager at the end of the TX
|
|
101
101
|
* 4. The final (reduced) context `CtxT`
|
|
102
102
|
*/
|
|
103
|
-
async debugTx(tx, block,
|
|
104
|
-
|
|
105
|
-
|
|
103
|
+
async debugTx(tx, block, stateBefore, ctx) {
|
|
104
|
+
const common = this.forceHardfork
|
|
105
|
+
? (0, common_1.getCommon)(this.forceHardfork)
|
|
106
|
+
: (0, common_1.getCommonForBlock)(block);
|
|
107
|
+
const vm = await BaseSolTxTracer.createVm(stateBefore.shallowCopy(true), this.foundryCheatcodes, common);
|
|
106
108
|
const trace = [];
|
|
107
109
|
(0, solc_typed_ast_1.assert)(vm.evm.events !== undefined, "Unable to access EVM events at this point");
|
|
108
110
|
vm.evm.events.on("step", async (step, next) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base_tracer.js","sourceRoot":"","sources":["../../../src/debug/tracers/base_tracer.ts"],"names":[],"mappings":";;;AACA,uDAA0D;
|
|
1
|
+
{"version":3,"file":"base_tracer.js","sourceRoot":"","sources":["../../../src/debug/tracers/base_tracer.ts"],"names":[],"mappings":";;;AACA,uDAA0D;AAE1D,yCAAmF;AACnF,2DAA8D;AAE9D,uCAAkE;AAClE,mDAAwC;AAExC,8DAK+B;AAC/B,8DAA6D;AAE7D,qCAAwD;AAYxD;;;GAGG;AACH,MAAM,UAAU,GAAG,IAAI,GAAG,EAAW,CAAC;AAEtC;;;;;;;;GAQG;AACH,MAAsB,eAAe;IAMjC,YAAY,eAAiC,EAAE,IAAiB;QAC5D,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QAEvC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAE/B,IAAI,IAAI,EAAE,CAAC;YACP,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;YAEpE,IAAI,CAAC,iBAAiB;gBAClB,IAAI,CAAC,iBAAiB,KAAK,SAAS;oBAChC,CAAC,CAAC,IAAI,CAAC,iBAAiB;oBACxB,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAEjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QAC5C,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAa,EAAE,iBAA0B;QACjE,MAAM,MAAM,GAAG,MAAM,IAAA,eAAS,EAAC,IAAI,CAAC,CAAC;QAErC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACrB,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,IAAA,qBAAe,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,IAAA,mDAA8B,GAAE,CAAC;QAElE,MAAM,QAAQ,GAAY;YACtB,GAAG,IAAI;YACP,aAAa,EAAE;gBACX,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjD,GAAG,IAAA,yCAAoB,EAAC,OAAO,EAAE,UAAU,CAAC;aAC/C;YACD,iBAAiB,EAAE;gBACf,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD;oBACI,OAAO,EAAE,6CAAwB;oBACjC,QAAQ,EAAE,UAAU;iBACvB;aACJ;SACJ,CAAC;QAEF,MAAM,GAAG,GAAG,MAAM,IAAA,eAAS,EAAC,QAAQ,CAAC,CAAC;QACtC,kCAAa,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACnC,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,SAAS,CAAC,EAAM;QACnB,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE/B,IAAI,GAAG,EAAE,CAAC;YACN,kCAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;QAED,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,QAAQ,CACjB,YAA+C,EAC/C,iBAA0B,EAC1B,MAAc;QAEd,MAAM,UAAU,GAAG,MAAM,IAAA,6BAAgB,EAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAEtD,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,YAAY,GAAG,IAAI,iCAAkB,EAAE,CAAC;QAC5C,CAAC;QAED,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,MAAM,CACpC,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,0BAA0B,EAAE,IAAI,EAAE,EACtE,iBAAiB,CACpB,CAAC;QAEF,MAAM,EAAE,GAAG,MAAM,IAAA,aAAQ,EAAC;YACtB,MAAM;YACN,UAAU;YACV,YAAY;YACZ,GAAG;YACH,mBAAmB,EAAE,IAAI;SAC5B,CAAC,CAAC;QAEH,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAExB,OAAO,EAAE,CAAC;IACd,CAAC;IAUD;;;;;;;OAOG;IACH,KAAK,CAAC,OAAO,CACT,EAAoB,EACpB,KAAY,EACZ,WAAkC,EAClC,GAAS;QAET,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa;YAC7B,CAAC,CAAC,IAAA,kBAAS,EAAC,IAAI,CAAC,aAAa,CAAC;YAC/B,CAAC,CAAC,IAAA,0BAAiB,EAAC,KAAK,CAAC,CAAC;QAE/B,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,QAAQ,CACrC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,EAC7B,IAAI,CAAC,iBAAiB,EACtB,MAAM,CACT,CAAC;QAEF,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAA,uBAAM,EAAC,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,2CAA2C,CAAC,CAAC;QAEjF,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAqB,EAAE,IAAS,EAAE,EAAE;YAChE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACnF,GAAG,GAAG,MAAM,CAAC;YAEb,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEpB,IAAI,EAAE,CAAC;QACX,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,MAAM,IAAA,UAAK,EAAC,EAAE,EAAE;YAC1B,EAAE;YACF,KAAK;YACL,WAAW,EAAE,IAAI;YACjB,SAAS,EAAE,IAAI;YACf,2BAA2B,EAAE,IAAI;SACpC,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAA,kCAAa,EAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,iBAAiB,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;QACnF,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC;QAEnC,eAAe,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAE9B,OAAO;YACH,KAAK;YACL;gBACI,GAAG,KAAK;gBACR,UAAU,EAAE,iBAAiB;aAChC;YACD,UAAU;YACV,GAAG;SACN,CAAC;IACN,CAAC;CACJ;AAzKD,0CAyKC;AAED,MAAsB,aAAsB,SAAQ,eAA6B;IAC7E,KAAK,CAAC,OAAO,CACT,EAAoB,EACpB,KAAY,EACZ,WAAkC;QAElC,OAAO,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;CACJ;AARD,sCAQC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Block, BlockData } from "@ethereumjs/block";
|
|
2
|
+
import { Hardfork, Common } from "@ethereumjs/common";
|
|
3
|
+
export declare function getCommon(hardfork: Hardfork): Common;
|
|
4
|
+
export declare function getCommonByBlockNum(blockNum?: bigint | undefined): Common;
|
|
5
|
+
export declare function getCommonForBlock(blockData: BlockData | Block): Common;
|
|
6
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/debug/tracers/common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAW,MAAM,oBAAoB,CAAC;AAwB/D,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAEpD;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,GAAE,MAAM,GAAG,SAAqB,GAAG,MAAM,CAapF;AACD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,GAAG,KAAK,GAAG,MAAM,CAWtE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getCommon = getCommon;
|
|
4
|
+
exports.getCommonByBlockNum = getCommonByBlockNum;
|
|
5
|
+
exports.getCommonForBlock = getCommonForBlock;
|
|
6
|
+
const common_1 = require("@ethereumjs/common");
|
|
7
|
+
const util_1 = require("@ethereumjs/util");
|
|
8
|
+
const hardforkBlocks = [
|
|
9
|
+
[0n, common_1.Hardfork.Chainstart],
|
|
10
|
+
[1150000n, common_1.Hardfork.Homestead],
|
|
11
|
+
[1920000n, common_1.Hardfork.Dao],
|
|
12
|
+
[2463000n, common_1.Hardfork.TangerineWhistle],
|
|
13
|
+
[2675000n, common_1.Hardfork.SpuriousDragon],
|
|
14
|
+
[4370000n, common_1.Hardfork.Byzantium],
|
|
15
|
+
[7280000n, common_1.Hardfork.Constantinople],
|
|
16
|
+
[9069000n, common_1.Hardfork.Istanbul],
|
|
17
|
+
[9200000n, common_1.Hardfork.MuirGlacier],
|
|
18
|
+
[12244000n, common_1.Hardfork.Berlin],
|
|
19
|
+
[12965000n, common_1.Hardfork.London],
|
|
20
|
+
[13774000n, common_1.Hardfork.ArrowGlacier],
|
|
21
|
+
[15050000n, common_1.Hardfork.GrayGlacier],
|
|
22
|
+
[15537394n, common_1.Hardfork.Paris],
|
|
23
|
+
[17034870n, common_1.Hardfork.Shanghai],
|
|
24
|
+
[19426587n, common_1.Hardfork.Cancun],
|
|
25
|
+
[22431084n, common_1.Hardfork.Prague],
|
|
26
|
+
[23935694n, common_1.Hardfork.Osaka]
|
|
27
|
+
];
|
|
28
|
+
function getCommon(hardfork) {
|
|
29
|
+
return new common_1.Common({ chain: common_1.Mainnet, hardfork });
|
|
30
|
+
}
|
|
31
|
+
function getCommonByBlockNum(blockNum = undefined) {
|
|
32
|
+
let hardfork = hardforkBlocks[hardforkBlocks.length - 1][1];
|
|
33
|
+
if (blockNum !== undefined) {
|
|
34
|
+
for (let i = 0; i < hardforkBlocks.length - 1; i++) {
|
|
35
|
+
if (blockNum >= hardforkBlocks[i][0] && blockNum < hardforkBlocks[i + 1][0]) {
|
|
36
|
+
hardfork = hardforkBlocks[i][1];
|
|
37
|
+
break;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return getCommon(hardfork);
|
|
42
|
+
}
|
|
43
|
+
function getCommonForBlock(blockData) {
|
|
44
|
+
if (blockData.header && blockData.header.number !== undefined) {
|
|
45
|
+
const num = blockData.header.number instanceof Uint8Array
|
|
46
|
+
? (0, util_1.bytesToBigInt)(blockData.header.number)
|
|
47
|
+
: BigInt(blockData.header.number);
|
|
48
|
+
return getCommonByBlockNum(num);
|
|
49
|
+
}
|
|
50
|
+
// @todo fix this after we update underlying repos to latest compiler and sol-dbg to latest hardfork
|
|
51
|
+
return getCommon(common_1.Hardfork.Cancun);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/debug/tracers/common.ts"],"names":[],"mappings":";;AAyBA,8BAEC;AAED,kDAaC;AACD,8CAWC;AArDD,+CAA+D;AAC/D,2CAAiD;AAEjD,MAAM,cAAc,GAA8B;IAC9C,CAAC,EAAE,EAAE,iBAAQ,CAAC,UAAU,CAAC;IACzB,CAAC,QAAQ,EAAE,iBAAQ,CAAC,SAAS,CAAC;IAC9B,CAAC,QAAQ,EAAE,iBAAQ,CAAC,GAAG,CAAC;IACxB,CAAC,QAAQ,EAAE,iBAAQ,CAAC,gBAAgB,CAAC;IACrC,CAAC,QAAQ,EAAE,iBAAQ,CAAC,cAAc,CAAC;IACnC,CAAC,QAAQ,EAAE,iBAAQ,CAAC,SAAS,CAAC;IAC9B,CAAC,QAAQ,EAAE,iBAAQ,CAAC,cAAc,CAAC;IACnC,CAAC,QAAQ,EAAE,iBAAQ,CAAC,QAAQ,CAAC;IAC7B,CAAC,QAAQ,EAAE,iBAAQ,CAAC,WAAW,CAAC;IAChC,CAAC,SAAS,EAAE,iBAAQ,CAAC,MAAM,CAAC;IAC5B,CAAC,SAAS,EAAE,iBAAQ,CAAC,MAAM,CAAC;IAC5B,CAAC,SAAS,EAAE,iBAAQ,CAAC,YAAY,CAAC;IAClC,CAAC,SAAS,EAAE,iBAAQ,CAAC,WAAW,CAAC;IACjC,CAAC,SAAS,EAAE,iBAAQ,CAAC,KAAK,CAAC;IAC3B,CAAC,SAAS,EAAE,iBAAQ,CAAC,QAAQ,CAAC;IAC9B,CAAC,SAAS,EAAE,iBAAQ,CAAC,MAAM,CAAC;IAC5B,CAAC,SAAS,EAAE,iBAAQ,CAAC,MAAM,CAAC;IAC5B,CAAC,SAAS,EAAE,iBAAQ,CAAC,KAAK,CAAC;CAC9B,CAAC;AAEF,SAAgB,SAAS,CAAC,QAAkB;IACxC,OAAO,IAAI,eAAM,CAAC,EAAE,KAAK,EAAE,gBAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,SAAgB,mBAAmB,CAAC,WAA+B,SAAS;IACxE,IAAI,QAAQ,GAAa,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtE,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,IAAI,QAAQ,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1E,QAAQ,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChC,MAAM;YACV,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC;AACD,SAAgB,iBAAiB,CAAC,SAA4B;IAC1D,IAAI,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC5D,MAAM,GAAG,GACL,SAAS,CAAC,MAAM,CAAC,MAAM,YAAY,UAAU;YACzC,CAAC,CAAC,IAAA,oBAAa,EAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;YACxC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,oGAAoG;IACpG,OAAO,SAAS,CAAC,iBAAQ,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Block } from "@ethereumjs/block";
|
|
2
|
-
import { Common, StateManagerInterface } from "@ethereumjs/common";
|
|
2
|
+
import { Common, Hardfork, StateManagerInterface } from "@ethereumjs/common";
|
|
3
3
|
import { TypedTransaction } from "@ethereumjs/tx";
|
|
4
4
|
import { Address, PrefixedHexString } from "@ethereumjs/util";
|
|
5
5
|
import { IArtifactManager } from "../debug/artifact_manager/artifact_manager";
|
|
@@ -35,6 +35,7 @@ export interface InitialState {
|
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
37
|
export interface Scenario {
|
|
38
|
+
hardfork?: string;
|
|
38
39
|
initialState: InitialState;
|
|
39
40
|
steps: TxDesc[];
|
|
40
41
|
}
|
|
@@ -53,7 +54,7 @@ export declare function blockFromTxDesc(step: TxDesc, common: Common): Block;
|
|
|
53
54
|
export declare class TxRunner {
|
|
54
55
|
readonly artifactManager: IArtifactManager;
|
|
55
56
|
private _foundryCheatcodes;
|
|
56
|
-
private
|
|
57
|
+
private forceHardfork;
|
|
57
58
|
private _txs;
|
|
58
59
|
private _txToBlock;
|
|
59
60
|
private _results;
|
|
@@ -61,7 +62,7 @@ export declare class TxRunner {
|
|
|
61
62
|
private _stateRootAfterTx;
|
|
62
63
|
private _contractsBeforeTx;
|
|
63
64
|
private _keccakPreimagesBeforeTx;
|
|
64
|
-
constructor(artifactManager: IArtifactManager, _foundryCheatcodes?: boolean);
|
|
65
|
+
constructor(artifactManager: IArtifactManager, _foundryCheatcodes?: boolean, forceHardfork?: Hardfork | undefined);
|
|
65
66
|
runScenario(scenario: Scenario): Promise<void>;
|
|
66
67
|
private setupInitialState;
|
|
67
68
|
get txs(): TypedTransaction[];
|
|
@@ -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;AACvD,OAAO,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;
|
|
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;AACvD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE7E,OAAO,EAAE,gBAAgB,EAAe,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EACH,OAAO,EACP,iBAAiB,EAIpB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAwB,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAIhF,OAAO,EAEH,iBAAiB,EACpB,MAAM,gDAAgD,CAAC;AAIxD,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,MAAM,WAAW,MAAM;IACnB,OAAO,EAAE,SAAS,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;IACpB,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,SAAS,CAAC;IACjB,aAAa,EAAE,SAAS,CAAC;IACzB,eAAe,EAAE,SAAS,CAAC;IAC3B,aAAa,EAAE,SAAS,CAAC;IACzB,WAAW,EAAE,SAAS,CAAC;IACvB,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,SAAS,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE;QACL,CAAC,WAAW,EAAE,SAAS,GAAG,SAAS,CAAC;KACvC,CAAC;CACL;AAED,MAAM,WAAW,YAAY;IACzB,QAAQ,EAAE;QACN,CAAC,OAAO,EAAE,SAAS,GAAG,kBAAkB,CAAC;KAC5C,CAAC;CACL;AAED,MAAM,WAAW,QAAQ;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAczE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAenE;AAED;;;;;;;;;GASG;AACH,qBAAa,QAAQ;aAUG,eAAe,EAAE,gBAAgB;IACjD,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,aAAa;IAXzB,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,kBAAkB,CAA4C;IACtE,OAAO,CAAC,iBAAiB,CAA4C;IACrE,OAAO,CAAC,kBAAkB,CAA6C;IACvE,OAAO,CAAC,wBAAwB,CAA8C;gBAG1D,eAAe,EAAE,gBAAgB,EACzC,kBAAkB,GAAE,OAAc,EAClC,aAAa,GAAE,QAAQ,GAAG,SAAqB;IAOrD,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;YAoEtC,iBAAiB;IA0C/B,IAAI,GAAG,IAAI,gBAAgB,EAAE,CAE5B;IAED,IAAI,OAAO,IAAI,eAAe,EAAE,CAE/B;IAED,gBAAgB,CAAC,EAAE,EAAE,gBAAgB,GAAG,qBAAqB;IAS7D,eAAe,CAAC,EAAE,EAAE,gBAAgB,GAAG,qBAAqB;IAS5D,QAAQ,CAAC,EAAE,EAAE,gBAAgB,GAAG,KAAK;IASrC,kBAAkB,CAAC,EAAE,EAAE,gBAAgB,GAAG,GAAG,CAAC,iBAAiB,CAAC;IAShE,wBAAwB,CAAC,EAAE,EAAE,gBAAgB,GAAG,iBAAiB;IAS3D,gCAAgC,CAClC,EAAE,EAAE,gBAAgB,EACpB,SAAS,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,GAC9B,OAAO,CAAC,cAAc,CAAC;IAWpB,gCAAgC,CAClC,EAAE,EAAE,gBAAgB,EACpB,OAAO,EAAE,MAAM,GAChB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;IAwBhC,KAAK,CAAC,KAAK,EAAE,IAAI,EACnB,EAAE,EAAE,gBAAgB,EACpB,MAAM,EAAE,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,EACpC,GAAG,EAAE,IAAI,GACV,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,eAAe,EAAE,qBAAqB,EAAE,IAAI,CAAC,CAAC;CAMtE"}
|
|
@@ -4,6 +4,7 @@ exports.TxRunner = void 0;
|
|
|
4
4
|
exports.txDescToTx = txDescToTx;
|
|
5
5
|
exports.blockFromTxDesc = blockFromTxDesc;
|
|
6
6
|
const block_1 = require("@ethereumjs/block");
|
|
7
|
+
const common_1 = require("@ethereumjs/common");
|
|
7
8
|
const util_1 = require("@ethereumjs/util");
|
|
8
9
|
const utils_1 = require("ethereum-cryptography/utils");
|
|
9
10
|
const solc_typed_ast_1 = require("solc-typed-ast");
|
|
@@ -16,6 +17,7 @@ const keccak256_invert_1 = require("../debug/tracers/transformers/keccak256_inve
|
|
|
16
17
|
const map_1 = require("./map");
|
|
17
18
|
const misc_1 = require("./misc");
|
|
18
19
|
const set_1 = require("./set");
|
|
20
|
+
const common_2 = require("../debug/tracers/common");
|
|
19
21
|
function txDescToTx(step, common) {
|
|
20
22
|
const txData = {
|
|
21
23
|
value: (0, util_1.hexToBigInt)(step.value),
|
|
@@ -53,32 +55,39 @@ function blockFromTxDesc(step, common) {
|
|
|
53
55
|
* 6. The set of keccak256 (result, preimage) pairs computed by the TX (useful for computing Solidity-level maps)
|
|
54
56
|
*/
|
|
55
57
|
class TxRunner {
|
|
56
|
-
constructor(artifactManager, _foundryCheatcodes = true) {
|
|
58
|
+
constructor(artifactManager, _foundryCheatcodes = true, forceHardfork = undefined) {
|
|
57
59
|
this.artifactManager = artifactManager;
|
|
58
60
|
this._foundryCheatcodes = _foundryCheatcodes;
|
|
61
|
+
this.forceHardfork = forceHardfork;
|
|
59
62
|
this._stateRootBeforeTx = new Map();
|
|
60
63
|
this._stateRootAfterTx = new Map();
|
|
61
64
|
this._contractsBeforeTx = new Map();
|
|
62
65
|
this._keccakPreimagesBeforeTx = new Map();
|
|
63
|
-
this.tracer = new support_tracer_1.SupportTracer(artifactManager, {
|
|
64
|
-
strict: true,
|
|
65
|
-
foundryCheatcodes: this._foundryCheatcodes
|
|
66
|
-
});
|
|
67
66
|
this._txs = [];
|
|
68
67
|
this._results = [];
|
|
69
68
|
this._txToBlock = new Map();
|
|
70
69
|
}
|
|
71
70
|
async runScenario(scenario) {
|
|
71
|
+
const hardfork = this.forceHardfork
|
|
72
|
+
? this.forceHardfork
|
|
73
|
+
: scenario.hardfork === undefined
|
|
74
|
+
? common_1.Hardfork.Cancun
|
|
75
|
+
: scenario.hardfork;
|
|
72
76
|
/**
|
|
73
77
|
* Dummy VM used just to get a StateManager and a Common instance. The actual VM used for execution is created inside
|
|
74
78
|
* SupportTracer. (@todo this is kinda ugly... oh well)
|
|
75
79
|
*/
|
|
76
|
-
const dummyVM = await base_tracer_1.BaseSolTxTracer.createVm(undefined, this._foundryCheatcodes);
|
|
80
|
+
const dummyVM = await base_tracer_1.BaseSolTxTracer.createVm(undefined, this._foundryCheatcodes, (0, common_2.getCommon)(hardfork));
|
|
77
81
|
let stateManager = dummyVM.stateManager.shallowCopy();
|
|
78
82
|
const common = dummyVM.common.copy();
|
|
79
83
|
base_tracer_1.BaseSolTxTracer.releaseVM(dummyVM);
|
|
80
84
|
const contractsBefore = await this.setupInitialState(scenario.initialState, stateManager);
|
|
81
85
|
const keccakPreimages = new Map();
|
|
86
|
+
const tracer = new support_tracer_1.SupportTracer(this.artifactManager, {
|
|
87
|
+
strict: true,
|
|
88
|
+
foundryCheatcodes: this._foundryCheatcodes,
|
|
89
|
+
forceHardfork: hardfork
|
|
90
|
+
});
|
|
82
91
|
for (let i = 0; i < scenario.steps.length; i++) {
|
|
83
92
|
const tx = txDescToTx(scenario.steps[i], common);
|
|
84
93
|
const block = blockFromTxDesc(scenario.steps[i], common);
|
|
@@ -89,7 +98,7 @@ class TxRunner {
|
|
|
89
98
|
this._txToBlock.set(txHash, block);
|
|
90
99
|
this._contractsBeforeTx.set(txHash, new Set(contractsBefore));
|
|
91
100
|
this._keccakPreimagesBeforeTx.set(txHash, new Map(keccakPreimages));
|
|
92
|
-
const [trace, res, stateAfter] = await
|
|
101
|
+
const [trace, res, stateAfter] = await tracer.debugTx(tx, block, stateManager);
|
|
93
102
|
await stateManager.flush();
|
|
94
103
|
const [gen, kill] = (0, contract_lifetime_1.getContractGenKillSet)(trace, res);
|
|
95
104
|
(0, set_1.set_add)(contractsBefore, gen);
|
|
@@ -176,7 +185,8 @@ class TxRunner {
|
|
|
176
185
|
async getDecodedContractStatesOnTxStep(tx, stepNum) {
|
|
177
186
|
const tracer = new storage_decode_tracer_1.StorageDecodeTracer(this.artifactManager, {
|
|
178
187
|
strict: true,
|
|
179
|
-
foundryCheatcodes: this._foundryCheatcodes
|
|
188
|
+
foundryCheatcodes: this._foundryCheatcodes,
|
|
189
|
+
forceHardfork: this.forceHardfork
|
|
180
190
|
});
|
|
181
191
|
const liveContracts = new Set(this.getContractsBefore(tx));
|
|
182
192
|
const preimages = new Map(this.getKeccakPreimagesBefore(tx));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test_runner.js","sourceRoot":"","sources":["../../src/utils/test_runner.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"test_runner.js","sourceRoot":"","sources":["../../src/utils/test_runner.ts"],"names":[],"mappings":"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"}
|