hardhat 2.22.3 → 2.23.0-dev.0

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 (150) hide show
  1. package/internal/core/params/argumentTypes.d.ts +6 -0
  2. package/internal/core/params/argumentTypes.d.ts.map +1 -1
  3. package/internal/core/params/argumentTypes.js +40 -1
  4. package/internal/core/params/argumentTypes.js.map +1 -1
  5. package/internal/hardhat-network/provider/BlockchainBase.d.ts +29 -0
  6. package/internal/hardhat-network/provider/BlockchainBase.d.ts.map +1 -0
  7. package/internal/hardhat-network/provider/BlockchainBase.js +144 -0
  8. package/internal/hardhat-network/provider/BlockchainBase.js.map +1 -0
  9. package/internal/hardhat-network/provider/BlockchainData.d.ts +58 -0
  10. package/internal/hardhat-network/provider/BlockchainData.d.ts.map +1 -0
  11. package/internal/hardhat-network/provider/BlockchainData.js +178 -0
  12. package/internal/hardhat-network/provider/BlockchainData.js.map +1 -0
  13. package/internal/hardhat-network/provider/HardhatBlockchain.d.ts +24 -0
  14. package/internal/hardhat-network/provider/HardhatBlockchain.d.ts.map +1 -0
  15. package/internal/hardhat-network/provider/HardhatBlockchain.js +73 -0
  16. package/internal/hardhat-network/provider/HardhatBlockchain.js.map +1 -0
  17. package/internal/hardhat-network/provider/PoolState.d.ts +26 -0
  18. package/internal/hardhat-network/provider/PoolState.d.ts.map +1 -0
  19. package/internal/hardhat-network/provider/PoolState.js +41 -0
  20. package/internal/hardhat-network/provider/PoolState.js.map +1 -0
  21. package/internal/hardhat-network/provider/TransactionQueue.d.ts +32 -0
  22. package/internal/hardhat-network/provider/TransactionQueue.d.ts.map +1 -0
  23. package/internal/hardhat-network/provider/TransactionQueue.js +130 -0
  24. package/internal/hardhat-network/provider/TransactionQueue.js.map +1 -0
  25. package/internal/hardhat-network/provider/TxPool.d.ts +83 -0
  26. package/internal/hardhat-network/provider/TxPool.d.ts.map +1 -0
  27. package/internal/hardhat-network/provider/TxPool.js +470 -0
  28. package/internal/hardhat-network/provider/TxPool.js.map +1 -0
  29. package/internal/hardhat-network/provider/ethereumjs-workarounds.d.ts +2 -0
  30. package/internal/hardhat-network/provider/ethereumjs-workarounds.d.ts.map +1 -0
  31. package/internal/hardhat-network/provider/ethereumjs-workarounds.js +15 -0
  32. package/internal/hardhat-network/provider/ethereumjs-workarounds.js.map +1 -0
  33. package/internal/hardhat-network/provider/filter.d.ts +29 -0
  34. package/internal/hardhat-network/provider/filter.d.ts.map +1 -0
  35. package/internal/hardhat-network/provider/filter.js +97 -0
  36. package/internal/hardhat-network/provider/filter.js.map +1 -0
  37. package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts +33 -0
  38. package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts.map +1 -0
  39. package/internal/hardhat-network/provider/fork/ForkBlockchain.js +272 -0
  40. package/internal/hardhat-network/provider/fork/ForkBlockchain.js.map +1 -0
  41. package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts +51 -0
  42. package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts.map +1 -0
  43. package/internal/hardhat-network/provider/fork/ForkStateManager.js +300 -0
  44. package/internal/hardhat-network/provider/fork/ForkStateManager.js.map +1 -0
  45. package/internal/hardhat-network/provider/fork/rpcToBlockData.d.ts +4 -0
  46. package/internal/hardhat-network/provider/fork/rpcToBlockData.d.ts.map +1 -0
  47. package/internal/hardhat-network/provider/fork/rpcToBlockData.js +32 -0
  48. package/internal/hardhat-network/provider/fork/rpcToBlockData.js.map +1 -0
  49. package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts +10 -0
  50. package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts.map +1 -0
  51. package/internal/hardhat-network/provider/fork/rpcToTxData.js +29 -0
  52. package/internal/hardhat-network/provider/fork/rpcToTxData.js.map +1 -0
  53. package/internal/hardhat-network/provider/modules/base.d.ts +17 -0
  54. package/internal/hardhat-network/provider/modules/base.d.ts.map +1 -0
  55. package/internal/hardhat-network/provider/modules/base.js +127 -0
  56. package/internal/hardhat-network/provider/modules/base.js.map +1 -0
  57. package/internal/hardhat-network/provider/modules/debug.d.ts +12 -0
  58. package/internal/hardhat-network/provider/modules/debug.d.ts.map +1 -0
  59. package/internal/hardhat-network/provider/modules/debug.js +52 -0
  60. package/internal/hardhat-network/provider/modules/debug.js.map +1 -0
  61. package/internal/hardhat-network/provider/modules/eth.d.ts +107 -0
  62. package/internal/hardhat-network/provider/modules/eth.d.ts.map +1 -0
  63. package/internal/hardhat-network/provider/modules/eth.js +1034 -0
  64. package/internal/hardhat-network/provider/modules/eth.js.map +1 -0
  65. package/internal/hardhat-network/provider/modules/evm.d.ts +32 -0
  66. package/internal/hardhat-network/provider/modules/evm.d.ts.map +1 -0
  67. package/internal/hardhat-network/provider/modules/evm.js +180 -0
  68. package/internal/hardhat-network/provider/modules/evm.js.map +1 -0
  69. package/internal/hardhat-network/provider/modules/hardhat.d.ts +54 -0
  70. package/internal/hardhat-network/provider/modules/hardhat.d.ts.map +1 -0
  71. package/internal/hardhat-network/provider/modules/hardhat.js +309 -0
  72. package/internal/hardhat-network/provider/modules/hardhat.js.map +1 -0
  73. package/internal/hardhat-network/provider/modules/net.d.ts +13 -0
  74. package/internal/hardhat-network/provider/modules/net.d.ts.map +1 -0
  75. package/internal/hardhat-network/provider/modules/net.js +47 -0
  76. package/internal/hardhat-network/provider/modules/net.js.map +1 -0
  77. package/internal/hardhat-network/provider/modules/personal.d.ts +9 -0
  78. package/internal/hardhat-network/provider/modules/personal.d.ts.map +1 -0
  79. package/internal/hardhat-network/provider/modules/personal.js +31 -0
  80. package/internal/hardhat-network/provider/modules/personal.js.map +1 -0
  81. package/internal/hardhat-network/provider/modules/web3.d.ts +11 -0
  82. package/internal/hardhat-network/provider/modules/web3.d.ts.map +1 -0
  83. package/internal/hardhat-network/provider/modules/web3.js +38 -0
  84. package/internal/hardhat-network/provider/modules/web3.js.map +1 -0
  85. package/internal/hardhat-network/provider/node.d.ts +197 -0
  86. package/internal/hardhat-network/provider/node.d.ts.map +1 -0
  87. package/internal/hardhat-network/provider/node.js +1866 -0
  88. package/internal/hardhat-network/provider/node.js.map +1 -0
  89. package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
  90. package/internal/hardhat-network/provider/provider.js +30 -24
  91. package/internal/hardhat-network/provider/provider.js.map +1 -1
  92. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts +29 -0
  93. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts.map +1 -0
  94. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js +137 -0
  95. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -0
  96. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts +27 -0
  97. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts.map +1 -0
  98. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js +137 -0
  99. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -0
  100. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts +33 -0
  101. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts.map +1 -0
  102. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js +141 -0
  103. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -0
  104. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts +30 -0
  105. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts.map +1 -0
  106. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js +97 -0
  107. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js.map +1 -0
  108. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts +30 -0
  109. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts.map +1 -0
  110. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js +98 -0
  111. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js.map +1 -0
  112. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts +40 -0
  113. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts.map +1 -0
  114. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js +91 -0
  115. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js.map +1 -0
  116. package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.d.ts +32 -0
  117. package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.d.ts.map +1 -0
  118. package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.js +87 -0
  119. package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.js.map +1 -0
  120. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts +17 -0
  121. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts.map +1 -0
  122. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.js +3 -0
  123. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.js.map +1 -0
  124. package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts +7 -0
  125. package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts.map +1 -0
  126. package/internal/hardhat-network/provider/utils/makeFakeSignature.js +31 -0
  127. package/internal/hardhat-network/provider/utils/makeFakeSignature.js.map +1 -0
  128. package/internal/hardhat-network/provider/utils/makeStateTrie.d.ts +4 -0
  129. package/internal/hardhat-network/provider/utils/makeStateTrie.d.ts.map +1 -0
  130. package/internal/hardhat-network/provider/utils/makeStateTrie.js +20 -0
  131. package/internal/hardhat-network/provider/utils/makeStateTrie.js.map +1 -0
  132. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts +8 -0
  133. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts.map +1 -0
  134. package/internal/hardhat-network/provider/utils/putGenesisBlock.js +37 -0
  135. package/internal/hardhat-network/provider/utils/putGenesisBlock.js.map +1 -0
  136. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.d.ts +12 -0
  137. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.d.ts.map +1 -0
  138. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.js +62 -0
  139. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.js.map +1 -0
  140. package/internal/hardhat-network/provider/utils/txMapToArray.d.ts +3 -0
  141. package/internal/hardhat-network/provider/utils/txMapToArray.d.ts.map +1 -0
  142. package/internal/hardhat-network/provider/utils/txMapToArray.js +12 -0
  143. package/internal/hardhat-network/provider/utils/txMapToArray.js.map +1 -0
  144. package/internal/hardhat-network/stack-traces/vm-debug-tracer.d.ts +46 -0
  145. package/internal/hardhat-network/stack-traces/vm-debug-tracer.d.ts.map +1 -0
  146. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js +421 -0
  147. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js.map +1 -0
  148. package/package.json +2 -2
  149. package/src/internal/core/params/argumentTypes.ts +44 -0
  150. package/src/internal/hardhat-network/provider/provider.ts +43 -35
