hardhat 2.22.2 → 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 (183) hide show
  1. package/builtin-tasks/compile.js +2 -2
  2. package/builtin-tasks/compile.js.map +1 -1
  3. package/common/napi-rs.d.ts +2 -0
  4. package/common/napi-rs.d.ts.map +1 -0
  5. package/common/napi-rs.js +19 -0
  6. package/common/napi-rs.js.map +1 -0
  7. package/internal/core/errors-list.js +1 -1
  8. package/internal/core/errors-list.js.map +1 -1
  9. package/internal/core/params/argumentTypes.d.ts +6 -0
  10. package/internal/core/params/argumentTypes.d.ts.map +1 -1
  11. package/internal/core/params/argumentTypes.js +40 -1
  12. package/internal/core/params/argumentTypes.js.map +1 -1
  13. package/internal/core/tasks/task-definitions.d.ts +2 -2
  14. package/internal/core/tasks/task-definitions.js +2 -2
  15. package/internal/hardhat-network/provider/BlockchainBase.d.ts +29 -0
  16. package/internal/hardhat-network/provider/BlockchainBase.d.ts.map +1 -0
  17. package/internal/hardhat-network/provider/BlockchainBase.js +144 -0
  18. package/internal/hardhat-network/provider/BlockchainBase.js.map +1 -0
  19. package/internal/hardhat-network/provider/BlockchainData.d.ts +58 -0
  20. package/internal/hardhat-network/provider/BlockchainData.d.ts.map +1 -0
  21. package/internal/hardhat-network/provider/BlockchainData.js +178 -0
  22. package/internal/hardhat-network/provider/BlockchainData.js.map +1 -0
  23. package/internal/hardhat-network/provider/HardhatBlockchain.d.ts +24 -0
  24. package/internal/hardhat-network/provider/HardhatBlockchain.d.ts.map +1 -0
  25. package/internal/hardhat-network/provider/HardhatBlockchain.js +73 -0
  26. package/internal/hardhat-network/provider/HardhatBlockchain.js.map +1 -0
  27. package/internal/hardhat-network/provider/PoolState.d.ts +26 -0
  28. package/internal/hardhat-network/provider/PoolState.d.ts.map +1 -0
  29. package/internal/hardhat-network/provider/PoolState.js +41 -0
  30. package/internal/hardhat-network/provider/PoolState.js.map +1 -0
  31. package/internal/hardhat-network/provider/TransactionQueue.d.ts +32 -0
  32. package/internal/hardhat-network/provider/TransactionQueue.d.ts.map +1 -0
  33. package/internal/hardhat-network/provider/TransactionQueue.js +130 -0
  34. package/internal/hardhat-network/provider/TransactionQueue.js.map +1 -0
  35. package/internal/hardhat-network/provider/TxPool.d.ts +83 -0
  36. package/internal/hardhat-network/provider/TxPool.d.ts.map +1 -0
  37. package/internal/hardhat-network/provider/TxPool.js +470 -0
  38. package/internal/hardhat-network/provider/TxPool.js.map +1 -0
  39. package/internal/hardhat-network/provider/ethereumjs-workarounds.d.ts +2 -0
  40. package/internal/hardhat-network/provider/ethereumjs-workarounds.d.ts.map +1 -0
  41. package/internal/hardhat-network/provider/ethereumjs-workarounds.js +15 -0
  42. package/internal/hardhat-network/provider/ethereumjs-workarounds.js.map +1 -0
  43. package/internal/hardhat-network/provider/filter.d.ts +29 -0
  44. package/internal/hardhat-network/provider/filter.d.ts.map +1 -0
  45. package/internal/hardhat-network/provider/filter.js +97 -0
  46. package/internal/hardhat-network/provider/filter.js.map +1 -0
  47. package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts +33 -0
  48. package/internal/hardhat-network/provider/fork/ForkBlockchain.d.ts.map +1 -0
  49. package/internal/hardhat-network/provider/fork/ForkBlockchain.js +272 -0
  50. package/internal/hardhat-network/provider/fork/ForkBlockchain.js.map +1 -0
  51. package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts +51 -0
  52. package/internal/hardhat-network/provider/fork/ForkStateManager.d.ts.map +1 -0
  53. package/internal/hardhat-network/provider/fork/ForkStateManager.js +300 -0
  54. package/internal/hardhat-network/provider/fork/ForkStateManager.js.map +1 -0
  55. package/internal/hardhat-network/provider/fork/rpcToBlockData.d.ts +4 -0
  56. package/internal/hardhat-network/provider/fork/rpcToBlockData.d.ts.map +1 -0
  57. package/internal/hardhat-network/provider/fork/rpcToBlockData.js +32 -0
  58. package/internal/hardhat-network/provider/fork/rpcToBlockData.js.map +1 -0
  59. package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts +10 -0
  60. package/internal/hardhat-network/provider/fork/rpcToTxData.d.ts.map +1 -0
  61. package/internal/hardhat-network/provider/fork/rpcToTxData.js +29 -0
  62. package/internal/hardhat-network/provider/fork/rpcToTxData.js.map +1 -0
  63. package/internal/hardhat-network/provider/modules/base.d.ts +17 -0
  64. package/internal/hardhat-network/provider/modules/base.d.ts.map +1 -0
  65. package/internal/hardhat-network/provider/modules/base.js +127 -0
  66. package/internal/hardhat-network/provider/modules/base.js.map +1 -0
  67. package/internal/hardhat-network/provider/modules/debug.d.ts +12 -0
  68. package/internal/hardhat-network/provider/modules/debug.d.ts.map +1 -0
  69. package/internal/hardhat-network/provider/modules/debug.js +52 -0
  70. package/internal/hardhat-network/provider/modules/debug.js.map +1 -0
  71. package/internal/hardhat-network/provider/modules/eth.d.ts +107 -0
  72. package/internal/hardhat-network/provider/modules/eth.d.ts.map +1 -0
  73. package/internal/hardhat-network/provider/modules/eth.js +1034 -0
  74. package/internal/hardhat-network/provider/modules/eth.js.map +1 -0
  75. package/internal/hardhat-network/provider/modules/evm.d.ts +32 -0
  76. package/internal/hardhat-network/provider/modules/evm.d.ts.map +1 -0
  77. package/internal/hardhat-network/provider/modules/evm.js +180 -0
  78. package/internal/hardhat-network/provider/modules/evm.js.map +1 -0
  79. package/internal/hardhat-network/provider/modules/hardhat.d.ts +54 -0
  80. package/internal/hardhat-network/provider/modules/hardhat.d.ts.map +1 -0
  81. package/internal/hardhat-network/provider/modules/hardhat.js +309 -0
  82. package/internal/hardhat-network/provider/modules/hardhat.js.map +1 -0
  83. package/internal/hardhat-network/provider/modules/net.d.ts +13 -0
  84. package/internal/hardhat-network/provider/modules/net.d.ts.map +1 -0
  85. package/internal/hardhat-network/provider/modules/net.js +47 -0
  86. package/internal/hardhat-network/provider/modules/net.js.map +1 -0
  87. package/internal/hardhat-network/provider/modules/personal.d.ts +9 -0
  88. package/internal/hardhat-network/provider/modules/personal.d.ts.map +1 -0
  89. package/internal/hardhat-network/provider/modules/personal.js +31 -0
  90. package/internal/hardhat-network/provider/modules/personal.js.map +1 -0
  91. package/internal/hardhat-network/provider/modules/web3.d.ts +11 -0
  92. package/internal/hardhat-network/provider/modules/web3.d.ts.map +1 -0
  93. package/internal/hardhat-network/provider/modules/web3.js +38 -0
  94. package/internal/hardhat-network/provider/modules/web3.js.map +1 -0
  95. package/internal/hardhat-network/provider/node.d.ts +197 -0
  96. package/internal/hardhat-network/provider/node.d.ts.map +1 -0
  97. package/internal/hardhat-network/provider/node.js +1866 -0
  98. package/internal/hardhat-network/provider/node.js.map +1 -0
  99. package/internal/hardhat-network/provider/provider.d.ts +1 -1
  100. package/internal/hardhat-network/provider/provider.d.ts.map +1 -1
  101. package/internal/hardhat-network/provider/provider.js +34 -27
  102. package/internal/hardhat-network/provider/provider.js.map +1 -1
  103. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts +29 -0
  104. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.d.ts.map +1 -0
  105. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js +137 -0
  106. package/internal/hardhat-network/provider/transactions/FakeSenderAccessListEIP2930Transaction.js.map +1 -0
  107. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts +27 -0
  108. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.d.ts.map +1 -0
  109. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js +137 -0
  110. package/internal/hardhat-network/provider/transactions/FakeSenderEIP1559Transaction.js.map +1 -0
  111. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts +33 -0
  112. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.d.ts.map +1 -0
  113. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js +141 -0
  114. package/internal/hardhat-network/provider/transactions/FakeSenderTransaction.js.map +1 -0
  115. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts +30 -0
  116. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.d.ts.map +1 -0
  117. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js +97 -0
  118. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP1559Transaction.js.map +1 -0
  119. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts +30 -0
  120. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.d.ts.map +1 -0
  121. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js +98 -0
  122. package/internal/hardhat-network/provider/transactions/ReadOnlyValidEIP2930Transaction.js.map +1 -0
  123. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts +40 -0
  124. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.d.ts.map +1 -0
  125. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js +91 -0
  126. package/internal/hardhat-network/provider/transactions/ReadOnlyValidTransaction.js.map +1 -0
  127. package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.d.ts +32 -0
  128. package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.d.ts.map +1 -0
  129. package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.js +87 -0
  130. package/internal/hardhat-network/provider/transactions/ReadOnlyValidUnknownTypeTransaction.js.map +1 -0
  131. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts +17 -0
  132. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.d.ts.map +1 -0
  133. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.js +3 -0
  134. package/internal/hardhat-network/provider/types/HardhatBlockchainInterface.js.map +1 -0
  135. package/internal/hardhat-network/provider/utils/convertToEdr.d.ts +1 -1
  136. package/internal/hardhat-network/provider/utils/convertToEdr.d.ts.map +1 -1
  137. package/internal/hardhat-network/provider/utils/convertToEdr.js +4 -0
  138. package/internal/hardhat-network/provider/utils/convertToEdr.js.map +1 -1
  139. package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts +7 -0
  140. package/internal/hardhat-network/provider/utils/makeFakeSignature.d.ts.map +1 -0
  141. package/internal/hardhat-network/provider/utils/makeFakeSignature.js +31 -0
  142. package/internal/hardhat-network/provider/utils/makeFakeSignature.js.map +1 -0
  143. package/internal/hardhat-network/provider/utils/makeStateTrie.d.ts +4 -0
  144. package/internal/hardhat-network/provider/utils/makeStateTrie.d.ts.map +1 -0
  145. package/internal/hardhat-network/provider/utils/makeStateTrie.js +20 -0
  146. package/internal/hardhat-network/provider/utils/makeStateTrie.js.map +1 -0
  147. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts +8 -0
  148. package/internal/hardhat-network/provider/utils/putGenesisBlock.d.ts.map +1 -0
  149. package/internal/hardhat-network/provider/utils/putGenesisBlock.js +37 -0
  150. package/internal/hardhat-network/provider/utils/putGenesisBlock.js.map +1 -0
  151. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.d.ts +12 -0
  152. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.d.ts.map +1 -0
  153. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.js +62 -0
  154. package/internal/hardhat-network/provider/utils/reorganizeTransactionsLists.js.map +1 -0
  155. package/internal/hardhat-network/provider/utils/txMapToArray.d.ts +3 -0
  156. package/internal/hardhat-network/provider/utils/txMapToArray.d.ts.map +1 -0
  157. package/internal/hardhat-network/provider/utils/txMapToArray.js +12 -0
  158. package/internal/hardhat-network/provider/utils/txMapToArray.js.map +1 -0
  159. package/internal/hardhat-network/provider/vm/exit.d.ts +1 -1
  160. package/internal/hardhat-network/provider/vm/exit.d.ts.map +1 -1
  161. package/internal/hardhat-network/provider/vm/exit.js +4 -0
  162. package/internal/hardhat-network/provider/vm/exit.js.map +1 -1
  163. package/internal/hardhat-network/stack-traces/vm-debug-tracer.d.ts +46 -0
  164. package/internal/hardhat-network/stack-traces/vm-debug-tracer.d.ts.map +1 -0
  165. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js +421 -0
  166. package/internal/hardhat-network/stack-traces/vm-debug-tracer.js.map +1 -0
  167. package/internal/hardhat-network/stack-traces/vm-tracer.d.ts +1 -1
  168. package/internal/hardhat-network/stack-traces/vm-tracer.d.ts.map +1 -1
  169. package/internal/solidity/parse.d.ts.map +1 -1
  170. package/internal/solidity/parse.js +5 -15
  171. package/internal/solidity/parse.js.map +1 -1
  172. package/package.json +8 -8
  173. package/recommended-gitignore.txt +3 -0
  174. package/src/builtin-tasks/compile.ts +2 -2
  175. package/src/common/napi-rs.ts +15 -0
  176. package/src/internal/core/errors-list.ts +1 -1
  177. package/src/internal/core/params/argumentTypes.ts +44 -0
  178. package/src/internal/core/tasks/task-definitions.ts +2 -2
  179. package/src/internal/hardhat-network/provider/provider.ts +52 -38
  180. package/src/internal/hardhat-network/provider/utils/convertToEdr.ts +14 -1
  181. package/src/internal/hardhat-network/provider/vm/exit.ts +15 -1
  182. package/src/internal/hardhat-network/stack-traces/vm-tracer.ts +1 -1
  183. package/src/internal/solidity/parse.ts +7 -16
