@feelyourprotocol/vm 8141.0.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 (115) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +583 -0
  3. package/dist/cjs/bloom/index.d.ts +29 -0
  4. package/dist/cjs/bloom/index.d.ts.map +1 -0
  5. package/dist/cjs/bloom/index.js +76 -0
  6. package/dist/cjs/bloom/index.js.map +1 -0
  7. package/dist/cjs/buildBlock.d.ts +118 -0
  8. package/dist/cjs/buildBlock.d.ts.map +1 -0
  9. package/dist/cjs/buildBlock.js +363 -0
  10. package/dist/cjs/buildBlock.js.map +1 -0
  11. package/dist/cjs/constructors.d.ts +9 -0
  12. package/dist/cjs/constructors.d.ts.map +1 -0
  13. package/dist/cjs/constructors.js +75 -0
  14. package/dist/cjs/constructors.js.map +1 -0
  15. package/dist/cjs/emitEVMProfile.d.ts +9 -0
  16. package/dist/cjs/emitEVMProfile.d.ts.map +1 -0
  17. package/dist/cjs/emitEVMProfile.js +130 -0
  18. package/dist/cjs/emitEVMProfile.js.map +1 -0
  19. package/dist/cjs/index.d.ts +11 -0
  20. package/dist/cjs/index.d.ts.map +1 -0
  21. package/dist/cjs/index.js +36 -0
  22. package/dist/cjs/index.js.map +1 -0
  23. package/dist/cjs/package.json +3 -0
  24. package/dist/cjs/params.d.ts +3 -0
  25. package/dist/cjs/params.d.ts.map +1 -0
  26. package/dist/cjs/params.js +105 -0
  27. package/dist/cjs/params.js.map +1 -0
  28. package/dist/cjs/requests.d.ts +11 -0
  29. package/dist/cjs/requests.d.ts.map +1 -0
  30. package/dist/cjs/requests.js +208 -0
  31. package/dist/cjs/requests.js.map +1 -0
  32. package/dist/cjs/runBlock.d.ts +35 -0
  33. package/dist/cjs/runBlock.d.ts.map +1 -0
  34. package/dist/cjs/runBlock.js +797 -0
  35. package/dist/cjs/runBlock.js.map +1 -0
  36. package/dist/cjs/runFrameTx.d.ts +18 -0
  37. package/dist/cjs/runFrameTx.d.ts.map +1 -0
  38. package/dist/cjs/runFrameTx.js +313 -0
  39. package/dist/cjs/runFrameTx.js.map +1 -0
  40. package/dist/cjs/runTx.d.ts +18 -0
  41. package/dist/cjs/runTx.d.ts.map +1 -0
  42. package/dist/cjs/runTx.js +900 -0
  43. package/dist/cjs/runTx.js.map +1 -0
  44. package/dist/cjs/types.d.ts +452 -0
  45. package/dist/cjs/types.d.ts.map +1 -0
  46. package/dist/cjs/types.js +3 -0
  47. package/dist/cjs/types.js.map +1 -0
  48. package/dist/cjs/vm.d.ts +75 -0
  49. package/dist/cjs/vm.d.ts.map +1 -0
  50. package/dist/cjs/vm.js +111 -0
  51. package/dist/cjs/vm.js.map +1 -0
  52. package/dist/esm/bloom/index.d.ts +29 -0
  53. package/dist/esm/bloom/index.d.ts.map +1 -0
  54. package/dist/esm/bloom/index.js +72 -0
  55. package/dist/esm/bloom/index.js.map +1 -0
  56. package/dist/esm/buildBlock.d.ts +118 -0
  57. package/dist/esm/buildBlock.d.ts.map +1 -0
  58. package/dist/esm/buildBlock.js +358 -0
  59. package/dist/esm/buildBlock.js.map +1 -0
  60. package/dist/esm/constructors.d.ts +9 -0
  61. package/dist/esm/constructors.d.ts.map +1 -0
  62. package/dist/esm/constructors.js +72 -0
  63. package/dist/esm/constructors.js.map +1 -0
  64. package/dist/esm/emitEVMProfile.d.ts +9 -0
  65. package/dist/esm/emitEVMProfile.d.ts.map +1 -0
  66. package/dist/esm/emitEVMProfile.js +127 -0
  67. package/dist/esm/emitEVMProfile.js.map +1 -0
  68. package/dist/esm/index.d.ts +11 -0
  69. package/dist/esm/index.d.ts.map +1 -0
  70. package/dist/esm/index.js +11 -0
  71. package/dist/esm/index.js.map +1 -0
  72. package/dist/esm/package.json +3 -0
  73. package/dist/esm/params.d.ts +3 -0
  74. package/dist/esm/params.d.ts.map +1 -0
  75. package/dist/esm/params.js +102 -0
  76. package/dist/esm/params.js.map +1 -0
  77. package/dist/esm/requests.d.ts +11 -0
  78. package/dist/esm/requests.d.ts.map +1 -0
  79. package/dist/esm/requests.js +204 -0
  80. package/dist/esm/requests.js.map +1 -0
  81. package/dist/esm/runBlock.d.ts +35 -0
  82. package/dist/esm/runBlock.d.ts.map +1 -0
  83. package/dist/esm/runBlock.js +790 -0
  84. package/dist/esm/runBlock.js.map +1 -0
  85. package/dist/esm/runFrameTx.d.ts +18 -0
  86. package/dist/esm/runFrameTx.d.ts.map +1 -0
  87. package/dist/esm/runFrameTx.js +310 -0
  88. package/dist/esm/runFrameTx.js.map +1 -0
  89. package/dist/esm/runTx.d.ts +18 -0
  90. package/dist/esm/runTx.d.ts.map +1 -0
  91. package/dist/esm/runTx.js +896 -0
  92. package/dist/esm/runTx.js.map +1 -0
  93. package/dist/esm/types.d.ts +452 -0
  94. package/dist/esm/types.d.ts.map +1 -0
  95. package/dist/esm/types.js +2 -0
  96. package/dist/esm/types.js.map +1 -0
  97. package/dist/esm/vm.d.ts +75 -0
  98. package/dist/esm/vm.d.ts.map +1 -0
  99. package/dist/esm/vm.js +107 -0
  100. package/dist/esm/vm.js.map +1 -0
  101. package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
  102. package/dist/tsconfig.prod.esm.tsbuildinfo +1 -0
  103. package/package.json +117 -0
  104. package/src/bloom/index.ts +83 -0
  105. package/src/buildBlock.ts +470 -0
  106. package/src/constructors.ts +91 -0
  107. package/src/emitEVMProfile.ts +151 -0
  108. package/src/index.ts +10 -0
  109. package/src/params.ts +104 -0
  110. package/src/requests.ts +293 -0
  111. package/src/runBlock.ts +1022 -0
  112. package/src/runFrameTx.ts +411 -0
  113. package/src/runTx.ts +1203 -0
  114. package/src/types.ts +511 -0
  115. package/src/vm.ts +147 -0