@@ -0,0 +1,421 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.VMDebugTracer = void 0;
27
+ const ethereumjs_util_1 = require("@nomicfoundation/ethereumjs-util");
28
+ const errors_1 = require("../../core/errors");
29
+ const errors_2 = require("../../core/providers/errors");
30
+ const BigIntUtils = __importStar(require("../../util/bigint"));
31
+ function isStructLog(message) {
32
+ return message !== undefined && !("structLogs" in message);
33
+ }
34
+ const EMPTY_MEMORY_WORD = "0".repeat(64);
35
+ class VMDebugTracer {
36
+ constructor(_vm) {
37
+ this._vm = _vm;
38
+ this._messages = [];
39
+ this._addressToStorage = {};
40
+ this._beforeMessageHandler = this._beforeMessageHandler.bind(this);
41
+ this._afterMessageHandler = this._afterMessageHandler.bind(this);
42
+ this._beforeTxHandler = this._beforeTxHandler.bind(this);
43
+ this._stepHandler = this._stepHandler.bind(this);
44
+ this._afterTxHandler = this._afterTxHandler.bind(this);
45
+ }
46
+ /**
47
+ * Run the `action` callback and trace its execution
48
+ */
49
+ async trace(action, config) {
50
+ try {
51
+ this._enableTracing(config);
52
+ this._config = config;
53
+ await action();
54
+ if (this._error !== undefined) {
55
+ throw this._error;
56
+ }
57
+ return this._getDebugTrace();
58
+ }
59
+ finally {
60
+ this._disableTracing();
61
+ }
62
+ }
63
+ _enableTracing(config) {
64
+ (0, errors_1.assertHardhatInvariant)(this._vm.evm.events !== undefined, "EVM should have an 'events' property");
65
+ this._vm.events.on("beforeTx", this._beforeTxHandler);
66
+ this._vm.evm.events.on("beforeMessage", this._beforeMessageHandler);
67
+ this._vm.evm.events.on("step", this._stepHandler);
68
+ this._vm.evm.events.on("afterMessage", this._afterMessageHandler);
69
+ this._vm.events.on("afterTx", this._afterTxHandler);
70
+ this._config = config;
71
+ }
72
+ _disableTracing() {
73
+ (0, errors_1.assertHardhatInvariant)(this._vm.evm.events !== undefined, "EVM should have an 'events' property");
74
+ this._vm.events.removeListener("beforeTx", this._beforeTxHandler);
75
+ this._vm.evm.events.removeListener("beforeMessage", this._beforeMessageHandler);
76
+ this._vm.evm.events.removeListener("step", this._stepHandler);
77
+ this._vm.evm.events.removeListener("afterMessage", this._afterMessageHandler);
78
+ this._vm.events.removeListener("afterTx", this._afterTxHandler);
79
+ this._config = undefined;
80
+ }
81
+ _getDebugTrace() {
82
+ if (this._lastTrace === undefined) {
83
+ throw new Error("No debug trace available. Please run the transaction first");
84
+ }
85
+ return this._lastTrace;
86
+ }
87
+ async _beforeTxHandler(_tx, next) {
88
+ this._lastTrace = undefined;
89
+ this._messages = [];
90
+ this._addressToStorage = {};
91
+ next();
92
+ }
93
+ async _beforeMessageHandler(message, next) {
94
+ const debugMessage = {
95
+ structLogs: [],
96
+ to: message.to?.toString() ?? "",
97
+ };
98
+ if (this._messages.length > 0) {
99
+ const previousMessage = this._messages[this._messages.length - 1];
100
+ previousMessage.structLogs.push(debugMessage);
101
+ }
102
+ this._messages.push(debugMessage);
103
+ next();
104
+ }
105
+ async _stepHandler(step, next) {
106
+ try {
107
+ (0, errors_1.assertHardhatInvariant)(this._messages.length > 0, "Step handler should be called after at least one beforeMessage handler");
108
+ const structLog = await this._stepToStructLog(step);
109
+ this._messages[this._messages.length - 1].structLogs.push(structLog);
110
+ }
111
+ catch (e) {
112
+ // errors thrown in event handlers are lost, so we save this error to
113
+ // re-throw it in the `trace` function
114
+ this._error = e;
115
+ this._disableTracing();
116
+ }
117
+ next();
118
+ }
119
+ async _afterMessageHandler(result, next) {
120
+ const lastMessage = this._messages[this._messages.length - 1];
121
+ lastMessage.result = result;
122
+ if (this._messages.length > 1) {
123
+ this._messages.pop();
124
+ }
125
+ next();
126
+ }
127
+ async _afterTxHandler(result, next) {
128
+ const { default: flattenDeep } = await Promise.resolve().then(() => __importStar(require("lodash/flattenDeep")));
129
+ const topLevelMessage = this._messages[0];
130
+ const nestedStructLogs = await this._messageToNestedStructLogs(topLevelMessage, topLevelMessage.to);
131
+ const rpcStructLogs = flattenDeep(nestedStructLogs).map((structLog) => {
132
+ const rpcStructLog = structLog;
133
+ // geth doesn't return this value
134
+ delete rpcStructLog.memSize;
135
+ if (this._config?.disableMemory === true) {
136
+ delete rpcStructLog.memory;
137
+ }
138
+ if (this._config?.disableStack === true) {
139
+ delete rpcStructLog.stack;
140
+ }
141
+ if (this._config?.disableStorage === true) {
142
+ delete rpcStructLog.storage;
143
+ }
144
+ return rpcStructLog;
145
+ });
146
+ // geth does this for some reason
147
+ if (rpcStructLogs.length > 0 &&
148
+ result.execResult.exceptionError?.error === "out of gas") {
149
+ rpcStructLogs[rpcStructLogs.length - 1].error = {};
150
+ }
151
+ this._lastTrace = {
152
+ gas: Number(result.totalGasSpent),
153
+ failed: result.execResult.exceptionError !== undefined,
154
+ returnValue: result.execResult.returnValue.toString("hex"),
155
+ structLogs: rpcStructLogs,
156
+ };
157
+ next();
158
+ }
159
+ async _messageToNestedStructLogs(message, address) {
160
+ const nestedStructLogs = [];
161
+ for (const [i, messageOrStructLog] of message.structLogs.entries()) {
162
+ if (isStructLog(messageOrStructLog)) {
163
+ const structLog = messageOrStructLog;
164
+ nestedStructLogs.push(structLog);
165
+ // update the storage of the current address
166
+ const addressStorage = this._addressToStorage[address] ?? {};
167
+ structLog.storage = {
168
+ ...addressStorage,
169
+ ...structLog.storage,
170
+ };
171
+ this._addressToStorage[address] = {
172
+ ...structLog.storage,
173
+ };
174
+ if (i === 0) {
175
+ continue;
176
+ }
177
+ let previousStructLog = nestedStructLogs[nestedStructLogs.length - 2];
178
+ if (Array.isArray(previousStructLog)) {
179
+ previousStructLog = nestedStructLogs[nestedStructLogs.length - 3];
180
+ }
181
+ else {
182
+ // if the previous log is not a message, we update its gasCost
183
+ // using the gas difference between both steps
184
+ previousStructLog.gasCost = previousStructLog.gas - structLog.gas;
185
+ }
186
+ (0, errors_1.assertHardhatInvariant)(!Array.isArray(previousStructLog), "There shouldn't be two messages one after another");
187
+ // memory opcodes reflect the expanded memory in that step,
188
+ // so we correct them
189
+ if (previousStructLog.op === "MSTORE" ||
190
+ previousStructLog.op === "MLOAD") {
191
+ const memoryLengthDifference = structLog.memory.length - previousStructLog.memory.length;
192
+ for (let k = 0; k < memoryLengthDifference; k++) {
193
+ previousStructLog.memory.push(EMPTY_MEMORY_WORD);
194
+ }
195
+ }
196
+ }
197
+ else {
198
+ const subMessage = messageOrStructLog;
199
+ const lastStructLog = nestedStructLogs[nestedStructLogs.length - 1];
200
+ (0, errors_1.assertHardhatInvariant)(!Array.isArray(lastStructLog), "There shouldn't be two messages one after another");
201
+ const isDelegateCall = lastStructLog.op === "DELEGATECALL";
202
+ const messageNestedStructLogs = await this._messageToNestedStructLogs(subMessage, isDelegateCall ? address : subMessage.to);
203
+ nestedStructLogs.push(messageNestedStructLogs);
204
+ }
205
+ }
206
+ return nestedStructLogs;
207
+ }
208
+ _getMemory(step) {
209
+ const rawMemory = Buffer.from(step.memory)
210
+ .toString("hex")
211
+ .match(/.{1,64}/g) ?? [];
212
+ // Remove the additional non allocated memory
213
+ return rawMemory.slice(0, Number(step.memoryWordCount));
214
+ }
215
+ _getStack(step) {
216
+ const stack = step.stack
217
+ .slice()
218
+ .map((el) => el.toString(16).padStart(64, "0"));
219
+ return stack;
220
+ }
221
+ async _stepToStructLog(step) {
222
+ const memory = this._getMemory(step);
223
+ const stack = this._getStack(step);
224
+ let gasCost = step.opcode.fee;
225
+ let op = step.opcode.name;
226
+ let error;
227
+ const storage = {};
228
+ if (step.opcode.name === "SLOAD") {
229
+ const address = step.address;
230
+ const [keyBuffer] = this._getFromStack(stack, 1);
231
+ const key = (0, ethereumjs_util_1.setLengthLeft)(keyBuffer, 32);
232
+ const storageValue = await this._getContractStorage(address, key);
233
+ storage[toWord(key)] = toWord(storageValue);
234
+ }
235
+ else if (step.opcode.name === "SSTORE") {
236
+ const [keyBuffer, valueBuffer] = this._getFromStack(stack, 2);
237
+ const key = toWord(keyBuffer);
238
+ const storageValue = toWord(valueBuffer);
239
+ storage[key] = storageValue;
240
+ }
241
+ else if (step.opcode.name === "REVERT") {
242
+ const [offsetBuffer, lengthBuffer] = this._getFromStack(stack, 2);
243
+ const length = (0, ethereumjs_util_1.bufferToBigInt)(lengthBuffer);
244
+ const offset = (0, ethereumjs_util_1.bufferToBigInt)(offsetBuffer);
245
+ const [gasIncrease, addedWords] = this._memoryExpansion(BigInt(memory.length), length + offset);
246
+ gasCost += Number(gasIncrease);
247
+ for (let i = 0; i < addedWords; i++) {
248
+ memory.push(EMPTY_MEMORY_WORD);
249
+ }
250
+ }
251
+ else if (step.opcode.name === "CREATE2") {
252
+ const [, , memoryUsedBuffer] = this._getFromStack(stack, 3);
253
+ const memoryUsed = (0, ethereumjs_util_1.bufferToBigInt)(memoryUsedBuffer);
254
+ const sha3ExtraCost = BigIntUtils.divUp(memoryUsed, 32n) * this._sha3WordGas();
255
+ gasCost += Number(sha3ExtraCost);
256
+ }
257
+ else if (step.opcode.name === "CALL" ||
258
+ step.opcode.name === "STATICCALL" ||
259
+ step.opcode.name === "DELEGATECALL") {
260
+ // this is a port of what geth does to compute the
261
+ // gasCost of a *CALL step, with some simplifications
262
+ // because we don't support pre-spuriousDragon hardforks
263
+ let valueBuffer = Buffer.from([]);
264
+ let [callCostBuffer, recipientAddressBuffer, inBuffer, inSizeBuffer, outBuffer, outSizeBuffer,] = this._getFromStack(stack, 6);
265
+ // CALL has 7 parameters
266
+ if (step.opcode.name === "CALL") {
267
+ [
268
+ callCostBuffer,
269
+ recipientAddressBuffer,
270
+ valueBuffer,
271
+ inBuffer,
272
+ inSizeBuffer,
273
+ outBuffer,
274
+ outSizeBuffer,
275
+ ] = this._getFromStack(stack, 7);
276
+ }
277
+ const callCost = (0, ethereumjs_util_1.bufferToBigInt)(callCostBuffer);
278
+ const value = (0, ethereumjs_util_1.bufferToBigInt)(valueBuffer);
279
+ const memoryLength = BigInt(memory.length);
280
+ const inBN = (0, ethereumjs_util_1.bufferToBigInt)(inBuffer);
281
+ const inSizeBN = (0, ethereumjs_util_1.bufferToBigInt)(inSizeBuffer);
282
+ const inPosition = inSizeBN === 0n ? inSizeBN : inBN + inSizeBN;
283
+ const outBN = (0, ethereumjs_util_1.bufferToBigInt)(outBuffer);
284
+ const outSizeBN = (0, ethereumjs_util_1.bufferToBigInt)(outSizeBuffer);
285
+ const outPosition = outSizeBN === 0n ? outSizeBN : outBN + outSizeBN;
286
+ const memSize = inPosition > outPosition ? inPosition : outPosition;
287
+ const toAddress = new ethereumjs_util_1.Address(recipientAddressBuffer.slice(-20));
288
+ const constantGas = this._callConstantGas();
289
+ const availableGas = step.gasLeft - constantGas;
290
+ const [memoryGas] = this._memoryExpansion(memoryLength, memSize);
291
+ const dynamicGas = await this._callDynamicGas(toAddress, value, availableGas, memoryGas, callCost);
292
+ gasCost = Number(constantGas + dynamicGas);
293
+ }
294
+ else if (step.opcode.name === "CALLCODE") {
295
+ // finding an existing tx that uses CALLCODE or compiling a contract
296
+ // so that it uses this opcode is hard,
297
+ // so we just throw
298
+ throw new errors_2.InvalidInputError("Transactions that use CALLCODE are not supported by Hardhat's debug_traceTransaction");
299
+ }
300
+ else if (step.opcode.name === "INVALID") {
301
+ const code = await this._getContractCode(step.codeAddress);
302
+ const opcodeHex = code[step.pc].toString(16);
303
+ op = `opcode 0x${opcodeHex} not defined`;
304
+ error = {};
305
+ }
306
+ const structLog = {
307
+ pc: step.pc,
308
+ op,
309
+ gas: Number(step.gasLeft),
310
+ gasCost,
311
+ depth: step.depth + 1,
312
+ stack,
313
+ memory,
314
+ storage,
315
+ memSize: Number(step.memoryWordCount),
316
+ };
317
+ if (error !== undefined) {
318
+ structLog.error = error;
319
+ }
320
+ return structLog;
321
+ }
322
+ _memoryGas() {
323
+ return this._vm._common.param("gasPrices", "memory");
324
+ }
325
+ _sha3WordGas() {
326
+ return this._vm._common.param("gasPrices", "sha3Word");
327
+ }
328
+ _callConstantGas() {
329
+ if (this._vm._common.gteHardfork("berlin")) {
330
+ return this._vm._common.param("gasPrices", "warmstorageread");
331
+ }
332
+ return this._vm._common.param("gasPrices", "call");
333
+ }
334
+ _callNewAccountGas() {
335
+ return this._vm._common.param("gasPrices", "callNewAccount");
336
+ }
337
+ _callValueTransferGas() {
338
+ return this._vm._common.param("gasPrices", "callValueTransfer");
339
+ }
340
+ _quadCoeffDiv() {
341
+ return this._vm._common.param("gasPrices", "quadCoeffDiv");
342
+ }
343
+ _isAddressEmpty(address) {
344
+ return this._vm.stateManager.accountIsEmpty(address);
345
+ }
346
+ _getContractStorage(address, key) {
347
+ return this._vm.stateManager.getContractStorage(address, key);
348
+ }
349
+ _getContractCode(address) {
350
+ return this._vm.stateManager.getContractCode(address);
351
+ }
352
+ async _callDynamicGas(address, value, availableGas, memoryGas, callCost) {
353
+ // The available gas is reduced when the address is cold
354
+ if (this._vm._common.gteHardfork("berlin")) {
355
+ const isWarmed = this._vm.eei.isWarmedAddress(address.toBuffer());
356
+ const coldCost = this._vm._common.param("gasPrices", "coldaccountaccess") -
357
+ this._vm._common.param("gasPrices", "warmstorageread");
358
+ // This comment is copied verbatim from geth:
359
+ // The WarmStorageReadCostEIP2929 (100) is already deducted in the form of a constant cost, so
360
+ // the cost to charge for cold access, if any, is Cold - Warm
361
+ if (!isWarmed) {
362
+ availableGas -= coldCost;
363
+ }
364
+ }
365
+ let gas = 0n;
366
+ const transfersValue = value !== 0n;
367
+ const addressIsEmpty = await this._isAddressEmpty(address);
368
+ if (transfersValue && addressIsEmpty) {
369
+ gas += this._callNewAccountGas();
370
+ }
371
+ if (transfersValue) {
372
+ gas += this._callValueTransferGas();
373
+ }
374
+ gas += memoryGas;
375
+ gas += this._callGas(availableGas, gas, callCost);
376
+ return gas;
377
+ }
378
+ _callGas(availableGas, base, callCost) {
379
+ availableGas -= base;
380
+ const gas = availableGas - availableGas / 64n;
381
+ if (callCost > gas) {
382
+ return gas;
383
+ }
384
+ return callCost;
385
+ }
386
+ /**
387
+ * Returns the increase in gas and the number of added words
388
+ */
389
+ _memoryExpansion(currentWords, newSize) {
390
+ const currentSize = currentWords * 32n;
391
+ const currentWordsLength = (currentSize + 31n) / 32n;
392
+ const newWordsLength = (newSize + 31n) / 32n;
393
+ const wordsDiff = newWordsLength - currentWordsLength;
394
+ if (newSize > currentSize) {
395
+ const newTotalFee = this._memoryFee(newWordsLength);
396
+ const currentTotalFee = this._memoryFee(currentWordsLength);
397
+ const fee = newTotalFee - currentTotalFee;
398
+ return [fee, wordsDiff];
399
+ }
400
+ return [0n, 0n];
401
+ }
402
+ _getFromStack(stack, count) {
403
+ return stack
404
+ .slice(-count)
405
+ .reverse()
406
+ .map((value) => `0x${value}`)
407
+ .map(ethereumjs_util_1.toBuffer);
408
+ }
409
+ _memoryFee(words) {
410
+ const square = words * words;
411
+ const linCoef = words * this._memoryGas();
412
+ const quadCoef = square / this._quadCoeffDiv();
413
+ const newTotalFee = linCoef + quadCoef;
414
+ return newTotalFee;
415
+ }
416
+ }
417
+ exports.VMDebugTracer = VMDebugTracer;
418
+ function toWord(b) {
419
+ return b.toString("hex").padStart(64, "0");
420
+ }
421
+ //# sourceMappingURL=vm-debug-tracer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vm-debug-tracer.js","sourceRoot":"","sources":["../../../src/internal/hardhat-network/stack-traces/vm-debug-tracer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hardhat",
3
- "version": "2.22.3",
3
+ "version": "2.23.0-dev.0",
4
4
  "author": "Nomic Labs LLC",
