sol-dbg 0.5.0 → 0.6.2

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 (73) hide show
  1. package/dist/debug/decoding/general.d.ts +2 -1
  2. package/dist/debug/decoding/general.d.ts.map +1 -1
  3. package/dist/debug/decoding/general.js +5 -5
  4. package/dist/debug/decoding/general.js.map +1 -1
  5. package/dist/debug/decoding/storage.d.ts +6 -3
  6. package/dist/debug/decoding/storage.d.ts.map +1 -1
  7. package/dist/debug/decoding/storage.js +73 -13
  8. package/dist/debug/decoding/storage.js.map +1 -1
  9. package/dist/debug/foundry_cheatcodes.d.ts +2 -1
  10. package/dist/debug/foundry_cheatcodes.d.ts.map +1 -1
  11. package/dist/debug/foundry_cheatcodes.js +4 -0
  12. package/dist/debug/foundry_cheatcodes.js.map +1 -1
  13. package/dist/debug/index.d.ts +1 -0
  14. package/dist/debug/index.d.ts.map +1 -1
  15. package/dist/debug/index.js +1 -0
  16. package/dist/debug/index.js.map +1 -1
  17. package/dist/debug/layout.d.ts +9 -0
  18. package/dist/debug/layout.d.ts.map +1 -0
  19. package/dist/debug/layout.js +80 -0
  20. package/dist/debug/layout.js.map +1 -0
  21. package/dist/debug/tracers/base_tracer.d.ts +4 -1
  22. package/dist/debug/tracers/base_tracer.d.ts.map +1 -1
  23. package/dist/debug/tracers/base_tracer.js +13 -3
  24. package/dist/debug/tracers/base_tracer.js.map +1 -1
  25. package/dist/debug/tracers/index.d.ts +1 -0
  26. package/dist/debug/tracers/index.d.ts.map +1 -1
  27. package/dist/debug/tracers/index.js +1 -0
  28. package/dist/debug/tracers/index.js.map +1 -1
  29. package/dist/debug/tracers/support_tracer.d.ts +15 -0
  30. package/dist/debug/tracers/support_tracer.d.ts.map +1 -0
  31. package/dist/debug/tracers/support_tracer.js +22 -0
  32. package/dist/debug/tracers/support_tracer.js.map +1 -0
  33. package/dist/debug/tracers/transformers/basic_info.d.ts +2 -0
  34. package/dist/debug/tracers/transformers/basic_info.d.ts.map +1 -1
  35. package/dist/debug/tracers/transformers/basic_info.js +2 -0
  36. package/dist/debug/tracers/transformers/basic_info.js.map +1 -1
  37. package/dist/debug/tracers/transformers/contract_lifetime.d.ts +21 -0
  38. package/dist/debug/tracers/transformers/contract_lifetime.d.ts.map +1 -0
  39. package/dist/debug/tracers/transformers/contract_lifetime.js +70 -0
  40. package/dist/debug/tracers/transformers/contract_lifetime.js.map +1 -0
  41. package/dist/debug/tracers/transformers/index.d.ts +2 -0
  42. package/dist/debug/tracers/transformers/index.d.ts.map +1 -1
  43. package/dist/debug/tracers/transformers/index.js +2 -0
  44. package/dist/debug/tracers/transformers/index.js.map +1 -1
  45. package/dist/debug/tracers/transformers/keccak256_invert.d.ts +29 -0
  46. package/dist/debug/tracers/transformers/keccak256_invert.d.ts.map +1 -0
  47. package/dist/debug/tracers/transformers/keccak256_invert.js +65 -0
  48. package/dist/debug/tracers/transformers/keccak256_invert.js.map +1 -0
  49. package/dist/utils/index.d.ts +3 -0
  50. package/dist/utils/index.d.ts.map +1 -1
  51. package/dist/utils/index.js +3 -0
  52. package/dist/utils/index.js.map +1 -1
  53. package/dist/utils/map.d.ts +5 -0
  54. package/dist/utils/map.d.ts.map +1 -0
  55. package/dist/utils/map.js +12 -0
  56. package/dist/utils/map.js.map +1 -0
  57. package/dist/utils/pp.d.ts +2 -1
  58. package/dist/utils/pp.d.ts.map +1 -1
  59. package/dist/utils/pp.js +2 -2
  60. package/dist/utils/pp.js.map +1 -1
  61. package/dist/utils/set.d.ts +9 -0
  62. package/dist/utils/set.d.ts.map +1 -0
  63. package/dist/utils/set.js +21 -0
  64. package/dist/utils/set.js.map +1 -0
  65. package/dist/utils/test_runner.d.ts +22 -10
  66. package/dist/utils/test_runner.d.ts.map +1 -1
  67. package/dist/utils/test_runner.js +73 -33
  68. package/dist/utils/test_runner.js.map +1 -1
  69. package/dist/utils/trace.d.ts +18 -0
  70. package/dist/utils/trace.d.ts.map +1 -0
  71. package/dist/utils/trace.js +87 -0
  72. package/dist/utils/trace.js.map +1 -0
  73. package/package.json +1 -1