@@ -0,0 +1,300 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ForkStateManager = void 0;
4
+ const ethereumjs_util_1 = require("@nomicfoundation/ethereumjs-util");
5
+ const immutable_1 = require("immutable");
6
+ const errors_1 = require("../../../core/errors");
7
+ const errors_2 = require("../../../core/providers/errors");
8
+ const keccak_1 = require("../../../util/keccak");
9
+ const makeAccount_1 = require("../utils/makeAccount");
10
+ const random_1 = require("../utils/random");
11
+ const AccountState_1 = require("./AccountState");
12
+ const encodeStorageKey = (address, position) => {
13
+ return `${address.toString("hex")}${(0, ethereumjs_util_1.unpadBuffer)(position).toString("hex")}`;
14
+ };
15
+ const checkpointedError = (method) => new Error(`${method} called when checkpointed`);
16
+ const notCheckpointedError = (method) => new Error(`${method} called when not checkpointed`);
17
+ const notSupportedError = (method) => new Error(`${method} is not supported when forking from remote network`);
18
+ class ForkStateManager {
19
+ constructor(_jsonRpcClient, _forkBlockNumber) {
20
+ this._jsonRpcClient = _jsonRpcClient;
21
+ this._forkBlockNumber = _forkBlockNumber;
22
+ this._state = (0, immutable_1.Map)();
23
+ this._initialStateRoot = (0, random_1.randomHash)();
24
+ this._stateRoot = this._initialStateRoot;
25
+ this._stateRootToState = new Map();
26
+ this._originalStorageCache = new Map();
27
+ this._stateCheckpoints = [];
28
+ this._contextBlockNumber = this._forkBlockNumber;
29
+ this._contextChanged = false;
30
+ this._state = (0, immutable_1.Map)();
31
+ this._stateRootToState.set(this._initialStateRoot, this._state);
32
+ }
33
+ async initializeGenesisAccounts(genesisAccounts) {
34
+ const accounts = [];
35
+ const noncesPromises = [];
36
+ for (const ga of genesisAccounts) {
37
+ const account = (0, makeAccount_1.makeAccount)(ga);
38
+ accounts.push(account);
39
+ const noncePromise = this._jsonRpcClient.getTransactionCount(account.address.toBuffer(), this._forkBlockNumber);
40
+ noncesPromises.push(noncePromise);
41
+ }
42
+ const nonces = await Promise.all(noncesPromises);
43
+ (0, errors_1.assertHardhatInvariant)(accounts.length === nonces.length, "Nonces and accounts should have the same length");
44
+ for (const [index, { address, account }] of accounts.entries()) {
45
+ const nonce = nonces[index];
46
+ account.nonce = nonce;
47
+ this._putAccount(address, account);
48
+ }
49
+ this._stateRootToState.set(this._initialStateRoot, this._state);
50
+ }
51
+ copy() {
52
+ const fsm = new ForkStateManager(this._jsonRpcClient, this._forkBlockNumber);
53
+ fsm._state = this._state;
54
+ fsm._stateRoot = this._stateRoot;
55
+ // because this map is append-only we don't need to copy it
56
+ fsm._stateRootToState = this._stateRootToState;
57
+ return fsm;
58
+ }
59
+ async getAccount(address) {
60
+ const localAccount = this._state.get(address.toString());
61
+ const localNonce = localAccount?.get("nonce");
62
+ const localBalance = localAccount?.get("balance");
63
+ const localCode = localAccount?.get("code");
64
+ let nonce = localNonce !== undefined ? (0, ethereumjs_util_1.toBuffer)(localNonce) : undefined;
65
+ let balance = localBalance !== undefined ? (0, ethereumjs_util_1.toBuffer)(localBalance) : undefined;
66
+ let code = localCode !== undefined ? (0, ethereumjs_util_1.toBuffer)(localCode) : undefined;
67
+ if (balance === undefined || nonce === undefined || code === undefined) {
68
+ const accountData = await this._jsonRpcClient.getAccountData(address, this._contextBlockNumber);
69
+ if (nonce === undefined) {
70
+ nonce = accountData.transactionCount;
71
+ }
72
+ if (balance === undefined) {
73
+ balance = accountData.balance;
74
+ }
75
+ if (code === undefined) {
76
+ code = accountData.code;
77
+ }
78
+ }
79
+ const codeHash = (0, keccak_1.keccak256)(code);
80
+ // We ignore stateRoot since we found that it is not used anywhere of interest to us
81
+ return ethereumjs_util_1.Account.fromAccountData({ nonce, balance, codeHash });
82
+ }
83
+ async putAccount(address, account) {
84
+ this._putAccount(address, account);
85
+ }
86
+ touchAccount(_address) {
87
+ // We don't do anything here. See cleanupTouchedAccounts for explanation
88
+ }
89
+ async putContractCode(address, value) {
90
+ const hexAddress = address.toString();
91
+ const account = (this._state.get(hexAddress) ?? (0, AccountState_1.makeAccountState)()).set("code", (0, ethereumjs_util_1.bufferToHex)(value));
92
+ this._state = this._state.set(hexAddress, account);
93
+ }
94
+ async getContractCode(address) {
95
+ const localCode = this._state.get(address.toString())?.get("code");
96
+ if (localCode !== undefined) {
97
+ return (0, ethereumjs_util_1.toBuffer)(localCode);
98
+ }
99
+ const accountData = await this._jsonRpcClient.getAccountData(address, this._contextBlockNumber);
100
+ return accountData.code;
101
+ }
102
+ async getContractStorage(address, key) {
103
+ if (key.length !== 32) {
104
+ throw new Error("Storage key must be 32 bytes long");
105
+ }
106
+ const account = this._state.get(address.toString());
107
+ const contractStorageCleared = account?.get("storageCleared") ?? false;
108
+ const localValue = account?.get("storage").get((0, ethereumjs_util_1.bufferToHex)(key));
109
+ if (localValue !== undefined) {
110
+ return (0, ethereumjs_util_1.toBuffer)(localValue);
111
+ }
112
+ const slotCleared = localValue === null;
113
+ if (contractStorageCleared || slotCleared) {
114
+ return (0, ethereumjs_util_1.toBuffer)([]);
115
+ }
116
+ const remoteValue = await this._jsonRpcClient.getStorageAt(address, (0, ethereumjs_util_1.bufferToBigInt)(key), this._contextBlockNumber);
117
+ return (0, ethereumjs_util_1.unpadBuffer)(remoteValue);
118
+ }
119
+ async putContractStorage(address, key, value) {
120
+ if (key.length !== 32) {
121
+ throw new Error("Storage key must be 32 bytes long");
122
+ }
123
+ if (value.length > 32) {
124
+ throw new Error("Storage value cannot be longer than 32 bytes");
125
+ }
126
+ const unpaddedValue = (0, ethereumjs_util_1.unpadBuffer)(value);
127
+ const hexAddress = address.toString();
128
+ let account = this._state.get(hexAddress) ?? (0, AccountState_1.makeAccountState)();
129
+ const currentStorage = account.get("storage");
130
+ let newValue;
131
+ if (unpaddedValue.length === 0) {
132
+ // if the value is an empty array or only zeros, the storage is deleted
133
+ newValue = null;
134
+ }
135
+ else {
136
+ newValue = (0, ethereumjs_util_1.bufferToHex)(unpaddedValue);
137
+ }
138
+ const newStorage = currentStorage.set((0, ethereumjs_util_1.bufferToHex)(key), newValue);
139
+ account = account.set("storage", newStorage);
140
+ this._state = this._state.set(hexAddress, account);
141
+ }
142
+ async clearContractStorage(address) {
143
+ const hexAddress = address.toString();
144
+ let account = this._state.get(hexAddress) ?? (0, AccountState_1.makeAccountState)();
145
+ account = account
146
+ .set("storageCleared", true)
147
+ .set("storage", (0, immutable_1.Map)());
148
+ this._state = this._state.set(hexAddress, account);
149
+ }
150
+ async checkpoint() {
151
+ const stateRoot = await this.getStateRoot();
152
+ this._stateCheckpoints.push((0, ethereumjs_util_1.bufferToHex)(stateRoot));
153
+ }
154
+ async commit() {
155
+ if (this._stateCheckpoints.length === 0) {
156
+ throw notCheckpointedError("commit");
157
+ }
158
+ this._stateCheckpoints.pop();
159
+ }
160
+ async revert() {
161
+ const checkpointedRoot = this._stateCheckpoints.pop();
162
+ if (checkpointedRoot === undefined) {
163
+ throw notCheckpointedError("revert");
164
+ }
165
+ await this.setStateRoot((0, ethereumjs_util_1.toBuffer)(checkpointedRoot));
166
+ }
167
+ async getStateRoot() {
168
+ if (this._stateRootToState.get(this._stateRoot) !== this._state) {
169
+ this._stateRoot = (0, random_1.randomHash)();
170
+ this._stateRootToState.set(this._stateRoot, this._state);
171
+ }
172
+ return (0, ethereumjs_util_1.toBuffer)(this._stateRoot);
173
+ }
174
+ async setStateRoot(stateRoot) {
175
+ this._setStateRoot(stateRoot);
176
+ }
177
+ async dumpStorage(_address) {
178
+ throw notSupportedError("dumpStorage");
179
+ }
180
+ async hasGenesisState() {
181
+ throw notSupportedError("hasGenesisState");
182
+ }
183
+ async generateCanonicalGenesis() {
184
+ throw notSupportedError("generateCanonicalGenesis");
185
+ }
186
+ async generateGenesis(_initState) {
187
+ throw notSupportedError("generateGenesis");
188
+ }
189
+ async accountIsEmpty(address) {
190
+ const account = await this.getAccount(address);
191
+ // From https://eips.ethereum.org/EIPS/eip-161
192
+ // An account is considered empty when it has no code and zero nonce and zero balance.
193
+ return (account.nonce === 0n &&
194
+ account.balance === 0n &&
195
+ account.codeHash.equals(ethereumjs_util_1.KECCAK256_NULL));
196
+ }
197
+ async cleanupTouchedAccounts() {
198
+ // We do not do anything here, because cleaning accounts only affects the
199
+ // stateRoot. Since the stateRoot is fake anyway there is no need to
200
+ // perform this operation.
201
+ }
202
+ setBlockContext(stateRoot, blockNumber, irregularState) {
203
+ if (this._stateCheckpoints.length !== 0) {
204
+ throw checkpointedError("setBlockContext");
205
+ }
206
+ if (irregularState !== undefined) {
207
+ this._setStateRoot(irregularState);
208
+ return;
209
+ }
210
+ if (blockNumber === this._forkBlockNumber) {
211
+ this._setStateRoot((0, ethereumjs_util_1.toBuffer)(this._initialStateRoot));
212
+ return;
213
+ }
214
+ if (blockNumber > this._forkBlockNumber) {
215
+ this._setStateRoot(stateRoot);
216
+ return;
217
+ }
218
+ this._contextChanged = true;
219
+ this._state = (0, immutable_1.Map)();
220
+ this._stateRoot = (0, ethereumjs_util_1.bufferToHex)(stateRoot);
221
+ this._stateRootToState.set(this._stateRoot, this._state);
222
+ this._contextBlockNumber = blockNumber;
223
+ // Note that we don't need to clear the original storage cache here
224
+ // because the VM does it before executing a message anyway.
225
+ }
226
+ restoreForkBlockContext(stateRoot) {
227
+ if (this._stateCheckpoints.length !== 0) {
228
+ throw checkpointedError("restoreForkBlockContext");
229
+ }
230
+ this._setStateRoot(stateRoot);
231
+ if (this._contextChanged) {
232
+ this._contextChanged = false;
233
+ this._contextBlockNumber = this._forkBlockNumber;
234
+ }
235
+ }
236
+ accountExists(_address) {
237
+ throw new errors_2.InternalError("Hardhat Network can't fork from networks running a hardfork older than Spurious Dragon");
238
+ }
239
+ async deleteAccount(address) {
240
+ // we set an empty account instead of deleting it to avoid
241
+ // re-fetching the state from the remote node.
242
+ // This is only valid post spurious dragon, but we don't support older hardforks when forking.
243
+ const emptyAccount = (0, AccountState_1.makeEmptyAccountState)();
244
+ this._state = this._state.set(address.toString(), emptyAccount);
245
+ }
246
+ clearOriginalStorageCache() {
247
+ this._originalStorageCache = new Map();
248
+ }
249
+ async getOriginalContractStorage(address, key) {
250
+ const storageKey = encodeStorageKey(address.toBuffer(), key);
251
+ const cachedValue = this._originalStorageCache.get(storageKey);
252
+ if (cachedValue !== undefined) {
253
+ return cachedValue;
254
+ }
255
+ const value = await this.getContractStorage(address, key);
256
+ this._originalStorageCache.set(storageKey, value);
257
+ return value;
258
+ }
259
+ _putAccount(address, account) {
260
+ // Because the vm only ever modifies the nonce, balance and codeHash using this
261
+ // method we ignore the stateRoot property
262
+ const hexAddress = address.toString();
263
+ let localAccount = this._state.get(hexAddress) ?? (0, AccountState_1.makeAccountState)();
264
+ localAccount = localAccount
265
+ .set("nonce", (0, ethereumjs_util_1.bigIntToHex)(account.nonce))
266
+ .set("balance", (0, ethereumjs_util_1.bigIntToHex)(account.balance));
267
+ // Code is set to empty string here to prevent unnecessary
268
+ // JsonRpcClient.getCode calls in getAccount method
269
+ if (account.codeHash.equals(ethereumjs_util_1.KECCAK256_NULL)) {
270
+ localAccount = localAccount.set("code", "0x");
271
+ }
272
+ this._state = this._state.set(hexAddress, localAccount);
273
+ }
274
+ _setStateRoot(stateRoot) {
275
+ const newRoot = (0, ethereumjs_util_1.bufferToHex)(stateRoot);
276
+ const state = this._stateRootToState.get(newRoot);
277
+ if (state === undefined) {
278
+ throw new Error("Unknown state root");
279
+ }
280
+ this._stateRoot = newRoot;
281
+ this._state = state;
282
+ }
283
+ async hasStateRoot(root) {
284
+ return this._state.has((0, ethereumjs_util_1.bufferToHex)(root));
285
+ }
286
+ async flush() {
287
+ // not implemented
288
+ }
289
+ async modifyAccountFields(address, accountFields) {
290
+ // copied from BaseStateManager
291
+ const account = await this.getAccount(address);
292
+ account.nonce = accountFields.nonce ?? account.nonce;
293
+ account.balance = accountFields.balance ?? account.balance;
294
+ account.storageRoot = accountFields.storageRoot ?? account.storageRoot;
295
+ account.codeHash = accountFields.codeHash ?? account.codeHash;
296
+ await this.putAccount(address, account);
297
+ }
298
+ }
299
+ exports.ForkStateManager = ForkStateManager;
300
+ //# sourceMappingURL=ForkStateManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ForkStateManager.js","sourceRoot":"","sources":["../../../../src/internal/hardhat-network/provider/fork/ForkStateManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { BlockData } from "@nomicfoundation/ethereumjs-block";
2
+ import { RpcBlockWithTransactions } from "../../../core/jsonrpc/types/output/block";
3
+ export declare function rpcToBlockData(rpcBlock: RpcBlockWithTransactions): BlockData;
4
+ //# sourceMappingURL=rpcToBlockData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpcToBlockData.d.ts","sourceRoot":"","sources":["../../../../src/internal/hardhat-network/provider/fork/rpcToBlockData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAE9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAC;AAIpF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,wBAAwB,GAAG,SAAS,CAyB5E"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rpcToBlockData = void 0;
4
+ const rpcToTxData_1 = require("./rpcToTxData");
5
+ function rpcToBlockData(rpcBlock) {
6
+ return {
7
+ header: {
8
+ parentHash: rpcBlock.parentHash,
9
+ uncleHash: rpcBlock.sha3Uncles,
10
+ coinbase: rpcBlock.miner,
11
+ stateRoot: rpcBlock.stateRoot,
12
+ transactionsTrie: rpcBlock.transactionsRoot,
13
+ receiptTrie: rpcBlock.receiptsRoot,
14
+ logsBloom: rpcBlock.logsBloom,
15
+ difficulty: rpcBlock.difficulty,
16
+ number: rpcBlock.number ?? undefined,
17
+ gasLimit: rpcBlock.gasLimit,
18
+ gasUsed: rpcBlock.gasUsed,
19
+ timestamp: rpcBlock.timestamp,
20
+ extraData: rpcBlock.extraData,
21
+ mixHash: rpcBlock.mixHash,
22
+ nonce: rpcBlock.nonce,
23
+ baseFeePerGas: rpcBlock.baseFeePerGas,
24
+ withdrawalsRoot: rpcBlock.withdrawalsRoot,
25
+ },
26
+ transactions: rpcBlock.transactions.map(rpcToTxData_1.rpcToTxData),
27
+ withdrawals: rpcBlock.withdrawals,
28
+ // uncleHeaders are not fetched and set here as provider methods for getting them are not supported
29
+ };
30
+ }
31
+ exports.rpcToBlockData = rpcToBlockData;
32
+ //# sourceMappingURL=rpcToBlockData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpcToBlockData.js","sourceRoot":"","sources":["../../../../src/internal/hardhat-network/provider/fork/rpcToBlockData.ts"],"names":[],"mappings":";;;AAIA,+CAA4C;AAE5C,SAAgB,cAAc,CAAC,QAAkC;IAC/D,OAAO;QACL,MAAM,EAAE;YACN,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,SAAS,EAAE,QAAQ,CAAC,UAAU;YAC9B,QAAQ,EAAE,QAAQ,CAAC,KAAK;YACxB,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,gBAAgB,EAAE,QAAQ,CAAC,gBAAgB;YAC3C,WAAW,EAAE,QAAQ,CAAC,YAAY;YAClC,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,SAAS;YACpC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,aAAa,EAAE,QAAQ,CAAC,aAAa;YACrC,eAAe,EAAE,QAAQ,CAAC,eAAe;SAC1C;QACD,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,yBAAW,CAAC;QACpD,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,mGAAmG;KACpG,CAAC;AACJ,CAAC;AAzBD,wCAyBC"}
@@ -0,0 +1,10 @@
1
+ import type { BigIntLike } from "@nomicfoundation/ethereumjs-util";
2
+ import { AccessListEIP2930TxData, TxData } from "@nomicfoundation/ethereumjs-tx";
3
+ import { RpcTransaction } from "../../../core/jsonrpc/types/output/transaction";
4
+ interface FeeMarketEIP1559TxData extends AccessListEIP2930TxData {
5
+ maxPriorityFeePerGas?: BigIntLike;
6
+ maxFeePerGas?: BigIntLike;
7
+ }
8
+ export declare function rpcToTxData(rpcTransaction: RpcTransaction): TxData | AccessListEIP2930TxData | FeeMarketEIP1559TxData;
9
+ export {};
10
+ //# sourceMappingURL=rpcToTxData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpcToTxData.d.ts","sourceRoot":"","sources":["../../../../src/internal/hardhat-network/provider/fork/rpcToTxData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAEnE,OAAO,EACL,uBAAuB,EACvB,MAAM,EACP,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAKhF,UAAU,sBAAuB,SAAQ,uBAAuB;IAC9D,oBAAoB,CAAC,EAAE,UAAU,CAAC;IAClC,YAAY,CAAC,EAAE,UAAU,CAAC;CAC3B;AAED,wBAAgB,WAAW,CACzB,cAAc,EAAE,cAAc,GAC7B,MAAM,GAAG,uBAAuB,GAAG,sBAAsB,CAwB3D"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rpcToTxData = void 0;
4
+ function rpcToTxData(rpcTransaction) {
5
+ const isEip1559 = rpcTransaction.type === 2n;
6
+ return {
7
+ gasLimit: rpcTransaction.gas,
8
+ // NOTE: RPC EIP-1559 txs still have this field for backwards compatibility,
9
+ // but FeeMarketEIP1559TxData doesn't.
10
+ gasPrice: isEip1559 ? undefined : rpcTransaction.gasPrice,
11
+ to: rpcTransaction.to ?? undefined,
12
+ nonce: rpcTransaction.nonce,
13
+ data: rpcTransaction.input,
14
+ v: rpcTransaction.v,
15
+ r: rpcTransaction.r,
16
+ s: rpcTransaction.s,
17
+ value: rpcTransaction.value,
18
+ type: rpcTransaction.type,
19
+ chainId: rpcTransaction.chainId ?? undefined,
20
+ maxFeePerGas: rpcTransaction.maxFeePerGas,
21
+ maxPriorityFeePerGas: rpcTransaction.maxPriorityFeePerGas,
22
+ accessList: rpcTransaction.accessList?.map((item) => [
23
+ item.address,
24
+ item.storageKeys ?? [],
25
+ ]),
26
+ };
27
+ }
28
+ exports.rpcToTxData = rpcToTxData;
29
+ //# sourceMappingURL=rpcToTxData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpcToTxData.js","sourceRoot":"","sources":["../../../../src/internal/hardhat-network/provider/fork/rpcToTxData.ts"],"names":[],"mappings":";;;AAiBA,SAAgB,WAAW,CACzB,cAA8B;IAE9B,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,KAAK,EAAE,CAAC;IAE7C,OAAO;QACL,QAAQ,EAAE,cAAc,CAAC,GAAG;QAC5B,4EAA4E;QAC5E,uCAAuC;QACvC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ;QACzD,EAAE,EAAE,cAAc,CAAC,EAAE,IAAI,SAAS;QAClC,KAAK,EAAE,cAAc,CAAC,KAAK;QAC3B,IAAI,EAAE,cAAc,CAAC,KAAK;QAC1B,CAAC,EAAE,cAAc,CAAC,CAAC;QACnB,CAAC,EAAE,cAAc,CAAC,CAAC;QACnB,CAAC,EAAE,cAAc,CAAC,CAAC;QACnB,KAAK,EAAE,cAAc,CAAC,KAAK;QAC3B,IAAI,EAAE,cAAc,CAAC,IAAI;QACzB,OAAO,EAAE,cAAc,CAAC,OAAO,IAAI,SAAS;QAC5C,YAAY,EAAE,cAAc,CAAC,YAAY;QACzC,oBAAoB,EAAE,cAAc,CAAC,oBAAoB;QACzD,UAAU,EAAE,cAAc,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACnD,IAAI,CAAC,OAAO;YACZ,IAAI,CAAC,WAAW,IAAI,EAAE;SACvB,CAAC;KACH,CAAC;AACJ,CAAC;AA1BD,kCA0BC"}
@@ -0,0 +1,17 @@
1
+ /// <reference types="node" />
2
+ import { OptionalRpcNewBlockTag, RpcNewBlockTag } from "../../../core/jsonrpc/types/input/blockTag";
3
+ import { HardhatNode } from "../node";
4
+ import { RpcCallRequest } from "../../../core/jsonrpc/types/input/callRequest";
5
+ import { CallParams } from "../node-types";
6
+ import { RpcAccessList } from "../../../core/jsonrpc/types/access-list";
7
+ export declare class Base {
8
+ protected readonly _node: HardhatNode;
9
+ constructor(_node: HardhatNode);
10
+ resolveNewBlockTag(newBlockTag: OptionalRpcNewBlockTag, defaultValue?: RpcNewBlockTag): Promise<bigint | "pending">;
11
+ rpcCallRequestToNodeCallParams(rpcCall: RpcCallRequest): Promise<CallParams>;
12
+ protected _rpcAccessListToNodeAccessList(rpcAccessList: RpcAccessList): Array<[Buffer, Buffer[]]>;
13
+ protected _checkPostMergeBlockTags(blockTag: "safe" | "finalized"): void;
14
+ protected _newBlockTagToString(tag: RpcNewBlockTag): string;
15
+ private _getDefaultCallFrom;
16
+ }
17
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/internal/hardhat-network/provider/modules/base.ts"],"names":[],"mappings":";AAMA,OAAO,EACL,sBAAsB,EACtB,cAAc,EACf,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAMtC,OAAO,EAAE,cAAc,EAAE,MAAM,+CAA+C,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAIxE,qBAAa,IAAI;IACH,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW;gBAAlB,KAAK,EAAE,WAAW;IAEpC,kBAAkB,CAC7B,WAAW,EAAE,sBAAsB,EACnC,YAAY,GAAE,cAAyB,GACtC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IA2DjB,8BAA8B,CACzC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,UAAU,CAAC;IAqBtB,SAAS,CAAC,8BAA8B,CACtC,aAAa,EAAE,aAAa,GAC3B,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAO5B,SAAS,CAAC,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW;IAWjE,SAAS,CAAC,oBAAoB,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM;YAgB7C,mBAAmB;CASlC"}
@@ -0,0 +1,127 @@
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.Base = void 0;
27
+ const ethereumjs_util_1 = require("@nomicfoundation/ethereumjs-util");
28
+ const BigIntUtils = __importStar(require("../../../util/bigint"));
29
+ const errors_1 = require("../../../core/providers/errors");
30
+ /* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */
31
+ class Base {
32
+ constructor(_node) {
33
+ this._node = _node;
34
+ }
35
+ async resolveNewBlockTag(newBlockTag, defaultValue = "latest") {
36
+ if (newBlockTag === undefined) {
37
+ newBlockTag = defaultValue;
38
+ }
39
+ if (newBlockTag === "pending") {
40
+ return "pending";
41
+ }
42
+ if (newBlockTag === "latest") {
43
+ return this._node.getLatestBlockNumber();
44
+ }
45
+ if (newBlockTag === "earliest") {
46
+ return 0n;
47
+ }
48
+ if (newBlockTag === "safe" || newBlockTag === "finalized") {
49
+ this._checkPostMergeBlockTags(newBlockTag);
50
+ return this._node.getLatestBlockNumber();
51
+ }
52
+ if (!BigIntUtils.isBigInt(newBlockTag)) {
53
+ if ("blockNumber" in newBlockTag && "blockHash" in newBlockTag) {
54
+ throw new errors_1.InvalidArgumentsError("Invalid block tag received. Only one of hash or block number can be used.");
55
+ }
56
+ if ("blockNumber" in newBlockTag && "requireCanonical" in newBlockTag) {
57
+ throw new errors_1.InvalidArgumentsError("Invalid block tag received. requireCanonical only works with hashes.");
58
+ }
59
+ }
60
+ let block;
61
+ if (BigIntUtils.isBigInt(newBlockTag)) {
62
+ block = await this._node.getBlockByNumber(newBlockTag);
63
+ }
64
+ else if ("blockNumber" in newBlockTag) {
65
+ block = await this._node.getBlockByNumber(newBlockTag.blockNumber);
66
+ }
67
+ else {
68
+ block = await this._node.getBlockByHash(newBlockTag.blockHash);
69
+ }
70
+ if (block === undefined) {
71
+ const latestBlock = this._node.getLatestBlockNumber();
72
+ throw new errors_1.InvalidInputError(`Received invalid block tag ${this._newBlockTagToString(newBlockTag)}. Latest block number is ${latestBlock.toString()}`);
73
+ }
74
+ return block.header.number;
75
+ }
76
+ async rpcCallRequestToNodeCallParams(rpcCall) {
77
+ return {
78
+ to: rpcCall.to,
79
+ from: rpcCall.from !== undefined
80
+ ? rpcCall.from
81
+ : await this._getDefaultCallFrom(),
82
+ data: rpcCall.data !== undefined ? rpcCall.data : (0, ethereumjs_util_1.toBuffer)([]),
83
+ gasLimit: rpcCall.gas !== undefined ? rpcCall.gas : this._node.getBlockGasLimit(),
84
+ value: rpcCall.value !== undefined ? rpcCall.value : 0n,
85
+ accessList: rpcCall.accessList !== undefined
86
+ ? this._rpcAccessListToNodeAccessList(rpcCall.accessList)
87
+ : undefined,
88
+ gasPrice: rpcCall.gasPrice,
89
+ maxFeePerGas: rpcCall.maxFeePerGas,
90
+ maxPriorityFeePerGas: rpcCall.maxPriorityFeePerGas,
91
+ };
92
+ }
93
+ _rpcAccessListToNodeAccessList(rpcAccessList) {
94
+ return rpcAccessList.map((tuple) => [
95
+ tuple.address,
96
+ tuple.storageKeys ?? [],
97
+ ]);
98
+ }
99
+ _checkPostMergeBlockTags(blockTag) {
100
+ const isPostMerge = this._node.isPostMergeHardfork();
101
+ const hardfork = this._node.hardfork;
102
+ if (!isPostMerge) {
103
+ throw new errors_1.InvalidArgumentsError(`The '${blockTag}' block tag is not allowed in pre-merge hardforks. You are using the '${hardfork}' hardfork.`);
104
+ }
105
+ }
106
+ _newBlockTagToString(tag) {
107
+ if (typeof tag === "string") {
108
+ return tag;
109
+ }
110
+ if (BigIntUtils.isBigInt(tag)) {
111
+ return tag.toString();
112
+ }
113
+ if ("blockNumber" in tag) {
114
+ return tag.blockNumber.toString();
115
+ }
116
+ return (0, ethereumjs_util_1.bufferToHex)(tag.blockHash);
117
+ }
118
+ async _getDefaultCallFrom() {
119
+ const localAccounts = await this._node.getLocalAccountAddresses();
120
+ if (localAccounts.length === 0) {
121
+ return (0, ethereumjs_util_1.toBuffer)((0, ethereumjs_util_1.zeroAddress)());
122
+ }
123
+ return (0, ethereumjs_util_1.toBuffer)(localAccounts[0]);
124
+ }
125
+ }
126
+ exports.Base = Base;
127
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/internal/hardhat-network/provider/modules/base.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,sEAI0C;AAM1C,kEAAoD;AACpD,2DAGwC;AAKxC,+EAA+E;AAE/E,MAAa,IAAI;IACf,YAA+B,KAAkB;QAAlB,UAAK,GAAL,KAAK,CAAa;IAAG,CAAC;IAE9C,KAAK,CAAC,kBAAkB,CAC7B,WAAmC,EACnC,eAA+B,QAAQ;QAEvC,IAAI,WAAW,KAAK,SAAS,EAAE;YAC7B,WAAW,GAAG,YAAY,CAAC;SAC5B;QAED,IAAI,WAAW,KAAK,SAAS,EAAE;YAC7B,OAAO,SAAS,CAAC;SAClB;QAED,IAAI,WAAW,KAAK,QAAQ,EAAE;YAC5B,OAAO,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;SAC1C;QAED,IAAI,WAAW,KAAK,UAAU,EAAE;YAC9B,OAAO,EAAE,CAAC;SACX;QAED,IAAI,WAAW,KAAK,MAAM,IAAI,WAAW,KAAK,WAAW,EAAE;YACzD,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC;YAE3C,OAAO,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;SAC1C;QAED,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;YACtC,IAAI,aAAa,IAAI,WAAW,IAAI,WAAW,IAAI,WAAW,EAAE;gBAC9D,MAAM,IAAI,8BAAqB,CAC7B,2EAA2E,CAC5E,CAAC;aACH;YAED,IAAI,aAAa,IAAI,WAAW,IAAI,kBAAkB,IAAI,WAAW,EAAE;gBACrE,MAAM,IAAI,8BAAqB,CAC7B,sEAAsE,CACvE,CAAC;aACH;SACF;QAED,IAAI,KAAwB,CAAC;QAC7B,IAAI,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;YACrC,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;SACxD;aAAM,IAAI,aAAa,IAAI,WAAW,EAAE;YACvC,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;SACpE;aAAM;YACL,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;SAChE;QAED,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;YAEtD,MAAM,IAAI,0BAAiB,CACzB,8BAA8B,IAAI,CAAC,oBAAoB,CACrD,WAAW,CACZ,4BAA4B,WAAW,CAAC,QAAQ,EAAE,EAAE,CACtD,CAAC;SACH;QAED,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;IAC7B,CAAC;IAEM,KAAK,CAAC,8BAA8B,CACzC,OAAuB;QAEvB,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EACF,OAAO,CAAC,IAAI,KAAK,SAAS;gBACxB,CAAC,CAAC,OAAO,CAAC,IAAI;gBACd,CAAC,CAAC,MAAM,IAAI,CAAC,mBAAmB,EAAE;YACtC,IAAI,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,0BAAQ,EAAC,EAAE,CAAC;YAC9D,QAAQ,EACN,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;YACzE,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACvD,UAAU,EACR,OAAO,CAAC,UAAU,KAAK,SAAS;gBAC9B,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,OAAO,CAAC,UAAU,CAAC;gBACzD,CAAC,CAAC,SAAS;YACf,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,oBAAoB,EAAE,OAAO,CAAC,oBAAoB;SACnD,CAAC;IACJ,CAAC;IAES,8BAA8B,CACtC,aAA4B;QAE5B,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YAClC,KAAK,CAAC,OAAO;YACb,KAAK,CAAC,WAAW,IAAI,EAAE;SACxB,CAAC,CAAC;IACL,CAAC;IAES,wBAAwB,CAAC,QAA8B;QAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;QAErC,IAAI,CAAC,WAAW,EAAE;YAChB,MAAM,IAAI,8BAAqB,CAC7B,QAAQ,QAAQ,yEAAyE,QAAQ,aAAa,CAC/G,CAAC;SACH;IACH,CAAC;IAES,oBAAoB,CAAC,GAAmB;QAChD,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,OAAO,GAAG,CAAC;SACZ;QAED,IAAI,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC7B,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;SACvB;QAED,IAAI,aAAa,IAAI,GAAG,EAAE;YACxB,OAAO,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;SACnC;QAED,OAAO,IAAA,6BAAW,EAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAEO,KAAK,CAAC,mBAAmB;QAC/B,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC;QAElE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,OAAO,IAAA,0BAAQ,EAAC,IAAA,6BAAW,GAAE,CAAC,CAAC;SAChC;QAED,OAAO,IAAA,0BAAQ,EAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;CACF;AArID,oBAqIC"}
@@ -0,0 +1,12 @@
1
+ import { HardhatNode } from "../node";
2
+ import { Base } from "./base";
3
+ export declare class DebugModule extends Base {
4
+ constructor(_node: HardhatNode);
5
+ processRequest(method: string, params?: any[]): Promise<any>;
6
+ private _traceCallParams;
7
+ private _traceCallAction;
8
+ private _traceTransactionParams;
9
+ private _traceTransactionAction;
10
+ private _validateTracerParam;
11
+ }
12
+ //# sourceMappingURL=debug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../../../src/internal/hardhat-network/provider/modules/debug.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAI9B,qBAAa,WAAY,SAAQ,IAAI;gBACvB,KAAK,EAAE,WAAW;IAIjB,cAAc,CACzB,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,GAAG,EAAO,GACjB,OAAO,CAAC,GAAG,CAAC;IAef,OAAO,CAAC,gBAAgB;YAeV,gBAAgB;IAa9B,OAAO,CAAC,uBAAuB;YAcjB,uBAAuB;IAOrC,OAAO,CAAC,oBAAoB;CAO7B"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DebugModule = void 0;
4
+ const base_types_1 = require("../../../core/jsonrpc/types/base-types");
5
+ const blockTag_1 = require("../../../core/jsonrpc/types/input/blockTag");
6
+ const callRequest_1 = require("../../../core/jsonrpc/types/input/callRequest");
7
+ const debugTraceTransaction_1 = require("../../../core/jsonrpc/types/input/debugTraceTransaction");
8
+ const validation_1 = require("../../../core/jsonrpc/types/input/validation");
9
+ const errors_1 = require("../../../core/providers/errors");
10
+ const base_1 = require("./base");
11
+ /* eslint-disable @nomicfoundation/hardhat-internal-rules/only-hardhat-error */
12
+ class DebugModule extends base_1.Base {
13
+ constructor(_node) {
14
+ super(_node);
15
+ }
16
+ async processRequest(method, params = []) {
17
+ switch (method) {
18
+ case "debug_traceCall":
19
+ return this._traceCallAction(...this._traceCallParams(params));
20
+ case "debug_traceTransaction":
21
+ return this._traceTransactionAction(...this._traceTransactionParams(params));
22
+ }
23
+ throw new errors_1.MethodNotFoundError(`Method ${method} not found`);
24
+ }
25
+ // debug_traceCall
26
+ _traceCallParams(params) {
27
+ const validatedParams = (0, validation_1.validateParams)(params, callRequest_1.rpcCallRequest, blockTag_1.optionalRpcNewBlockTag, debugTraceTransaction_1.rpcDebugTracingConfig);
28
+ this._validateTracerParam(validatedParams[2]);
29
+ return validatedParams;
30
+ }
31
+ async _traceCallAction(callConfig, block, traceConfig) {
32
+ const callParams = await this.rpcCallRequestToNodeCallParams(callConfig);
33
+ const blockNumber = await this.resolveNewBlockTag(block);
34
+ return this._node.traceCall(callParams, blockNumber, traceConfig);
35
+ }
36
+ // debug_traceTransaction
37
+ _traceTransactionParams(params) {
38
+ const validatedParams = (0, validation_1.validateParams)(params, base_types_1.rpcHash, debugTraceTransaction_1.rpcDebugTracingConfig);
39
+ this._validateTracerParam(validatedParams[1]);
40
+ return validatedParams;
41
+ }
42
+ async _traceTransactionAction(hash, config) {
43
+ return this._node.traceTransaction(hash, config);
44
+ }
45
+ _validateTracerParam(config) {
46
+ if (config?.tracer !== undefined) {
47
+ throw new errors_1.InvalidArgumentsError("Hardhat currently only supports the default tracer, so no tracer parameter should be passed.");
48
+ }
49
+ }
50
+ }
51
+ exports.DebugModule = DebugModule;
52
+ //# sourceMappingURL=debug.js.map