hardhat 2.22.10 → 2.22.12

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 (129) hide show
  1. package/console.sol +1 -1
  2. package/internal/cli/project-creation.d.ts +1 -1
  3. package/internal/cli/project-creation.js +1 -1
  4. package/internal/core/providers/lazy-initialization.d.ts.map +1 -1
  5. package/internal/core/providers/lazy-initialization.js +10 -10
  6. package/internal/core/providers/lazy-initialization.js.map +1 -1
  7. package/internal/hardhat-network/jsonrpc/handler.d.ts.map +1 -1
  8. package/internal/hardhat-network/jsonrpc/handler.js +2 -1
  9. package/internal/hardhat-network/jsonrpc/handler.js.map +1 -1
  10. package/internal/hardhat-network/provider/provider.d.ts +2 -3
  11. package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
  12. package/internal/hardhat-network/provider/provider.js +5 -19
  13. package/internal/hardhat-network/provider/provider.js.map +1 -1
  14. package/internal/hardhat-network/provider/return-data.d.ts +2 -15
  15. package/internal/hardhat-network/provider/return-data.d.ts.map +1 -1
  16. package/internal/hardhat-network/provider/return-data.js +2 -50
  17. package/internal/hardhat-network/provider/return-data.js.map +1 -1
  18. package/internal/hardhat-network/provider/vm/exit.d.ts +2 -20
  19. package/internal/hardhat-network/provider/vm/exit.d.ts.map +1 -1
  20. package/internal/hardhat-network/provider/vm/exit.js +3 -78
  21. package/internal/hardhat-network/provider/vm/exit.js.map +1 -1
  22. package/internal/hardhat-network/stack-traces/compiler-to-model.d.ts +2 -3
  23. package/internal/hardhat-network/stack-traces/compiler-to-model.d.ts.map +1 -1
  24. package/internal/hardhat-network/stack-traces/compiler-to-model.js +2 -351
  25. package/internal/hardhat-network/stack-traces/compiler-to-model.js.map +1 -1
  26. package/internal/hardhat-network/stack-traces/consoleLogger.d.ts +2 -1
  27. package/internal/hardhat-network/stack-traces/consoleLogger.d.ts.map +1 -1
  28. package/internal/hardhat-network/stack-traces/consoleLogger.js +2 -1
  29. package/internal/hardhat-network/stack-traces/consoleLogger.js.map +1 -1
  30. package/internal/hardhat-network/stack-traces/constants.d.ts +1 -1
  31. package/internal/hardhat-network/stack-traces/constants.js +1 -1
  32. package/internal/hardhat-network/stack-traces/debug.d.ts +2 -7
  33. package/internal/hardhat-network/stack-traces/debug.d.ts.map +1 -1
  34. package/internal/hardhat-network/stack-traces/debug.js +3 -143
  35. package/internal/hardhat-network/stack-traces/debug.js.map +1 -1
  36. package/internal/hardhat-network/stack-traces/library-utils.d.ts +2 -11
  37. package/internal/hardhat-network/stack-traces/library-utils.d.ts.map +1 -1
  38. package/internal/hardhat-network/stack-traces/library-utils.js +3 -61
  39. package/internal/hardhat-network/stack-traces/library-utils.js.map +1 -1
  40. package/internal/hardhat-network/stack-traces/logger.js +596 -596
  41. package/internal/hardhat-network/stack-traces/logger.js.map +1 -1
  42. package/internal/hardhat-network/stack-traces/message-trace.d.ts +2 -51
  43. package/internal/hardhat-network/stack-traces/message-trace.d.ts.map +1 -1
  44. package/internal/hardhat-network/stack-traces/message-trace.js +0 -46
  45. package/internal/hardhat-network/stack-traces/message-trace.js.map +1 -1
  46. package/internal/hardhat-network/stack-traces/solidity-errors.d.ts.map +1 -1
  47. package/internal/hardhat-network/stack-traces/solidity-errors.js +58 -53
  48. package/internal/hardhat-network/stack-traces/solidity-errors.js.map +1 -1
  49. package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts +4 -155
  50. package/internal/hardhat-network/stack-traces/solidity-stack-trace.d.ts.map +1 -1
  51. package/internal/hardhat-network/stack-traces/solidity-stack-trace.js +12 -37
  52. package/internal/hardhat-network/stack-traces/solidity-stack-trace.js.map +1 -1
  53. package/internal/hardhat-network/stack-traces/solidityTracer.d.ts +2 -13
  54. package/internal/hardhat-network/stack-traces/solidityTracer.d.ts.map +1 -1
  55. package/internal/hardhat-network/stack-traces/solidityTracer.js +2 -162
  56. package/internal/hardhat-network/stack-traces/solidityTracer.js.map +1 -1
  57. package/internal/hardhat-network/stack-traces/vm-trace-decoder.d.ts +4 -15
  58. package/internal/hardhat-network/stack-traces/vm-trace-decoder.d.ts.map +1 -1
  59. package/internal/hardhat-network/stack-traces/vm-trace-decoder.js +6 -70
  60. package/internal/hardhat-network/stack-traces/vm-trace-decoder.js.map +1 -1
  61. package/internal/hardhat-network/stack-traces/vm-tracer.d.ts +2 -19
  62. package/internal/hardhat-network/stack-traces/vm-tracer.d.ts.map +1 -1
  63. package/internal/hardhat-network/stack-traces/vm-tracer.js +3 -150
  64. package/internal/hardhat-network/stack-traces/vm-tracer.js.map +1 -1
  65. package/internal/solidity/compiler/solc-info.d.ts.map +1 -1
  66. package/internal/solidity/compiler/solc-info.js +3 -0
  67. package/internal/solidity/compiler/solc-info.js.map +1 -1
  68. package/package.json +6 -5
  69. package/sample-projects/javascript/contracts/Lock.sol +1 -1
  70. package/sample-projects/javascript/hardhat.config.js +1 -1
  71. package/sample-projects/javascript/ignition/modules/Lock.js +3 -0
  72. package/sample-projects/javascript-esm/contracts/Lock.sol +1 -1
  73. package/sample-projects/javascript-esm/hardhat.config.cjs +1 -1
  74. package/sample-projects/javascript-esm/ignition/modules/Lock.js +3 -0
  75. package/sample-projects/typescript/contracts/Lock.sol +1 -1
  76. package/sample-projects/typescript/hardhat.config.ts +1 -1
  77. package/sample-projects/typescript/ignition/modules/Lock.ts +3 -0
  78. package/sample-projects/typescript-viem/contracts/Lock.sol +1 -1
  79. package/sample-projects/typescript-viem/hardhat.config.ts +1 -1
  80. package/sample-projects/typescript-viem/ignition/modules/Lock.ts +3 -0
  81. package/src/internal/cli/project-creation.ts +1 -1
  82. package/src/internal/core/providers/lazy-initialization.ts +13 -13
  83. package/src/internal/hardhat-network/jsonrpc/handler.ts +2 -1
  84. package/src/internal/hardhat-network/provider/provider.ts +11 -24
  85. package/src/internal/hardhat-network/provider/return-data.ts +5 -73
  86. package/src/internal/hardhat-network/provider/vm/exit.ts +4 -92
  87. package/src/internal/hardhat-network/stack-traces/compiler-to-model.ts +5 -697
  88. package/src/internal/hardhat-network/stack-traces/consoleLogger.ts +2 -1
  89. package/src/internal/hardhat-network/stack-traces/constants.ts +1 -1
  90. package/src/internal/hardhat-network/stack-traces/debug.ts +5 -218
  91. package/src/internal/hardhat-network/stack-traces/library-utils.ts +5 -90
  92. package/src/internal/hardhat-network/stack-traces/logger.ts +596 -596
  93. package/src/internal/hardhat-network/stack-traces/message-trace.ts +5 -122
  94. package/src/internal/hardhat-network/stack-traces/solidity-errors.ts +16 -15
  95. package/src/internal/hardhat-network/stack-traces/solidity-stack-trace.ts +83 -186
  96. package/src/internal/hardhat-network/stack-traces/solidityTracer.ts +5 -253
  97. package/src/internal/hardhat-network/stack-traces/vm-trace-decoder.ts +15 -108
  98. package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +5 -206
  99. package/src/internal/solidity/compiler/solc-info.ts +3 -0
  100. package/internal/hardhat-network/stack-traces/contracts-identifier.d.ts +0 -15
  101. package/internal/hardhat-network/stack-traces/contracts-identifier.d.ts.map +0 -1
  102. package/internal/hardhat-network/stack-traces/contracts-identifier.js +0 -166
  103. package/internal/hardhat-network/stack-traces/contracts-identifier.js.map +0 -1
  104. package/internal/hardhat-network/stack-traces/error-inferrer.d.ts +0 -85
  105. package/internal/hardhat-network/stack-traces/error-inferrer.d.ts.map +0 -1
  106. package/internal/hardhat-network/stack-traces/error-inferrer.js +0 -1168
  107. package/internal/hardhat-network/stack-traces/error-inferrer.js.map +0 -1
  108. package/internal/hardhat-network/stack-traces/mapped-inlined-internal-functions-heuristics.d.ts +0 -24
  109. package/internal/hardhat-network/stack-traces/mapped-inlined-internal-functions-heuristics.d.ts.map +0 -1
  110. package/internal/hardhat-network/stack-traces/mapped-inlined-internal-functions-heuristics.js +0 -116
  111. package/internal/hardhat-network/stack-traces/mapped-inlined-internal-functions-heuristics.js.map +0 -1
  112. package/internal/hardhat-network/stack-traces/model.d.ts +0 -140
  113. package/internal/hardhat-network/stack-traces/model.d.ts.map +0 -1
  114. package/internal/hardhat-network/stack-traces/model.js +0 -328
  115. package/internal/hardhat-network/stack-traces/model.js.map +0 -1
  116. package/internal/hardhat-network/stack-traces/opcodes.d.ts +0 -266
  117. package/internal/hardhat-network/stack-traces/opcodes.d.ts.map +0 -1
  118. package/internal/hardhat-network/stack-traces/opcodes.js +0 -320
  119. package/internal/hardhat-network/stack-traces/opcodes.js.map +0 -1
  120. package/internal/hardhat-network/stack-traces/source-maps.d.ts +0 -13
  121. package/internal/hardhat-network/stack-traces/source-maps.d.ts.map +0 -1
  122. package/internal/hardhat-network/stack-traces/source-maps.js +0 -106
  123. package/internal/hardhat-network/stack-traces/source-maps.js.map +0 -1
  124. package/src/internal/hardhat-network/stack-traces/contracts-identifier.ts +0 -235
  125. package/src/internal/hardhat-network/stack-traces/error-inferrer.ts +0 -1845
  126. package/src/internal/hardhat-network/stack-traces/mapped-inlined-internal-functions-heuristics.ts +0 -163
  127. package/src/internal/hardhat-network/stack-traces/model.ts +0 -409
  128. package/src/internal/hardhat-network/stack-traces/opcodes.ts +0 -344
  129. package/src/internal/hardhat-network/stack-traces/source-maps.ts +0 -167