@@ -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 { RunTxResult, VM } from "@ethereumjs/vm";
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 re-play harvey test cases on a in-memory VmProxy
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 _vm;
82
+ private _foundryCheatcodes;
83
+ private tracer;
74
84
  private _txs;
75
85
  private _txToBlock;
76
86
  private _results;
77
87
  private _stateRootBeforeTx;
78
- get vm(): VM;
79
- constructor(vm: VM);
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(): RunTxResult[];
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":"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"}
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 re-play harvey test cases on a in-memory VmProxy
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
- get vm() {
23
- return this._vm;
24
- }
25
- constructor(vm) {
32
+ constructor(artifactManager, _foundryCheatcodes = true) {
33
+ this._foundryCheatcodes = _foundryCheatcodes;
26
34
  this._stateRootBeforeTx = new Map();
27
- this._vm = vm;
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
- await this.setupInitialState(testCaseJSON.initialState);
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 res = await this._runTxInt(tx, block);
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 state = this.vm.stateManager;
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 this.vm.stateManager.getAccount(senderAddress);
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, this._vm.common);
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: this.vm.common.hardfork() === common_1.Hardfork.Shanghai ? 0 : step.blockDifficulty,
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: this.vm.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
@@ -1 +1 @@
1
- {"version":3,"file":"test_runner.js","sourceRoot":"","sources":["../../src/utils/test_runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test_runner.js","sourceRoot":"","sources":["../../src/utils/test_runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { StepState } from "../debug";
2
+ /**
3
+ * Find the last step in the non-internal code, before trace step i
4
+ */
5
+ export declare function findLastNonInternalStepBeforeStepI(trace: StepState[], i: number): StepState | undefined;
6
+ /**
7
+ * Find the last step in the non-internal code, that leads to the first revert
8
+ */
9
+ export declare function findLastNonInternalStepBeforeRevert(trace: StepState[]): StepState | undefined;
10
+ /**
11
+ * Find the last step in the non-internal code, that leads to the last revert
12
+ */
13
+ export declare function findLastNonInternalStepBeforeLastRevert(trace: StepState[]): StepState | undefined;
14
+ /**
15
+ * Find the last step before calling the foundry cheatcode fail()
16
+ */
17
+ export declare function findFirstCallToFail(trace: StepState[]): StepState | undefined;
18
+ //# sourceMappingURL=trace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/utils/trace.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAKrC;;GAEG;AACH,wBAAgB,kCAAkC,CAC9C,KAAK,EAAE,SAAS,EAAE,EAClB,CAAC,EAAE,MAAM,GACV,SAAS,GAAG,SAAS,CAcvB;AAED;;GAEG;AACH,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,GAAG,SAAS,CAc7F;AAED;;GAEG;AACH,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,GAAG,SAAS,CAcjG;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,GAAG,SAAS,CAmC7E"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findLastNonInternalStepBeforeStepI = findLastNonInternalStepBeforeStepI;
4
+ exports.findLastNonInternalStepBeforeRevert = findLastNonInternalStepBeforeRevert;
5
+ exports.findLastNonInternalStepBeforeLastRevert = findLastNonInternalStepBeforeLastRevert;
6
+ exports.findFirstCallToFail = findFirstCallToFail;
7
+ const utils_1 = require("ethereum-cryptography/utils");
8
+ const solc_typed_ast_1 = require("solc-typed-ast");
9
+ const foundry_cheatcodes_1 = require("../debug/foundry_cheatcodes");
10
+ const misc_1 = require("./misc");
11
+ const pp_1 = require("./pp");
12
+ /**
13
+ * Find the last step in the non-internal code, before trace step i
14
+ */
15
+ function findLastNonInternalStepBeforeStepI(trace, i) {
16
+ const stack = (0, pp_1.flattenStack)(trace[i].stack);
17
+ for (let j = stack.length - 1; j >= 0; j--) {
18
+ if (stack[j].callee instanceof solc_typed_ast_1.FunctionDefinition) {
19
+ if (j === stack.length - 1) {
20
+ return trace[i];
21
+ }
22
+ return trace[stack[j + 1].startStep - 1];
23
+ }
24
+ }
25
+ return undefined;
26
+ }
27
+ /**
28
+ * Find the last step in the non-internal code, that leads to the first revert
29
+ */
30
+ function findLastNonInternalStepBeforeRevert(trace) {
31
+ let i = 0;
32
+ for (; i < trace.length; i++) {
33
+ if (trace[i].op.opcode === 0xfd) {
34
+ break;
35
+ }
36
+ }
37
+ if (i === trace.length) {
38
+ return undefined;
39
+ }
40
+ return findLastNonInternalStepBeforeStepI(trace, i);
41
+ }
42
+ /**
43
+ * Find the last step in the non-internal code, that leads to the last revert
44
+ */
45
+ function findLastNonInternalStepBeforeLastRevert(trace) {
46
+ let i = trace.length - 1;
47
+ for (; i >= 0; i--) {
48
+ if (trace[i].op.opcode === 0xfd) {
49
+ break;
50
+ }
51
+ }
52
+ if (i < 0) {
53
+ return undefined;
54
+ }
55
+ return findLastNonInternalStepBeforeStepI(trace, i);
56
+ }
57
+ /**
58
+ * Find the last step before calling the foundry cheatcode fail()
59
+ */
60
+ function findFirstCallToFail(trace) {
61
+ let i = 0;
62
+ for (; i < trace.length; i++) {
63
+ // Look for CALL to FoundryCheatcodesAddress with the FAIL_SELECTOR
64
+ if (trace[i].op.mnemonic === "CALL") {
65
+ const stackLen = trace[i].evmStack.length;
66
+ const addr = (0, misc_1.wordToAddress)(trace[i].evmStack[stackLen - 2]);
67
+ if (!addr.equals(foundry_cheatcodes_1.FoundryCheatcodesAddress)) {
68
+ continue;
69
+ }
70
+ const argOffset = (0, misc_1.bigEndianBufToNumber)(trace[i].evmStack[stackLen - 4]);
71
+ const argSize = (0, misc_1.bigEndianBufToNumber)(trace[i].evmStack[stackLen - 5]);
72
+ if (argSize < 4) {
73
+ continue;
74
+ }
75
+ const msgData = (0, utils_1.bytesToHex)(trace[i].memory.slice(argOffset, argOffset + argSize));
76
+ if (msgData === foundry_cheatcodes_1.FAIL_MSG_DATA) {
77
+ break;
78
+ }
79
+ }
80
+ }
81
+ if (i === trace.length) {
82
+ return undefined;
83
+ }
84
+ //console.error(`Error step: ${i}`);
85
+ return trace[i];
86
+ }
87
+ //# sourceMappingURL=trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/utils/trace.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sol-dbg",
3
- "version": "0.5.0",
3
+ "version": "0.6.2",
4
4
  "description": "Small (experimental) Solidity-level debugger built around EthereumJS",
5
5
  "keywords": [],
6
6
  "files": [