sol-dbg 0.1.6 → 0.2.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.
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VMTestRunner = exports.ResultKind = void 0;
4
+ const block_1 = require("@ethereumjs/block");
5
+ const util_1 = require("@ethereumjs/util");
6
+ const solc_typed_ast_1 = require("solc-typed-ast");
7
+ const misc_1 = require("./misc");
8
+ const common_1 = require("@ethereumjs/common");
9
+ var ResultKind;
10
+ (function (ResultKind) {
11
+ ResultKind["ContractCreated"] = "contract_created";
12
+ ResultKind["ValueReturned"] = "value_returned";
13
+ ResultKind["Revert"] = "revert";
14
+ ResultKind["FoundryFail"] = "foundry_fail";
15
+ })(ResultKind || (exports.ResultKind = ResultKind = {}));
16
+ /**
17
+ * Helper class to re-play harvey test cases on a in-memory VmProxy
18
+ */
19
+ class VMTestRunner {
20
+ get vm() {
21
+ return this._vm;
22
+ }
23
+ constructor(vm) {
24
+ this._stateRootBeforeTx = new Map();
25
+ this._vm = vm;
26
+ this._txs = [];
27
+ this._results = [];
28
+ this._txToBlock = new Map();
29
+ }
30
+ async runTestCase(testCaseJSON) {
31
+ await this.setupInitialState(testCaseJSON.initialState);
32
+ for (let i = 0; i < testCaseJSON.steps.length; i++) {
33
+ const tx = await this.harveyStepToTransaction(testCaseJSON.steps[i]);
34
+ const block = this.harveyStepToBlock(testCaseJSON.steps[i]);
35
+ const res = await this._runTxInt(tx, block);
36
+ this._results.push(res);
37
+ }
38
+ }
39
+ async setupInitialState(initialState) {
40
+ const state = this.vm.stateManager;
41
+ await state.checkpoint();
42
+ for (const addressStr of Object.keys(initialState.accounts)) {
43
+ const { nonce, balance, code, storage } = initialState.accounts[addressStr];
44
+ const address = util_1.Address.fromString(addressStr);
45
+ const codeBuf = Buffer.from(code.slice(2), "hex");
46
+ const acct = new util_1.Account();
47
+ acct.nonce = BigInt(nonce);
48
+ acct.balance = BigInt(balance);
49
+ state.putAccount(address, acct);
50
+ for (const [key, val] of Object.entries(storage)) {
51
+ const keyBuf = (0, misc_1.hexStrToBuf32)(key.slice(2));
52
+ const valBuf = (0, misc_1.hexStrToBuf32)(val.slice(2));
53
+ await state.putContractStorage(address, keyBuf, valBuf);
54
+ }
55
+ await state.putContractCode(address, codeBuf);
56
+ }
57
+ await state.commit();
58
+ await state.flush();
59
+ }
60
+ async harveyStepToTransaction(step) {
61
+ const senderAddress = util_1.Address.fromString(step.origin);
62
+ const senderAccount = await this.vm.stateManager.getAccount(senderAddress);
63
+ const senderNonce = senderAccount.nonce;
64
+ const txData = {
65
+ value: step.value,
66
+ gasLimit: step.gasLimit,
67
+ gasPrice: 8,
68
+ data: step.input,
69
+ nonce: senderNonce
70
+ };
71
+ if (step.address !== misc_1.ZERO_ADDRESS_STRING) {
72
+ txData.to = step.address;
73
+ }
74
+ return (0, misc_1.makeFakeTransaction)(txData, step.origin, this._vm._common);
75
+ }
76
+ harveyStepToBlock(step) {
77
+ return block_1.Block.fromBlockData({
78
+ header: {
79
+ coinbase: step.origin,
80
+ difficulty: this.vm._common.hardfork() === common_1.Hardfork.Shanghai ? 0 : step.blockDifficulty,
81
+ gasLimit: step.blockGasLimit,
82
+ number: step.blockNumber,
83
+ timestamp: step.blockTime
84
+ }
85
+ }, {
86
+ common: this.vm._common
87
+ });
88
+ }
89
+ async _runTxInt(tx, block) {
90
+ const txHash = tx.hash().toString("hex");
91
+ this._txs.push(tx);
92
+ this._stateRootBeforeTx.set(txHash, this.vm.stateManager.copy());
93
+ this._txToBlock.set(txHash, block);
94
+ const res = this.vm.runTx({
95
+ tx,
96
+ block,
97
+ skipBalance: true,
98
+ skipNonce: true,
99
+ skipBlockGasLimitValidation: true
100
+ });
101
+ await this.vm.stateManager.flush();
102
+ return res;
103
+ }
104
+ get txs() {
105
+ return this._txs;
106
+ }
107
+ get results() {
108
+ return this._results;
109
+ }
110
+ getStateBeforeTx(tx) {
111
+ const txHash = tx.hash().toString("hex");
112
+ const res = this._stateRootBeforeTx.get(txHash);
113
+ (0, solc_typed_ast_1.assert)(res !== undefined, `Unable to find state before tx ${txHash}`);
114
+ return res;
115
+ }
116
+ getBlock(tx) {
117
+ const txHash = tx.hash().toString("hex");
118
+ const res = this._txToBlock.get(txHash);
119
+ (0, solc_typed_ast_1.assert)(res !== undefined, `Unable to find block for tx ${txHash}`);
120
+ return res;
121
+ }
122
+ }
123
+ exports.VMTestRunner = VMTestRunner;
124
+ //# sourceMappingURL=test_runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test_runner.js","sourceRoot":"","sources":["../../src/utils/test_runner.ts"],"names":[],"mappings":";;;AAAA,6CAA0C;AAG1C,2CAAoD;AAEpD,mDAAwC;AAExC,iCAAiF;AACjF,+CAA8C;AAoC9C,IAAY,UAKX;AALD,WAAY,UAAU;IAClB,kDAAoC,CAAA;IACpC,8CAAgC,CAAA;IAChC,+BAAiB,CAAA;IACjB,0CAA4B,CAAA;AAChC,CAAC,EALW,UAAU,0BAAV,UAAU,QAKrB;AAmCD;;GAEG;AACH,MAAa,YAAY;IAOrB,IAAI,EAAE;QACF,OAAO,IAAI,CAAC,GAAG,CAAC;IACpB,CAAC;IAED,YAAY,EAAM;QANV,uBAAkB,GAAG,IAAI,GAAG,EAAwB,CAAC;QAOzD,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;QACf,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,YAA0B;QACxC,MAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAExD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAChD,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAE5C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC3B;IACL,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,YAA0B;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC;QAEnC,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;QAEzB,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE;YACzD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAE5E,MAAM,OAAO,GAAG,cAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAElD,MAAM,IAAI,GAAG,IAAI,cAAO,EAAE,CAAC;YAE3B,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAE/B,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAEhC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC9C,MAAM,MAAM,GAAG,IAAA,oBAAa,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3C,MAAM,MAAM,GAAG,IAAA,oBAAa,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAE3C,MAAM,KAAK,CAAC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;aAC3D;YAED,MAAM,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACjD;QAED,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;QACrB,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,uBAAuB,CAAC,IAAkB;QAC5C,MAAM,aAAa,GAAG,cAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;QAC3E,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC;QAExC,MAAM,MAAM,GAAW;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,CAAC;YACX,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,KAAK,EAAE,WAAW;SACrB,CAAC;QAEF,IAAI,IAAI,CAAC,OAAO,KAAK,0BAAmB,EAAE;YACtC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;SAC5B;QAED,OAAO,IAAA,0BAAmB,EAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtE,CAAC;IAED,iBAAiB,CAAC,IAAkB;QAChC,OAAO,aAAK,CAAC,aAAa,CACtB;YACI,MAAM,EAAE;gBACJ,QAAQ,EAAE,IAAI,CAAC,MAAM;gBACrB,UAAU,EACN,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,iBAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe;gBAC/E,QAAQ,EAAE,IAAI,CAAC,aAAa;gBAC5B,MAAM,EAAE,IAAI,CAAC,WAAW;gBACxB,SAAS,EAAE,IAAI,CAAC,SAAS;aAC5B;SACJ,EACD;YACI,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO;SAC1B,CACJ,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,EAAe,EAAE,KAAY;QACjD,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEzC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEnB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAEnC,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;YACtB,EAAE;YACF,KAAK;YACL,WAAW,EAAE,IAAI;YACjB,SAAS,EAAE,IAAI;YACf,2BAA2B,EAAE,IAAI;SACpC,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAEnC,OAAO,GAAG,CAAC;IACf,CAAC;IAED,IAAI,GAAG;QACH,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,gBAAgB,CAAC,EAAe;QAC5B,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEhD,IAAA,uBAAM,EAAC,GAAG,KAAK,SAAS,EAAE,kCAAkC,MAAM,EAAE,CAAC,CAAC;QAEtE,OAAO,GAAG,CAAC;IACf,CAAC;IAED,QAAQ,CAAC,EAAe;QACpB,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAExC,IAAA,uBAAM,EAAC,GAAG,KAAK,SAAS,EAAE,+BAA+B,MAAM,EAAE,CAAC,CAAC;QAEnE,OAAO,GAAG,CAAC;IACf,CAAC;CACJ;AAjJD,oCAiJC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sol-dbg",
3
- "version": "0.1.6",
3
+ "version": "0.2.2",
4
4
  "description": "Small (experimental) Solidity-level debugger built around EthereumJS",