5
5
  "license": "MIT",
6
6
  "homepage": "https://hardhat.org",
@@ -85,7 +85,7 @@
85
85
  "dependencies": {
86
86
  "@ethersproject/abi": "^5.1.2",
87
87
  "@metamask/eth-sig-util": "^4.0.0",
88
- "@nomicfoundation/edr": "^0.3.5",
88
+ "@nomicfoundation/edr": "^0.3.7",
89
89
  "@nomicfoundation/ethereumjs-common": "4.0.4",
90
90
  "@nomicfoundation/ethereumjs-tx": "5.0.4",
91
91
  "@nomicfoundation/ethereumjs-util": "9.0.4",
@@ -121,6 +121,50 @@ export const int: CLIArgumentType<number> = {
121
121
  },
122
122
  };
123
123
 
124
+ /**
125
+ * BigInt type.
126
+ * Accepts either a decimal string integer or hexadecimal string integer.
127
+ * @throws HH301
128
+ */
129
+ export const bigint: CLIArgumentType<bigint> = {
130
+ name: "bigint",
131
+ parse: (argName, strValue) => {
132
+ const decimalPattern = /^\d+(?:n)?$/;
133
+ const hexPattern = /^0[xX][\dABCDEabcde]+$/;
134
+
135
+ if (
136
+ strValue.match(decimalPattern) === null &&
137
+ strValue.match(hexPattern) === null
138
+ ) {
139
+ throw new HardhatError(ERRORS.ARGUMENTS.INVALID_VALUE_FOR_TYPE, {
140
+ value: strValue,
141
+ name: argName,
142
+ type: bigint.name,
143
+ });
144
+ }
145
+
146
+ return BigInt(strValue.replace("n", ""));
147
+ },
148
+ /**
149
+ * Check if argument value is of type "bigint".
150
+ *
151
+ * @param argName {string} argument's name - used for context in case of error.
152
+ * @param value {any} argument's value to validate.
153
+ *
154
+ * @throws HH301 if value is not of type "bigint"
155
+ */
156
+ validate: (argName: string, value: any): void => {
157
+ const isBigInt = typeof value === "bigint";
158
+ if (!isBigInt) {
159
+ throw new HardhatError(ERRORS.ARGUMENTS.INVALID_VALUE_FOR_TYPE, {
160
+ value,
161
+ name: argName,
162
+ type: bigint.name,
163
+ });
164
+ }
165
+ },
166
+ };
167
+
124
168
  /**
125
169
  * Float type.
126
170
  * Accepts either a decimal string number or hexadecimal string number.
@@ -368,41 +368,49 @@ export class EdrProviderWrapper
368
368
  );
369
369
  const response = JSON.parse(responseObject.json);
370
370
 
371
- const rawTraces = responseObject.traces;
372
- for (const rawTrace of rawTraces) {
373
- const trace = rawTrace.trace();
374
- for (const traceItem of trace) {
375
- if ("pc" in traceItem) {
376
- if (this._node._vm.evm.events.listenerCount("step") > 0) {
377
- this._node._vm.evm.events.emit(
378
- "step",
379
- edrTracingStepToMinimalInterpreterStep(traceItem)
380
- );
381
- }
382
- if (this._rawTraceCallbacks.onStep !== undefined) {
383
- await this._rawTraceCallbacks.onStep(traceItem);
384
- }
385
- } else if ("executionResult" in traceItem) {
386
- if (this._node._vm.evm.events.listenerCount("afterMessage") > 0) {
387
- this._node._vm.evm.events.emit(
388
- "afterMessage",
389
- edrTracingMessageResultToMinimalEVMResult(traceItem)
390
- );
391
- }
392
- if (this._rawTraceCallbacks.onAfterMessage !== undefined) {
393
- await this._rawTraceCallbacks.onAfterMessage(
394
- traceItem.executionResult
395
- );
396
- }
397
- } else {
398
- if (this._node._vm.evm.events.listenerCount("beforeMessage") > 0) {
399
- this._node._vm.evm.events.emit(
400
- "beforeMessage",
401
- edrTracingMessageToMinimalMessage(traceItem)
402
- );
403
- }
404
- if (this._rawTraceCallbacks.onBeforeMessage !== undefined) {
405
- await this._rawTraceCallbacks.onBeforeMessage(traceItem);
371
+ const needsTraces =
372
+ this._node._vm.evm.events.eventNames().length > 0 ||
373
+ this._rawTraceCallbacks.onStep !== undefined ||
374
+ this._rawTraceCallbacks.onAfterMessage !== undefined ||
375
+ this._rawTraceCallbacks.onBeforeMessage !== undefined;
376
+
377
+ if (needsTraces) {
378
+ const rawTraces = responseObject.traces;
379
+ for (const rawTrace of rawTraces) {
380
+ const trace = rawTrace.trace();
381
+ for (const traceItem of trace) {
382
+ if ("pc" in traceItem) {
383
+ if (this._node._vm.evm.events.listenerCount("step") > 0) {
384
+ this._node._vm.evm.events.emit(
385
+ "step",
386
+ edrTracingStepToMinimalInterpreterStep(traceItem)
387
+ );
388
+ }
389
+ if (this._rawTraceCallbacks.onStep !== undefined) {
390
+ await this._rawTraceCallbacks.onStep(traceItem);
391
+ }
392
+ } else if ("executionResult" in traceItem) {
393
+ if (this._node._vm.evm.events.listenerCount("afterMessage") > 0) {
394
+ this._node._vm.evm.events.emit(
395
+ "afterMessage",
396
+ edrTracingMessageResultToMinimalEVMResult(traceItem)
397
+ );
398
+ }
399
+ if (this._rawTraceCallbacks.onAfterMessage !== undefined) {
400
+ await this._rawTraceCallbacks.onAfterMessage(
401
+ traceItem.executionResult
402
+ );
403
+ }
404
+ } else {
405
+ if (this._node._vm.evm.events.listenerCount("beforeMessage") > 0) {
406
+ this._node._vm.evm.events.emit(
407
+ "beforeMessage",
408
+ edrTracingMessageToMinimalMessage(traceItem)
409
+ );
410
+ }
411
+ if (this._rawTraceCallbacks.onBeforeMessage !== undefined) {
412
+ await this._rawTraceCallbacks.onBeforeMessage(traceItem);
413
+ }
406
414
  }
407
415
  }
408
416
  }