@@ -1,154 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VMTracer = void 0;
4
- const ethereumjs_util_1 = require("@nomicfoundation/ethereumjs-util");
5
- const errors_1 = require("../../core/errors");
6
- const exit_1 = require("../provider/vm/exit");
7
- const message_trace_1 = require("./message-trace");
8
- /* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */
9
- const DUMMY_RETURN_DATA = Buffer.from([]);
10
- const DUMMY_GAS_USED = 0n;
11
- /**
12
- * Consumes the incoming VM trace events, until an error occurs, to keep track
13
- * of the last top level message trace/error.
14
- */
15
- class VMTracer {
16
- constructor() {
17
- this.tracingSteps = [];
18
- this._messageTraces = [];
19
- // TODO: temporarily hardcoded to remove the need of using ethereumjs' common and evm here
20
- this._maxPrecompileNumber = 10;
21
- }
22
- getLastTopLevelMessageTrace() {
23
- return this._messageTraces[0];
24
- }
25
- getLastError() {
26
- return this._lastError;
27
- }
28
- _shouldKeepTracing() {
29
- return this._lastError === undefined;
30
- }
31
- addBeforeMessage(message) {
32
- if (!this._shouldKeepTracing()) {
33
- return;
34
- }
35
- try {
36
- let trace;
37
- if (message.depth === 0) {
38
- this._messageTraces = [];
39
- this.tracingSteps = [];
40
- }
41
- if (message.to === undefined) {
42
- const createTrace = {
43
- code: message.data,
44
- steps: [],
45
- value: message.value,
46
- exit: new exit_1.Exit(exit_1.ExitCode.SUCCESS),
47
- returnData: DUMMY_RETURN_DATA,
48
- numberOfSubtraces: 0,
49
- depth: message.depth,
50
- deployedContract: undefined,
51
- gasUsed: DUMMY_GAS_USED,
52
- };
53
- trace = createTrace;
54
- }
55
- else {
56
- const toAsBigInt = (0, ethereumjs_util_1.bytesToBigInt)(message.to);
57
- if (toAsBigInt > 0 && toAsBigInt <= this._maxPrecompileNumber) {
58
- const precompileTrace = {
59
- precompile: Number(toAsBigInt),
60
- calldata: message.data,
61
- value: message.value,
62
- exit: new exit_1.Exit(exit_1.ExitCode.SUCCESS),
63
- returnData: DUMMY_RETURN_DATA,
64
- depth: message.depth,
65
- gasUsed: DUMMY_GAS_USED,
66
- };
67
- trace = precompileTrace;
68
- }
69
- else {
70
- const codeAddress = message.codeAddress;
71
- // if we enter here, then `to` is not undefined, therefore
72
- // `codeAddress` and `code` should be defined
73
- (0, errors_1.assertHardhatInvariant)(codeAddress !== undefined, "codeAddress should be defined");
74
- (0, errors_1.assertHardhatInvariant)(message.code !== undefined, "code should be defined");
75
- const callTrace = {
76
- code: message.code,
77
- calldata: message.data,
78
- steps: [],
79
- value: message.value,
80
- exit: new exit_1.Exit(exit_1.ExitCode.SUCCESS),
81
- returnData: DUMMY_RETURN_DATA,
82
- address: message.to,
83
- numberOfSubtraces: 0,
84
- depth: message.depth,
85
- gasUsed: DUMMY_GAS_USED,
86
- codeAddress,
87
- };
88
- trace = callTrace;
89
- }
90
- }
91
- if (this._messageTraces.length > 0) {
92
- const parentTrace = this._messageTraces[this._messageTraces.length - 1];
93
- if ((0, message_trace_1.isPrecompileTrace)(parentTrace)) {
94
- throw new Error("This should not happen: message execution started while a precompile was executing");
95
- }
96
- parentTrace.steps.push(trace);
97
- parentTrace.numberOfSubtraces += 1;
98
- }
99
- this._messageTraces.push(trace);
100
- }
101
- catch (error) {
102
- this._lastError = error;
103
- }
104
- }
105
- addStep(step) {
106
- if (!this._shouldKeepTracing()) {
107
- return;
108
- }
109
- this.tracingSteps.push(step);
110
- try {
111
- const trace = this._messageTraces[this._messageTraces.length - 1];
112
- if ((0, message_trace_1.isPrecompileTrace)(trace)) {
113
- throw new Error("This should not happen: step event fired while a precompile was executing");
114
- }
115
- trace.steps.push({ pc: Number(step.pc) });
116
- }
117
- catch (error) {
118
- this._lastError = error;
119
- }
120
- }
121
- addAfterMessage(result) {
122
- if (!this._shouldKeepTracing()) {
123
- return;
124
- }
125
- try {
126
- const trace = this._messageTraces[this._messageTraces.length - 1];
127
- trace.gasUsed = result.result.gasUsed;
128
- const executionResult = result.result;
129
- if ((0, message_trace_1.isSuccessResult)(executionResult)) {
130
- trace.exit = exit_1.Exit.fromEdrSuccessReason(executionResult.reason);
131
- trace.returnData = executionResult.output.returnValue;
132
- if ((0, message_trace_1.isCreateTrace)(trace)) {
133
- trace.deployedContract = executionResult.output.address;
134
- }
135
- }
136
- else if ((0, message_trace_1.isHaltResult)(executionResult)) {
137
- trace.exit = exit_1.Exit.fromEdrExceptionalHalt(executionResult.reason);
138
- trace.returnData = Buffer.from([]);
139
- }
140
- else {
141
- trace.exit = new exit_1.Exit(exit_1.ExitCode.REVERT);
142
- trace.returnData = executionResult.output;
143
- }
144
- if (this._messageTraces.length > 1) {
145
- this._messageTraces.pop();
146
- }
147
- }
148
- catch (error) {
149
- this._lastError = error;
150
- }
151
- }
152
- }
153
- exports.VMTracer = VMTracer;
4
+ const napi_rs_1 = require("../../../common/napi-rs");
5
+ const { VmTracer } = (0, napi_rs_1.requireNapiRsModule)("@nomicfoundation/edr");
6
+ exports.VMTracer = VmTracer;
154
7
  //# sourceMappingURL=vm-tracer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vm-tracer.js","sourceRoot":"","sources":["../../../src/internal/hardhat-network/stack-traces/vm-tracer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vm-tracer.js","sourceRoot":"","sources":["../../../src/internal/hardhat-network/stack-traces/vm-tracer.ts"],"names":[],"mappings":";;;AAAA,qDAA8D;AAE9D,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,6BAAmB,EACtC,sBAAsB,CACkB,CAAC;AAEtB,4BAAQ"}