5
5
  "keywords": [],
6
6
  "files": [
@@ -19,14 +19,15 @@
19
19
  "prepare": "npm run build"
20
20
  },
21
21
  "dependencies": {
22
- "@ethereumjs/block": "^3.6.3",
23
- "@ethereumjs/common": "^2.6.5",
24
- "@ethereumjs/tx": "^3.5.2",
25
- "@ethereumjs/vm": "^5.9.3",
26
- "@remix-project/remix-simulator": "0.2.14",
27
- "ethereum-cryptography": "2.0.0",
22
+ "@ethereumjs/block": "4.3.0",
23
+ "@ethereumjs/common": "3.2.0",
24
+ "@ethereumjs/tx": "4.2.0",
25
+ "@ethereumjs/vm": "6.5.0",
26
+ "@ethereumjs/evm": "1.4.0",
27
+ "@ethereumjs/statemanager": "1.1.0",
28
28
  "cbor": "^8.1.0",
29
29
  "ethereumjs-util": "^7.1.5",
30
+ "ethereum-cryptography": "2.0.0",
30
31
  "solc-typed-ast": "^14.0.2",
31
32
  "src-location": "^1.1.0",
32
33
  "web3-eth-abi": "^1.9.0"
@@ -36,22 +37,22 @@
36
37
  "@types/fs-extra": "^11.0.1",
37
38
  "@types/lru-cache": "^5.1.1",
38
39
  "@types/mocha": "^10.0.1",
39
- "@types/node": "^16.18.24",
40
- "@typescript-eslint/eslint-plugin": "^5.59.0",
41
- "@typescript-eslint/parser": "^5.59.0",
42
- "eslint": "^8.38.0",
40
+ "@types/node": "^16.18.25",
41
+ "@typescript-eslint/eslint-plugin": "^5.59.2",
42
+ "@typescript-eslint/parser": "^5.59.2",
43
+ "eslint": "^8.40.0",
43
44
  "eslint-config-prettier": "^8.8.0",
44
45
  "eslint-plugin-prettier": "^4.2.1",
45
46
  "expect": "^29.5.0",
46
47
  "fs-extra": "^11.1.1",
47
48
  "mocha": "^10.2.0",
48
49
  "nyc": "^15.1.0",
49
- "prettier": "^2.8.7",
50
+ "prettier": "^2.8.8",
50
51
  "ts-node": "^10.9.1",
51
52
  "typescript": "^5.0.4"
52
53
  },
53
54
  "homepage": "https://github.com/ConsenSys/sol-dbg",
54
55
  "bugs": "https://github.com/ConsenSys/sol-dbg/issues",
55
56
  "repository": "https://github.com/ConsenSys/sol-dbg",
56
- "license": "See LICENCE file."
57
+ "license": "Apache-2.0"
57
58
  }