@@ -0,0 +1,358 @@
1
+ import { createBlock, createSealedCliqueBlock, genRequestsRoot, genTransactionsTrieRoot, genWithdrawalsTrieRoot, } from '@feelyourprotocol/block';
2
+ import { ConsensusType, Hardfork } from '@feelyourprotocol/common';
3
+ import { MerklePatriciaTrie } from '@feelyourprotocol/mpt';
4
+ import { RLP } from '@feelyourprotocol/rlp';
5
+ import { Blob4844Tx, NetworkWrapperType, createMinimal4844TxFromNetworkWrapper, } from '@feelyourprotocol/tx';
6
+ import { Address, BIGINT_0, BIGINT_1, BIGINT_2, EthereumJSErrorWithoutCode, GWEI_TO_WEI, KECCAK256_RLP, TypeOutput, createWithdrawal, createZeroAddress, toBytes, toType, } from '@feelyourprotocol/util';
7
+ import { sha256 } from '@noble/hashes/sha2.js';
8
+ import { Bloom } from "./bloom/index.js";
9
+ import { runTx } from "./index.js";
10
+ import { accumulateRequests } from "./requests.js";
11
+ import { accumulateParentBeaconBlockRoot, accumulateParentBlockHash, calculateMinerReward, encodeReceipt, rewardAccount, } from "./runBlock.js";
12
+ export const BuildStatus = {
13
+ Reverted: 'reverted',
14
+ Build: 'build',
15
+ Pending: 'pending',
16
+ };
17
+ export class BlockBuilder {
18
+ get transactionReceipts() {
19
+ return this.transactionResults.map((result) => result.receipt);
20
+ }
21
+ get minerValue() {
22
+ return this._minerValue;
23
+ }
24
+ constructor(vm, opts) {
25
+ /**
26
+ * The cumulative gas used by the transactions added to the block.
27
+ */
28
+ this.gasUsed = BIGINT_0;
29
+ /**
30
+ * The cumulative blob gas used by the blobs in a block
31
+ */
32
+ this.blobGasUsed = BIGINT_0;
33
+ /**
34
+ * Value of the block, represented by the final transaction fees
35
+ * accruing to the miner.
36
+ */
37
+ this._minerValue = BIGINT_0;
38
+ this.transactions = [];
39
+ this.transactionResults = [];
40
+ this.checkpointed = false;
41
+ this.blockStatus = { status: BuildStatus.Pending };
42
+ this.vm = vm;
43
+ this.blockOpts = { putBlockIntoBlockchain: true, ...opts.blockOpts, common: this.vm.common };
44
+ this.headerData = {
45
+ ...opts.headerData,
46
+ parentHash: opts.headerData?.parentHash ?? opts.parentBlock.hash(),
47
+ number: opts.headerData?.number ?? opts.parentBlock.header.number + BIGINT_1,
48
+ gasLimit: opts.headerData?.gasLimit ?? opts.parentBlock.header.gasLimit,
49
+ timestamp: opts.headerData?.timestamp ?? Math.round(Date.now() / 1000),
50
+ };
51
+ this.withdrawals = opts.withdrawals?.map(createWithdrawal);
52
+ if (this.vm.common.isActivatedEIP(1559) &&
53
+ typeof this.headerData.baseFeePerGas === 'undefined') {
54
+ if (this.headerData.number === vm.common.hardforkBlock(Hardfork.London)) {
55
+ this.headerData.baseFeePerGas = vm.common.param('initialBaseFee');
56
+ }
57
+ else {
58
+ this.headerData.baseFeePerGas = opts.parentBlock.header.calcNextBaseFee();
59
+ }
60
+ }
61
+ if (typeof this.headerData.gasLimit === 'undefined') {
62
+ if (this.headerData.number === vm.common.hardforkBlock(Hardfork.London)) {
63
+ this.headerData.gasLimit = opts.parentBlock.header.gasLimit * BIGINT_2;
64
+ }
65
+ else {
66
+ this.headerData.gasLimit = opts.parentBlock.header.gasLimit;
67
+ }
68
+ }
69
+ if (this.vm.common.isActivatedEIP(4844) &&
70
+ typeof this.headerData.excessBlobGas === 'undefined') {
71
+ this.headerData.excessBlobGas = opts.parentBlock.header.calcNextExcessBlobGas(this.vm.common);
72
+ }
73
+ }
74
+ /**
75
+ * Throws if the block has already been built or reverted.
76
+ */
77
+ checkStatus() {
78
+ if (this.blockStatus.status === BuildStatus.Build) {
79
+ throw EthereumJSErrorWithoutCode('Block has already been built');
80
+ }
81
+ if (this.blockStatus.status === BuildStatus.Reverted) {
82
+ throw EthereumJSErrorWithoutCode('State has already been reverted');
83
+ }
84
+ }
85
+ getStatus() {
86
+ return this.blockStatus;
87
+ }
88
+ /**
89
+ * Calculates and returns the transactionsTrie for the block.
90
+ */
91
+ async transactionsTrie() {
92
+ return genTransactionsTrieRoot(this.transactions, new MerklePatriciaTrie({ common: this.vm.common }));
93
+ }
94
+ /**
95
+ * Calculates and returns the logs bloom for the block.
96
+ */
97
+ logsBloom() {
98
+ const bloom = new Bloom(undefined, this.vm.common);
99
+ for (const txResult of this.transactionResults) {
100
+ // Combine blooms via bitwise OR
101
+ bloom.or(txResult.bloom);
102
+ }
103
+ return bloom.bitvector;
104
+ }
105
+ /**
106
+ * Calculates and returns the receiptTrie for the block.
107
+ */
108
+ async receiptTrie() {
109
+ if (this.transactionResults.length === 0) {
110
+ return KECCAK256_RLP;
111
+ }
112
+ const receiptTrie = new MerklePatriciaTrie({ common: this.vm.common });
113
+ for (const [i, txResult] of this.transactionResults.entries()) {
114
+ const tx = this.transactions[i];
115
+ const encodedReceipt = encodeReceipt(txResult.receipt, tx.type);
116
+ await receiptTrie.put(RLP.encode(i), encodedReceipt);
117
+ }
118
+ return receiptTrie.root();
119
+ }
120
+ /**
121
+ * Adds the block miner reward to the coinbase account.
122
+ */
123
+ async rewardMiner() {
124
+ const minerReward = this.vm.common.param('minerReward');
125
+ const reward = calculateMinerReward(minerReward, 0);
126
+ const coinbase = this.headerData.coinbase !== undefined
127
+ ? new Address(toBytes(this.headerData.coinbase))
128
+ : createZeroAddress();
129
+ await rewardAccount(this.vm.evm, coinbase, reward, this.vm.common);
130
+ }
131
+ /**
132
+ * Adds the withdrawal amount to the withdrawal address
133
+ */
134
+ async processWithdrawals() {
135
+ for (const withdrawal of this.withdrawals ?? []) {
136
+ const { address, amount } = withdrawal;
137
+ // If there is no amount to add, skip touching the account
138
+ // as per the implementation of other clients geth/nethermind
139
+ // although this should never happen as no withdrawals with 0
140
+ // amount should ever land up here.
141
+ if (amount === BIGINT_0)
142
+ continue;
143
+ // Withdrawal amount is represented in Gwei so needs to be
144
+ // converted to wei
145
+ await rewardAccount(this.vm.evm, address, amount * GWEI_TO_WEI, this.vm.common);
146
+ }
147
+ }
148
+ /**
149
+ * Run and add a transaction to the block being built.
150
+ * Please note that this modifies the state of the VM.
151
+ * Throws if the transaction's gasLimit is greater than
152
+ * the remaining gas in the block.
153
+ */
154
+ async addTransaction(tx, { skipHardForkValidation, allowNoBlobs, } = {}) {
155
+ this.checkStatus();
156
+ if (!this.checkpointed) {
157
+ await this.vm.evm.journal.checkpoint();
158
+ this.checkpointed = true;
159
+ }
160
+ // According to the Yellow Paper, a transaction's gas limit
161
+ // cannot be greater than the remaining gas in the block
162
+ const blockGasLimit = toType(this.headerData.gasLimit, TypeOutput.BigInt);
163
+ const blobGasPerBlob = this.vm.common.param('blobGasPerBlob');
164
+ const blockGasRemaining = blockGasLimit - this.gasUsed;
165
+ if (tx.gasLimit > blockGasRemaining) {
166
+ throw EthereumJSErrorWithoutCode('tx has a higher gas limit than the remaining gas in the block');
167
+ }
168
+ let blobGasUsed = undefined;
169
+ if (tx instanceof Blob4844Tx) {
170
+ const { maxBlobGasPerBlock: blobGasLimit } = this.vm.common.getBlobGasSchedule();
171
+ if (tx.networkWrapperVersion === NetworkWrapperType.EIP4844 &&
172
+ this.vm.common.isActivatedEIP(7594)) {
173
+ throw Error('eip4844 blob transaction for eip7594 activated fork');
174
+ }
175
+ else if (tx.networkWrapperVersion === NetworkWrapperType.EIP7594 &&
176
+ !this.vm.common.isActivatedEIP(7594)) {
177
+ throw Error('eip7594 blob transaction but eip not yet activated');
178
+ }
179
+ if (this.blockOpts.common?.isActivatedEIP(4844) === false) {
180
+ throw Error('eip4844 not activated yet for adding a blob transaction');
181
+ }
182
+ const blobTx = tx;
183
+ // Guard against the case if a tx came into the pool without blobs i.e. network wrapper payload
184
+ if (blobTx.blobs === undefined) {
185
+ // TODO: verify if we want this, do we want to allow the block builder to accept blob txs without the actual blobs?
186
+ // (these must have at least one `blobVersionedHashes`, this is verified at tx-level)
187
+ if (allowNoBlobs !== true) {
188
+ throw EthereumJSErrorWithoutCode('blobs missing for 4844 transaction');
189
+ }
190
+ }
191
+ if (this.blobGasUsed + BigInt(blobTx.numBlobs()) * blobGasPerBlob > blobGasLimit) {
192
+ throw EthereumJSErrorWithoutCode('block blob gas limit reached');
193
+ }
194
+ blobGasUsed = this.blobGasUsed;
195
+ }
196
+ const header = {
197
+ ...this.headerData,
198
+ gasUsed: this.gasUsed,
199
+ // correct excessBlobGas should already part of headerData used above
200
+ blobGasUsed,
201
+ };
202
+ const blockData = { header, transactions: this.transactions };
203
+ const block = createBlock(blockData, this.blockOpts);
204
+ const result = await runTx(this.vm, { tx, block, skipHardForkValidation });
205
+ // If tx is a blob transaction, remove blobs/kzg commitments before adding to block per EIP-4844
206
+ if (tx instanceof Blob4844Tx) {
207
+ const txData = tx;
208
+ this.blobGasUsed += BigInt(txData.blobVersionedHashes.length) * blobGasPerBlob;
209
+ tx = createMinimal4844TxFromNetworkWrapper(txData, {
210
+ common: this.blockOpts.common,
211
+ });
212
+ }
213
+ this.transactions.push(tx);
214
+ this.transactionResults.push(result);
215
+ this.gasUsed += result.totalGasSpent;
216
+ this._minerValue += result.minerValue;
217
+ return result;
218
+ }
219
+ /**
220
+ * Reverts the checkpoint on the StateManager to reset the state from any transactions that have been run.
221
+ */
222
+ async revert() {
223
+ if (this.checkpointed) {
224
+ await this.vm.evm.journal.revert();
225
+ this.checkpointed = false;
226
+ }
227
+ this.blockStatus = { status: BuildStatus.Reverted };
228
+ }
229
+ /**
230
+ * This method constructs the finalized block, including withdrawals and any CLRequests.
231
+ * It also:
232
+ * - Assigns the reward for miner (PoW)
233
+ * - Commits the checkpoint on the StateManager
234
+ * - Sets the tip of the VM's blockchain to this block
235
+ * For PoW, optionally seals the block with params `nonce` and `mixHash`,
236
+ * which is validated along with the block number and difficulty by ethash.
237
+ * For PoA, please pass `blockOption.cliqueSigner` into the buildBlock constructor,
238
+ * as the signer will be awarded the txs amount spent on gas as they are added.
239
+ *
240
+ * Note: we add CLRequests here because they can be generated at any time during the
241
+ * lifecycle of a pending block so need to be provided only when the block is finalized.
242
+ */
243
+ async build(sealOpts) {
244
+ this.checkStatus();
245
+ const blockOpts = this.blockOpts;
246
+ const consensusType = this.vm.common.consensusType();
247
+ if (consensusType === ConsensusType.ProofOfWork) {
248
+ await this.rewardMiner();
249
+ }
250
+ await this.processWithdrawals();
251
+ const transactionsTrie = await this.transactionsTrie();
252
+ const withdrawalsRoot = this.withdrawals
253
+ ? await genWithdrawalsTrieRoot(this.withdrawals, new MerklePatriciaTrie({ common: this.vm.common }))
254
+ : undefined;
255
+ const receiptTrie = await this.receiptTrie();
256
+ const logsBloom = this.logsBloom();
257
+ const gasUsed = this.gasUsed;
258
+ // timestamp should already be set in constructor
259
+ const timestamp = this.headerData.timestamp ?? BIGINT_0;
260
+ let blobGasUsed = undefined;
261
+ if (this.vm.common.isActivatedEIP(4844)) {
262
+ blobGasUsed = this.blobGasUsed;
263
+ }
264
+ let requests;
265
+ let requestsHash;
266
+ if (this.vm.common.isActivatedEIP(7685)) {
267
+ const sha256Function = this.vm.common.customCrypto.sha256 ?? sha256;
268
+ requests = await accumulateRequests(this.vm, this.transactionResults);
269
+ requestsHash = genRequestsRoot(requests, sha256Function);
270
+ }
271
+ // get stateRoot after all the accumulateRequests etc have been done
272
+ const stateRoot = await this.vm.stateManager.getStateRoot();
273
+ const headerData = {
274
+ ...this.headerData,
275
+ stateRoot,
276
+ transactionsTrie,
277
+ withdrawalsRoot,
278
+ receiptTrie,
279
+ logsBloom,
280
+ gasUsed,
281
+ timestamp,
282
+ // correct excessBlobGas should already be part of headerData used above
283
+ blobGasUsed,
284
+ requestsHash,
285
+ };
286
+ if (consensusType === ConsensusType.ProofOfWork) {
287
+ headerData.nonce = sealOpts?.nonce ?? headerData.nonce;
288
+ headerData.mixHash = sealOpts?.mixHash ?? headerData.mixHash;
289
+ }
290
+ const blockData = {
291
+ header: headerData,
292
+ transactions: this.transactions,
293
+ withdrawals: this.withdrawals,
294
+ };
295
+ let block;
296
+ const cs = this.blockOpts.cliqueSigner;
297
+ if (cs !== undefined) {
298
+ block = createSealedCliqueBlock(blockData, cs, this.blockOpts);
299
+ }
300
+ else {
301
+ block = createBlock(blockData, blockOpts);
302
+ }
303
+ if (this.blockOpts.putBlockIntoBlockchain === true) {
304
+ await this.vm.blockchain.putBlock(block);
305
+ }
306
+ this.blockStatus = { status: BuildStatus.Build, block };
307
+ if (this.checkpointed) {
308
+ await this.vm.evm.journal.commit();
309
+ this.checkpointed = false;
310
+ }
311
+ return { block, requests };
312
+ }
313
+ async initState() {
314
+ if (this.vm.common.isActivatedEIP(4788)) {
315
+ if (!this.checkpointed) {
316
+ await this.vm.evm.journal.checkpoint();
317
+ this.checkpointed = true;
318
+ }
319
+ const { parentBeaconBlockRoot, timestamp } = this.headerData;
320
+ // timestamp should already be set in constructor
321
+ const timestampBigInt = toType(timestamp ?? 0, TypeOutput.BigInt);
322
+ const parentBeaconBlockRootBuf = toType(parentBeaconBlockRoot, TypeOutput.Uint8Array) ?? new Uint8Array(32);
323
+ await accumulateParentBeaconBlockRoot(this.vm, parentBeaconBlockRootBuf, timestampBigInt);
324
+ }
325
+ if (this.vm.common.isActivatedEIP(2935)) {
326
+ if (!this.checkpointed) {
327
+ await this.vm.evm.journal.checkpoint();
328
+ this.checkpointed = true;
329
+ }
330
+ const { parentHash, number } = this.headerData;
331
+ // timestamp should already be set in constructor
332
+ const numberBigInt = toType(number ?? 0, TypeOutput.BigInt);
333
+ const parentHashSanitized = toType(parentHash, TypeOutput.Uint8Array) ?? new Uint8Array(32);
334
+ await accumulateParentBlockHash(this.vm, numberBigInt, parentHashSanitized);
335
+ }
336
+ }
337
+ }
338
+ /**
339
+ * Build a block on top of the current state
340
+ * by adding one transaction at a time.
341
+ *
342
+ * Creates a checkpoint on the StateManager and modifies the state
343
+ * as transactions are run. The checkpoint is committed on {@link BlockBuilder.build}
344
+ * or discarded with {@link BlockBuilder.revert}.
345
+ *
346
+ * @param {VM} vm
347
+ * @param {BuildBlockOpts} opts
348
+ * @returns An instance of {@link BlockBuilder} with methods:
349
+ * - {@link BlockBuilder.addTransaction}
350
+ * - {@link BlockBuilder.build}
351
+ * - {@link BlockBuilder.revert}
352
+ */
353
+ export async function buildBlock(vm, opts) {
354
+ const blockBuilder = new BlockBuilder(vm, opts);
355
+ await blockBuilder.initState();
356
+ return blockBuilder;
357
+ }
358
+ //# sourceMappingURL=buildBlock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildBlock.js","sourceRoot":"","sources":["../../src/buildBlock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { VM } from './vm.ts';
2
+ import type { VMOpts } from './types.ts';
3
+ /**
4
+ * VM async constructor. Creates engine instance and initializes it.
5
+ *
6
+ * @param opts VM engine constructor options
7
+ */
8
+ export declare function createVM(opts?: VMOpts): Promise<VM>;
9
+ //# sourceMappingURL=constructors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constructors.d.ts","sourceRoot":"","sources":["../../src/constructors.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAE5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAExC;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,IAAI,GAAE,MAAW,GAAG,OAAO,CAAC,EAAE,CAAC,CAsE7D"}
@@ -0,0 +1,72 @@
1
+ import { Common, Mainnet } from '@feelyourprotocol/common';
2
+ import { EVMMockBlockchain, createEVM, getActivePrecompiles } from '@feelyourprotocol/evm';
3
+ import { MerkleStateManager } from '@feelyourprotocol/statemanager';
4
+ import { Account, Address, EthereumJSErrorWithoutCode, createAccount, unprefixedHexToBytes, } from '@feelyourprotocol/util';
5
+ import { VM } from "./vm.js";
6
+ /**
7
+ * VM async constructor. Creates engine instance and initializes it.
8
+ *
9
+ * @param opts VM engine constructor options
10
+ */
11
+ export async function createVM(opts = {}) {
12
+ // Save if a `StateManager` was passed (for activatePrecompiles)
13
+ const didPassStateManager = opts.stateManager !== undefined;
14
+ // Add common, SM, blockchain, EVM here
15
+ if (opts.common === undefined) {
16
+ opts.common = new Common({ chain: Mainnet });
17
+ }
18
+ if (opts.stateManager === undefined) {
19
+ opts.stateManager = new MerkleStateManager({
20
+ common: opts.common,
21
+ });
22
+ }
23
+ if (opts.blockchain === undefined) {
24
+ opts.blockchain = new EVMMockBlockchain();
25
+ }
26
+ if (opts.profilerOpts !== undefined) {
27
+ const profilerOpts = opts.profilerOpts;
28
+ if (profilerOpts.reportAfterBlock === true && profilerOpts.reportAfterTx === true) {
29
+ throw EthereumJSErrorWithoutCode('Cannot have `reportProfilerAfterBlock` and `reportProfilerAfterTx` set to `true` at the same time');
30
+ }
31
+ }
32
+ if (opts.evm !== undefined && opts.evmOpts !== undefined) {
33
+ throw EthereumJSErrorWithoutCode('the evm and evmOpts options cannot be used in conjunction');
34
+ }
35
+ if (opts.evm === undefined) {
36
+ let enableProfiler = false;
37
+ if (opts.profilerOpts?.reportAfterBlock === true || opts.profilerOpts?.reportAfterTx === true) {
38
+ enableProfiler = true;
39
+ }
40
+ const evmOpts = opts.evmOpts ?? {};
41
+ opts.evm = await createEVM({
42
+ common: opts.common,
43
+ stateManager: opts.stateManager,
44
+ blockchain: opts.blockchain,
45
+ profiler: {
46
+ enabled: enableProfiler,
47
+ },
48
+ ...evmOpts,
49
+ });
50
+ }
51
+ if (opts.activatePrecompiles === true && !didPassStateManager) {
52
+ await opts.evm.journal.checkpoint();
53
+ // put 1 wei in each of the precompiles in order to make the accounts non-empty and thus not have them deduct `callNewAccount` gas.
54
+ for (const [addressStr] of getActivePrecompiles(opts.common)) {
55
+ const address = new Address(unprefixedHexToBytes(addressStr));
56
+ let account = await opts.evm.stateManager.getAccount(address);
57
+ // Only do this if it is not overridden in genesis
58
+ // Note: in the case that custom genesis has storage fields, this is preserved
59
+ if (account === undefined) {
60
+ account = new Account();
61
+ const newAccount = createAccount({
62
+ balance: 1,
63
+ storageRoot: account.storageRoot,
64
+ });
65
+ await opts.evm.stateManager.putAccount(address, newAccount);
66
+ }
67
+ }
68
+ await opts.evm.journal.commit();
69
+ }
70
+ return new VM(opts);
71
+ }
72
+ //# sourceMappingURL=constructors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constructors.js","sourceRoot":"","sources":["../../src/constructors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,EACL,OAAO,EACP,OAAO,EACP,0BAA0B,EAC1B,aAAa,EACb,oBAAoB,GACrB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAI5B;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAe,EAAE;IAC9C,gEAAgE;IAChE,MAAM,mBAAmB,GAAG,IAAI,CAAC,YAAY,KAAK,SAAS,CAAA;IAE3D,uCAAuC;IACvC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAA;IAC9C,CAAC;IAED,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACpC,IAAI,CAAC,YAAY,GAAG,IAAI,kBAAkB,CAAC;YACzC,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,IAAI,iBAAiB,EAAE,CAAA;IAC3C,CAAC;IAED,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACpC,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA;QACtC,IAAI,YAAY,CAAC,gBAAgB,KAAK,IAAI,IAAI,YAAY,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;YAClF,MAAM,0BAA0B,CAC9B,mGAAmG,CACpG,CAAA;QACH,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACzD,MAAM,0BAA0B,CAAC,2DAA2D,CAAC,CAAA;IAC/F,CAAC;IAED,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,cAAc,GAAG,KAAK,CAAA;QAC1B,IAAI,IAAI,CAAC,YAAY,EAAE,gBAAgB,KAAK,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,aAAa,KAAK,IAAI,EAAE,CAAC;YAC9F,cAAc,GAAG,IAAI,CAAA;QACvB,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAA;QAClC,IAAI,CAAC,GAAG,GAAG,MAAM,SAAS,CAAC;YACzB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ,EAAE;gBACR,OAAO,EAAE,cAAc;aACxB;YACD,GAAG,OAAO;SACX,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,mBAAmB,KAAK,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC9D,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,CAAA;QACnC,mIAAmI;QACnI,KAAK,MAAM,CAAC,UAAU,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAA;YAC7D,IAAI,OAAO,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;YAC7D,kDAAkD;YAClD,8EAA8E;YAC9E,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;gBACvB,MAAM,UAAU,GAAG,aAAa,CAAC;oBAC/B,OAAO,EAAE,CAAC;oBACV,WAAW,EAAE,OAAO,CAAC,WAAW;iBACjC,CAAC,CAAA;gBACF,MAAM,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;YAC7D,CAAC;QACH,CAAC;QACD,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAA;IACjC,CAAC;IAED,OAAO,IAAI,EAAE,CAAC,IAAI,CAAC,CAAA;AACrB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { EVMPerformanceLogOutput } from '@feelyourprotocol/evm';
2
+ /**
3
+ * Emit EVM profile logs
4
+ * @param logs
5
+ * @param profileTitle
6
+ * @hidden
7
+ */
8
+ export declare function emitEVMProfile(logs: EVMPerformanceLogOutput[], profileTitle: string): void;
9
+ //# sourceMappingURL=emitEVMProfile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitEVMProfile.d.ts","sourceRoot":"","sources":["../../src/emitEVMProfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAA;AAE9D;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,uBAAuB,EAAE,EAAE,YAAY,EAAE,MAAM,QA8InF"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Emit EVM profile logs
3
+ * @param logs
4
+ * @param profileTitle
5
+ * @hidden
6
+ */
7
+ export function emitEVMProfile(logs, profileTitle) {
8
+ if (logs.length === 0) {
9
+ return;
10
+ }
11
+ // Track total calls / time (ms) / gas
12
+ let calls = 0;
13
+ let totalMs = 0;
14
+ let totalGas = 0;
15
+ // Order of columns to report (see `EVMPerformanceLogOutput` type)
16
+ const colOrder = [
17
+ 'tag',
18
+ 'calls',
19
+ 'avgTimePerCall',
20
+ 'totalTime',
21
+ 'staticGasUsed',
22
+ 'dynamicGasUsed',
23
+ 'gasUsed',
24
+ 'staticGas',
25
+ 'millionGasPerSecond',
26
+ 'blocksPerSlot',
27
+ ];
28
+ // The name of this column to report (saves space)
29
+ const colNames = [
30
+ 'tag',
31
+ 'calls',
32
+ 'ms/call',
33
+ 'total (ms)',
34
+ 'sgas',
35
+ 'dgas',
36
+ 'total (s+d)',
37
+ 'static fee',
38
+ 'Mgas/s',
39
+ 'BpS',
40
+ ];
41
+ // Special padStr method which inserts whitespace left and right
42
+ // This ensures that there is at least one whitespace between the columns (denoted by pipe `|` chars)
43
+ function padStr(str, leftpad) {
44
+ return ' ' + str.toString().padStart(leftpad, ' ') + ' ';
45
+ }
46
+ // Returns the string length of this column. Used to calculate how big the header / footer should be
47
+ function strLen(str) {
48
+ return padStr(str, 0).length - 2;
49
+ }
50
+ // Step one: calculate the length of each column
51
+ const colLength = [];
52
+ for (const entry of logs) {
53
+ let ins = 0;
54
+ colLength[ins] = Math.max(colLength[ins] ?? 0, strLen(colNames[ins]));
55
+ for (const key of colOrder) {
56
+ if (entry[key] !== undefined) {
57
+ // If entry is available, max out the current column length (this will be the longest string of this column)
58
+ colLength[ins] = Math.max(colLength[ins] ?? 0, strLen(entry[key]));
59
+ ins++;
60
+ // In this switch statement update the total calls / time / gas used
61
+ switch (key) {
62
+ case 'calls':
63
+ calls += entry[key];
64
+ break;
65
+ case 'totalTime':
66
+ totalMs += entry[key];
67
+ break;
68
+ case 'gasUsed':
69
+ totalGas += entry[key];
70
+ break;
71
+ }
72
+ }
73
+ }
74
+ }
75
+ // Ensure that the column names also fit on the column length
76
+ for (const i in colLength) {
77
+ colLength[i] = Math.max(colLength[i] ?? 0, strLen(colNames[i]));
78
+ }
79
+ // Calculate the total header length
80
+ // This is done by summing all columns together, plus adding three extra chars per column (two whitespace, one pipe)
81
+ // Remove the final pipe character since this is included in the header string (so subtract one)
82
+ const headerLength = colLength.reduce((pv, cv) => pv + cv, 0) + colLength.length * 3 - 1;
83
+ const blockGasLimit = 30000000; // Block gas limit
84
+ const slotTime = 12000; // Time in milliseconds (!) per slot
85
+ // Normalize constant to check if execution time is above one block per slot (>=1) or not (<1)
86
+ const bpsNormalizer = blockGasLimit / slotTime;
87
+ const avgGas = totalGas / totalMs; // Gas per millisecond
88
+ const mGasSAvg = Math.round(avgGas) / 1e3;
89
+ const bpSAvg = Math.round((avgGas / bpsNormalizer) * 1e3) / 1e3;
90
+ // Write the profile title
91
+ // eslint-disable-next-line
92
+ console.log('+== ' + profileTitle + ' ==+');
93
+ // Write the summary of this profile
94
+ // eslint-disable-next-line
95
+ console.log(`+== Calls: ${calls}, Total time: ${Math.round(totalMs * 1e3) / 1e3}ms, Total gas: ${totalGas}, MGas/s: ${mGasSAvg}, Blocks per Slot (BpS): ${bpSAvg} ==+`);
96
+ // Generate and write the header
97
+ const header = '|' + '-'.repeat(headerLength) + '|';
98
+ // eslint-disable-next-line
99
+ console.log(header);
100
+ // Write the columns
101
+ let str = '';
102
+ for (const i in colLength) {
103
+ str += '|' + padStr(colNames[i], colLength[i]);
104
+ }
105
+ str += '|';
106
+ // eslint-disable-next-line
107
+ console.log(str);
108
+ // Write each profile entry
109
+ for (const entry of logs) {
110
+ let str = '';
111
+ let i = 0;
112
+ for (const key of colOrder) {
113
+ if (entry[key] !== undefined) {
114
+ str += '|' + padStr(entry[key], colLength[i]);
115
+ i++;
116
+ }
117
+ }
118
+ str += '|';
119
+ // eslint-disable-next-line
120
+ console.log(str);
121
+ }
122
+ // Finally, write the footer
123
+ const footer = '+' + '-'.repeat(headerLength) + '+';
124
+ // eslint-disable-next-line
125
+ console.log(footer);
126
+ }
127
+ //# sourceMappingURL=emitEVMProfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emitEVMProfile.js","sourceRoot":"","sources":["../../src/emitEVMProfile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export { Bloom } from './bloom/index.ts';
2
+ export { BlockBuilder, BuildStatus } from './buildBlock.ts';
3
+ export { buildBlock } from './buildBlock.ts';
4
+ export * from './constructors.ts';
5
+ export * from './params.ts';
6
+ export { encodeReceipt } from './runBlock.ts';
7
+ export { runBlock } from './runBlock.ts';
8
+ export { runTx } from './runTx.ts';
9
+ export * from './types.ts';
10
+ export { VM } from './vm.ts';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,cAAc,mBAAmB,CAAA;AACjC,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,11 @@
1
+ export { Bloom } from "./bloom/index.js";
2
+ export { BlockBuilder, BuildStatus } from "./buildBlock.js";
3
+ export { buildBlock } from "./buildBlock.js";
4
+ export * from "./constructors.js";
5
+ export * from "./params.js";
6
+ export { encodeReceipt } from "./runBlock.js";
7
+ export { runBlock } from "./runBlock.js";
8
+ export { runTx } from "./runTx.js";
9
+ export * from "./types.js";
10
+ export { VM } from "./vm.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACxC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,cAAc,mBAAmB,CAAA;AACjC,cAAc,aAAa,CAAA;AAC3B,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA"}