@@ -1 +1 @@
1
- {"version":3,"file":"solc-info.d.ts","sourceRoot":"","sources":["../../../src/internal/solidity/compiler/solc-info.ts"],"names":[],"mappings":"AAiEA,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAEpB"}
1
+ {"version":3,"file":"solc-info.d.ts","sourceRoot":"","sources":["../../../src/internal/solidity/compiler/solc-info.ts"],"names":[],"mappings":"AAoEA,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAEpB"}
@@ -64,6 +64,9 @@ const defaultEvmTargets = {
64
64
  "0.8.22": "shanghai",
65
65
  "0.8.23": "shanghai",
66
66
  "0.8.24": "shanghai",
67
+ "0.8.25": "cancun",
68
+ "0.8.26": "cancun",
69
+ "0.8.27": "cancun",
67
70
  };
68
71
  function getEvmVersionFromSolcVersion(solcVersion) {
69
72
  return defaultEvmTargets[solcVersion];
@@ -1 +1 @@
1
- {"version":3,"file":"solc-info.js","sourceRoot":"","sources":["../../../src/internal/solidity/compiler/solc-info.ts"],"names":[],"mappings":";;;AAAA,MAAM,iBAAiB,GAA8B;IACnD,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,YAAY;IACrB,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;CACrB,CAAC;AAEF,SAAgB,4BAA4B,CAC1C,WAAmB;IAEnB,OAAO,iBAAiB,CAAC,WAAW,CAAC,CAAC;AACxC,CAAC;AAJD,oEAIC"}
1
+ {"version":3,"file":"solc-info.js","sourceRoot":"","sources":["../../../src/internal/solidity/compiler/solc-info.ts"],"names":[],"mappings":";;;AAAA,MAAM,iBAAiB,GAA8B;IACnD,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,YAAY;IACrB,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,YAAY;IACtB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,OAAO,EAAE,QAAQ;IACjB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;CACnB,CAAC;AAEF,SAAgB,4BAA4B,CAC1C,WAAmB;IAEnB,OAAO,iBAAiB,CAAC,WAAW,CAAC,CAAC;AACxC,CAAC;AAJD,oEAIC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hardhat",
3
- "version": "2.22.10",
3
+ "version": "2.22.12",
4
4
  "author": "Nomic Labs LLC",
5
5
  "license": "MIT",
6
6
  "homepage": "https://hardhat.org",
@@ -79,13 +79,13 @@
79
79
  "time-require": "^0.1.2",
80
80
  "ts-node": "^10.8.0",
81
81
  "typescript": "~5.0.0",
82
- "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "^1.0.2",
83
- "@nomicfoundation/eslint-plugin-slow-imports": "^1.0.0"
82
+ "@nomicfoundation/eslint-plugin-slow-imports": "^1.0.0",
83
+ "@nomicfoundation/eslint-plugin-hardhat-internal-rules": "^1.0.2"
84
84
  },
85
85
  "dependencies": {
86
86
  "@ethersproject/abi": "^5.1.2",
87
87
  "@metamask/eth-sig-util": "^4.0.0",
88
- "@nomicfoundation/edr": "^0.5.2",
88
+ "@nomicfoundation/edr": "^0.6.1",
89
89
  "@nomicfoundation/ethereumjs-common": "4.0.4",
90
90
  "@nomicfoundation/ethereumjs-tx": "5.0.4",
91
91
  "@nomicfoundation/ethereumjs-util": "9.0.4",
@@ -98,7 +98,7 @@
98
98
  "ansi-escapes": "^4.3.0",
99
99
  "boxen": "^5.1.2",
100
100
  "chalk": "^2.4.2",
101
- "chokidar": "^3.4.0",
101
+ "chokidar": "^4.0.0",
102
102
  "ci-info": "^2.0.0",
103
103
  "debug": "^4.1.1",
104
104
  "enquirer": "^2.3.0",
@@ -111,6 +111,7 @@
111
111
  "glob": "7.2.0",
112
112
  "immutable": "^4.0.0-rc.12",
113
113
  "io-ts": "1.10.4",
114
+ "json-stream-stringify": "^3.1.4",
114
115
  "keccak": "^3.0.2",
115
116
  "lodash": "^4.17.11",
116
117
  "mnemonist": "^0.38.0",
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: UNLICENSED
2
- pragma solidity ^0.8.24;
2
+ pragma solidity ^0.8.27;
3
3
 
4
4
  // Uncomment this line to use console.log
5
5
  // import "hardhat/console.sol";
@@ -2,5 +2,5 @@ require("@nomicfoundation/hardhat-toolbox");
2
2
 
3
3
  /** @type import('hardhat/config').HardhatUserConfig */
4
4
  module.exports = {
5
- solidity: "0.8.24",
5
+ solidity: "0.8.27",
6
6
  };
@@ -1,3 +1,6 @@
1
+ // This setup uses Hardhat Ignition to manage smart contract deployments.
2
+ // Learn more about it at https://hardhat.org/ignition
3
+
1
4
  const { buildModule } = require("@nomicfoundation/hardhat-ignition/modules");
2
5
 
3
6
  const JAN_1ST_2030 = 1893456000;
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: UNLICENSED
2
- pragma solidity ^0.8.24;
2
+ pragma solidity ^0.8.27;
3
3
 
4
4
  // Uncomment this line to use console.log
5
5
  // import "hardhat/console.sol";
@@ -2,5 +2,5 @@ require("@nomicfoundation/hardhat-toolbox");
2
2
 
3
3
  /** @type import('hardhat/config').HardhatUserConfig */
4
4
  module.exports = {
5
- solidity: "0.8.24",
5
+ solidity: "0.8.27",
6
6
  };
@@ -1,3 +1,6 @@
1
+ // This setup uses Hardhat Ignition to manage smart contract deployments.
2
+ // Learn more about it at https://hardhat.org/ignition
3
+
1
4
  import { buildModule } from "@nomicfoundation/hardhat-ignition/modules";
2
5
 
3
6
  const JAN_1ST_2030 = 1893456000;
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: UNLICENSED
2
- pragma solidity ^0.8.24;
2
+ pragma solidity ^0.8.27;
3
3
 
4
4
  // Uncomment this line to use console.log
5
5
  // import "hardhat/console.sol";
@@ -2,7 +2,7 @@ import { HardhatUserConfig } from "hardhat/config";
2
2
  import "@nomicfoundation/hardhat-toolbox";
3
3
 
4
4
  const config: HardhatUserConfig = {
5
- solidity: "0.8.24",
5
+ solidity: "0.8.27",
6
6
  };
7
7
 
8
8
  export default config;
@@ -1,3 +1,6 @@
1
+ // This setup uses Hardhat Ignition to manage smart contract deployments.
2
+ // Learn more about it at https://hardhat.org/ignition
3
+
1
4
  import { buildModule } from "@nomicfoundation/hardhat-ignition/modules";
2
5
 
3
6
  const JAN_1ST_2030 = 1893456000;
@@ -1,5 +1,5 @@
1
1
  // SPDX-License-Identifier: UNLICENSED
2
- pragma solidity ^0.8.24;
2
+ pragma solidity ^0.8.27;
3
3
 
4
4
  // Uncomment this line to use console.log
5
5
  // import "hardhat/console.sol";
@@ -2,7 +2,7 @@ import type { HardhatUserConfig } from "hardhat/config";
2
2
  import "@nomicfoundation/hardhat-toolbox-viem";
3
3
 
4
4
  const config: HardhatUserConfig = {
5
- solidity: "0.8.24",
5
+ solidity: "0.8.27",
6
6
  };
7
7
 
8
8
  export default config;
@@ -1,3 +1,6 @@
1
+ // This setup uses Hardhat Ignition to manage smart contract deployments.
2
+ // Learn more about it at https://hardhat.org/ignition
3
+
1
4
  import { buildModule } from "@nomicfoundation/hardhat-ignition/modules";
2
5
  import { parseEther } from "viem";
3
6
 
@@ -254,7 +254,7 @@ async function printRecommendedDepsInstallationInstructions(
254
254
  // exported so we can test that it uses the latest supported version of solidity
255
255
  export const EMPTY_HARDHAT_CONFIG = `/** @type import('hardhat/config').HardhatUserConfig */
256
256
  module.exports = {
257
- solidity: "0.8.24",
257
+ solidity: "0.8.27",
258
258
  };
259
259
  `;
260
260
 
@@ -40,6 +40,19 @@ export class LazyInitializationProviderAdapter implements EthereumProvider {
40
40
  this._initializingPromise = this._providerFactory();
41
41
  }
42
42
  this.provider = await this._initializingPromise;
43
+
44
+ // Copy any event emitter events before initialization over to the provider
45
+ const recordedEvents = this._emitter.eventNames();
46
+
47
+ this.provider.setMaxListeners(this._emitter.getMaxListeners());
48
+
49
+ for (const event of recordedEvents) {
50
+ const listeners = this._emitter.rawListeners(event) as Listener[];
51
+ for (const listener of listeners) {
52
+ this.provider.on(event, listener);
53
+ this._emitter.removeListener(event, listener);
54
+ }
55
+ }
43
56
  }
44
57
  return this.provider;
45
58
  }
@@ -158,19 +171,6 @@ export class LazyInitializationProviderAdapter implements EthereumProvider {
158
171
 
159
172
  if (this.provider === undefined) {
160
173
  this.provider = await this.init();
161
-
162
- // Copy any event emitter events before initialization over to the provider
163
- const recordedEvents = this._emitter.eventNames();
164
-
165
- for (const event of recordedEvents) {
166
- const listeners = this._emitter.rawListeners(event) as Listener[];
167
- for (const listener of listeners) {
168
- this.provider.on(event, listener);
169
- this._emitter.removeListener(event, listener);
170
- }
171
- }
172
-
173
- this.provider.setMaxListeners(this._emitter.getMaxListeners());
174
174
  }
175
175
 
176
176
  return this.provider;
@@ -1,6 +1,7 @@
1
1
  import { IncomingMessage, ServerResponse } from "http";
2
2
  import getRawBody from "raw-body";
3
3
  import WebSocket from "ws";
4
+ import { JsonStreamStringify } from "json-stream-stringify";
4
5
 
5
6
  import { EIP1193Provider } from "../../../types";
6
7
  import {
@@ -135,7 +136,7 @@ export class JsonRpcHandler {
135
136
  ) {
136
137
  res.statusCode = 200;
137
138
  res.setHeader("Content-Type", "application/json");
138
- res.end(JSON.stringify(rpcResp));
139
+ new JsonStreamStringify(rpcResp).pipe(res);
139
140
  }
140
141
 
141
142
  private async _handleSingleRequest(
@@ -11,6 +11,8 @@ import type {
11
11
  import type {
12
12
  EdrContext,
13
13
  Provider as EdrProviderT,
14
+ VmTraceDecoder as VmTraceDecoderT,
15
+ VMTracer as VMTracerT,
14
16
  RawTrace,
15
17
  Response,
16
18
  SubscriptionEvent,
@@ -42,7 +44,6 @@ import { isErrorResponse } from "../../core/providers/http";
42
44
  import { getHardforkName } from "../../util/hardforks";
43
45
  import { createModelsAndDecodeBytecodes } from "../stack-traces/compiler-to-model";
44
46
  import { ConsoleLogger } from "../stack-traces/consoleLogger";
45
- import { ContractsIdentifier } from "../stack-traces/contracts-identifier";
46
47
  import {
47
48
  VmTraceDecoder,
48
49
  initializeVmTraceDecoder,
@@ -167,7 +168,7 @@ export class EdrProviderWrapper
167
168
  private _callOverrideCallback?: CallOverrideCallback;
168
169
 
169
170
  /** Used for internal stack trace tests. */
170
- private _vmTracer?: VMTracer;
171
+ private _vmTracer?: VMTracerT;
171
172
 
172
173
  private constructor(
173
174
  private readonly _provider: EdrProviderT,
@@ -175,7 +176,7 @@ export class EdrProviderWrapper
175
176
  private readonly _node: {
176
177
  _vm: MinimalEthereumJsVm;
177
178
  },
178
- private readonly _vmTraceDecoder: VmTraceDecoder,
179
+ private readonly _vmTraceDecoder: VmTraceDecoderT,
179
180
  // The common configuration for EthereumJS VM is not used by EDR, but tests expect it as part of the provider.
180
181
  private readonly _common: Common,
181
182
  tracingConfig?: TracingConfig
@@ -221,8 +222,7 @@ export class EdrProviderWrapper
221
222
  const printLineFn = loggerConfig.printLineFn ?? printLine;
222
223
  const replaceLastLineFn = loggerConfig.replaceLastLineFn ?? replaceLastLine;
223
224
 
224
- const contractsIdentifier = new ContractsIdentifier();
225
- const vmTraceDecoder = new VmTraceDecoder(contractsIdentifier);
225
+ const vmTraceDecoder = new VmTraceDecoder();
226
226
 
227
227
  const hardforkName = getHardforkName(config.hardfork);
228
228
 
@@ -368,6 +368,9 @@ export class EdrProviderWrapper
368
368
  if (needsTraces) {
369
369
  const rawTraces = responseObject.traces;
370
370
  for (const rawTrace of rawTraces) {
371
+ this._vmTracer?.observe(rawTrace);
372
+
373
+ // For other consumers in JS we need to marshall the entire trace over FFI
371
374
  const trace = rawTrace.trace();
372
375
 
373
376
  // beforeTx event
@@ -384,8 +387,6 @@ export class EdrProviderWrapper
384
387
  edrTracingStepToMinimalInterpreterStep(traceItem)
385
388
  );
386
389
  }
387
-
388
- this._vmTracer?.addStep(traceItem);
389
390
  }
390
391
  // afterMessage event
391
392
  else if ("executionResult" in traceItem) {
@@ -395,8 +396,6 @@ export class EdrProviderWrapper
395
396
  edrTracingMessageResultToMinimalEVMResult(traceItem)
396
397
  );
397
398
  }
398
-
399
- this._vmTracer?.addAfterMessage(traceItem.executionResult);
400
399
  }
401
400
  // beforeMessage event
402
401
  else {
@@ -406,8 +405,6 @@ export class EdrProviderWrapper
406
405
  edrTracingMessageToMinimalMessage(traceItem)
407
406
  );
408
407
  }
409
-
410
- this._vmTracer?.addBeforeMessage(traceItem);
411
408
  }
412
409
  }
413
410
 
@@ -474,7 +471,7 @@ export class EdrProviderWrapper
474
471
  *
475
472
  * Used for internal stack traces integration tests.
476
473
  */
477
- public setVmTracer(vmTracer?: VMTracer) {
474
+ public setVmTracer(vmTracer?: VMTracerT) {
478
475
  this._vmTracer = vmTracer;
479
476
  }
480
477
 
@@ -552,7 +549,7 @@ export class EdrProviderWrapper
552
549
  );
553
550
 
554
551
  log(
555
- "ContractsIdentifier failed to be updated. Please report this to help us improve Hardhat.\n",
552
+ "VmTraceDecoder failed to be updated. Please report this to help us improve Hardhat.\n",
556
553
  error
557
554
  );
558
555
 
@@ -578,17 +575,7 @@ export class EdrProviderWrapper
578
575
  rawTrace: RawTrace
579
576
  ): Promise<SolidityStackTrace | undefined> {
580
577
  const vmTracer = new VMTracer();
581
-
582
- const trace = rawTrace.trace();
583
- for (const traceItem of trace) {
584
- if ("pc" in traceItem) {
585
- vmTracer.addStep(traceItem);
586
- } else if ("executionResult" in traceItem) {
587
- vmTracer.addAfterMessage(traceItem.executionResult);
588
- } else {
589
- vmTracer.addBeforeMessage(traceItem);
590
- }
591
- }
578
+ vmTracer.observe(rawTrace);
592
579
 
593
580
  let vmTrace = vmTracer.getLastTopLevelMessageTrace();
594
581
  const vmTracerError = vmTracer.getLastError();
@@ -1,75 +1,7 @@
1
- import { bytesToBigInt } from "@nomicfoundation/ethereumjs-util";
2
- import { assertHardhatInvariant } from "../../core/errors";
1
+ import { requireNapiRsModule } from "../../../common/napi-rs";
3
2
 
4
- const { rawDecode } = require("ethereumjs-abi");
3
+ const { ReturnData } = requireNapiRsModule(
4
+ "@nomicfoundation/edr"
5
+ ) as typeof import("@nomicfoundation/edr");
5
6
 
6
- // selector of Error(string)
7
- const ERROR_SELECTOR = "08c379a0";
8
- // selector of Panic(uint256)
9
- const PANIC_SELECTOR = "4e487b71";
10
-
11
- /**
12
- * Represents the returnData of a transaction, whose contents are unknown.
13
- */
14
- export class ReturnData {
15
- private _selector: string | undefined;
16
-
17
- constructor(public value: Uint8Array) {
18
- if (value.length >= 4) {
19
- this._selector = Buffer.from(value.slice(0, 4)).toString("hex");
20
- }
21
- }
22
-
23
- public isEmpty(): boolean {
24
- return this.value.length === 0;
25
- }
26
-
27
- public matchesSelector(selector: Uint8Array): boolean {
28
- if (this._selector === undefined) {
29
- return false;
30
- }
31
-
32
- return this._selector === Buffer.from(selector).toString("hex");
33
- }
34
-
35
- public isErrorReturnData(): boolean {
36
- return this._selector === ERROR_SELECTOR;
37
- }
38
-
39
- public isPanicReturnData(): boolean {
40
- return this._selector === PANIC_SELECTOR;
41
- }
42
-
43
- public decodeError(): string {
44
- if (this.isEmpty()) {
45
- return "";
46
- }
47
-
48
- assertHardhatInvariant(
49
- this._selector === ERROR_SELECTOR,
50
- "Expected return data to be a Error(string)"
51
- );
52
-
53
- const [decodedError] = rawDecode(["string"], this.value.slice(4)) as [
54
- string
55
- ];
56
-
57
- return decodedError;
58
- }
59
-
60
- public decodePanic(): bigint {
61
- assertHardhatInvariant(
62
- this._selector === PANIC_SELECTOR,
63
- "Expected return data to be a Panic(uint256)"
64
- );
65
-
66
- // we are assuming that panic codes are smaller than Number.MAX_SAFE_INTEGER
67
- const errorCode = bytesToBigInt(this.value.slice(4));
68
-
69
- return errorCode;
70
- }
71
-
72
- public getSelector(): string | undefined {
73
- return this._selector;
74
- }
75
- }
7
+ export { ReturnData };