@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,3 @@
1
+ {
2
+ "type": "module"
3
+ }
@@ -0,0 +1,3 @@
1
+ import type { ParamsDict } from '@feelyourprotocol/common';
2
+ export declare const paramsVM: ParamsDict;
3
+ //# sourceMappingURL=params.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../src/params.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAGpD,eAAO,MAAM,QAAQ,EAAE,UAoGtB,CAAA"}
@@ -0,0 +1,102 @@
1
+ import { SYSTEM_ADDRESS } from '@feelyourprotocol/util';
2
+ export const paramsVM = {
3
+ /**
4
+ * Frontier/Chainstart
5
+ */
6
+ 1: {
7
+ // gasConfig
8
+ maxRefundQuotient: 2, // Maximum refund quotient; max tx refund is min(tx.gasUsed/maxRefundQuotient, tx.gasRefund)
9
+ blobGasPerBlob: 0,
10
+ maxBlobGasPerBlock: 0,
11
+ targetBlobGasPerBlock: 0,
12
+ // pow
13
+ minerReward: '5000000000000000000', // the amount a miner get rewarded for mining a block
14
+ },
15
+ /**
16
+ . * Byzantium HF Meta EIP
17
+ . */
18
+ 609: {
19
+ // pow
20
+ minerReward: '3000000000000000000', // the amount a miner get rewarded for mining a block
21
+ },
22
+ /**
23
+ . * Constantinople HF Meta EIP
24
+ . */
25
+ 1013: {
26
+ // pow
27
+ minerReward: '2000000000000000000', // The amount a miner gets rewarded for mining a block
28
+ },
29
+ /**
30
+ . * Fee market change for ETH 1.0 chain
31
+ . */
32
+ 1559: {
33
+ // gasConfig
34
+ elasticityMultiplier: 2, // Maximum block gas target elasticity
35
+ initialBaseFee: 1000000000, // Initial base fee on first EIP1559 block
36
+ },
37
+ /**
38
+ * Save historical block hashes in state (Verkle related usage, UNSTABLE)
39
+ */
40
+ 2935: {
41
+ // config
42
+ historyStorageAddress: '0x0000F90827F1C53A10CB7A02335B175320002935', // The address where the historical blockhashes are stored
43
+ historyServeWindow: 8191, // The amount of blocks to be served by the historical blockhash contract
44
+ systemAddress: SYSTEM_ADDRESS, // The system address
45
+ },
46
+ /**
47
+ . * Reduction in refunds
48
+ . */
49
+ 3529: {
50
+ // gasConfig
51
+ maxRefundQuotient: 5, // Maximum refund quotient; max tx refund is min(tx.gasUsed/maxRefundQuotient, tx.gasRefund)
52
+ },
53
+ /**
54
+ . * Shard Blob Transactions
55
+ . */
56
+ 4844: {
57
+ // gasConfig
58
+ targetBlobGasPerBlock: 393216, // The target blob gas consumed per block
59
+ blobGasPerBlob: 131072, // The base fee for blob gas per blob
60
+ maxBlobGasPerBlock: 786432, // The max blob gas allowable per block
61
+ blobGasPriceUpdateFraction: 3338477, // The denominator used in the exponential when calculating a blob gas price
62
+ // gasPrices
63
+ minBlobGas: 1, // The minimum fee per blob gas
64
+ },
65
+ /**
66
+ . * Beacon block root in the EVM
67
+ . */
68
+ 4788: {
69
+ // config
70
+ historicalRootsLength: 8191, // The modulo parameter of the beaconroot ring buffer in the beaconroot stateful precompile
71
+ },
72
+ /**
73
+ * Execution layer triggerable withdrawals (experimental)
74
+ */
75
+ 7002: {
76
+ // config
77
+ systemAddress: SYSTEM_ADDRESS, // The system address to perform operations on the withdrawal requests predeploy address
78
+ // See: https://github.com/ethereum/EIPs/pull/8934/files
79
+ withdrawalRequestPredeployAddress: '0x00000961EF480EB55E80D19AD83579A64C007002', // Address of the validator excess address
80
+ systemCallGasLimit: 30000000, // EIP-7002 system call gas limit
81
+ },
82
+ /**
83
+ * Increase the MAX_EFFECTIVE_BALANCE -> Execution layer triggered consolidations (experimental)
84
+ */
85
+ 7251: {
86
+ // config
87
+ systemAddress: SYSTEM_ADDRESS, // The system address to perform operations on the consolidation requests predeploy address
88
+ // See: https://github.com/ethereum/EIPs/pull/8934/files
89
+ consolidationRequestPredeployAddress: '0x0000BBDDC7CE488642FB579F8B00F3A590007251', // Address of the consolidations contract
90
+ systemCallGasLimit: 30000000, // EIP-7251 system call gas limit
91
+ },
92
+ /**
93
+ . * Shard Blob Transactions
94
+ . */
95
+ 7691: {
96
+ // gasConfig
97
+ targetBlobGasPerBlock: 786432, // The target blob gas consumed per block
98
+ maxBlobGasPerBlock: 1179648, // The max blob gas allowable per block
99
+ blobGasPriceUpdateFraction: 5007716, // The denominator used in the exponential when calculating a blob gas price
100
+ },
101
+ };
102
+ //# sourceMappingURL=params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"params.js","sourceRoot":"","sources":["../../src/params.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD,MAAM,CAAC,MAAM,QAAQ,GAAe;IAClC;;OAEG;IACH,CAAC,EAAE;QACD,YAAY;QACZ,iBAAiB,EAAE,CAAC,EAAE,4FAA4F;QAClH,cAAc,EAAE,CAAC;QACjB,kBAAkB,EAAE,CAAC;QACrB,qBAAqB,EAAE,CAAC;QACxB,MAAM;QACN,WAAW,EAAE,qBAAqB,EAAE,qDAAqD;KAC1F;IACD;;OAEG;IACH,GAAG,EAAE;QACH,MAAM;QACN,WAAW,EAAE,qBAAqB,EAAE,qDAAqD;KAC1F;IACD;;OAEG;IACH,IAAI,EAAE;QACJ,MAAM;QACN,WAAW,EAAE,qBAAqB,EAAE,sDAAsD;KAC3F;IACD;;OAEG;IACH,IAAI,EAAE;QACJ,YAAY;QACZ,oBAAoB,EAAE,CAAC,EAAE,sCAAsC;QAC/D,cAAc,EAAE,UAAU,EAAE,0CAA0C;KACvE;IACD;;OAEG;IACH,IAAI,EAAE;QACJ,SAAS;QACT,qBAAqB,EAAE,4CAA4C,EAAE,0DAA0D;QAC/H,kBAAkB,EAAE,IAAI,EAAE,yEAAyE;QACnG,aAAa,EAAE,cAAc,EAAE,qBAAqB;KACrD;IACD;;OAEG;IACH,IAAI,EAAE;QACJ,YAAY;QACZ,iBAAiB,EAAE,CAAC,EAAE,4FAA4F;KACnH;IACD;;OAEG;IACH,IAAI,EAAE;QACJ,YAAY;QACZ,qBAAqB,EAAE,MAAM,EAAE,yCAAyC;QACxE,cAAc,EAAE,MAAM,EAAE,qCAAqC;QAC7D,kBAAkB,EAAE,MAAM,EAAE,uCAAuC;QACnE,0BAA0B,EAAE,OAAO,EAAE,4EAA4E;QACjH,YAAY;QACZ,UAAU,EAAE,CAAC,EAAE,+BAA+B;KAC/C;IACD;;OAEG;IACH,IAAI,EAAE;QACJ,SAAS;QACT,qBAAqB,EAAE,IAAI,EAAE,2FAA2F;KACzH;IACD;;OAEG;IACH,IAAI,EAAE;QACJ,SAAS;QACT,aAAa,EAAE,cAAc,EAAE,wFAAwF;QACvH,wDAAwD;QACxD,iCAAiC,EAAE,4CAA4C,EAAE,0CAA0C;QAC3H,kBAAkB,EAAE,QAAU,EAAE,iCAAiC;KAClE;IAED;;OAEG;IACH,IAAI,EAAE;QACJ,SAAS;QACT,aAAa,EAAE,cAAc,EAAE,2FAA2F;QAC1H,wDAAwD;QACxD,oCAAoC,EAAE,4CAA4C,EAAE,yCAAyC;QAC7H,kBAAkB,EAAE,QAAU,EAAE,iCAAiC;KAClE;IACD;;OAEG;IACH,IAAI,EAAE;QACJ,YAAY;QACZ,qBAAqB,EAAE,MAAM,EAAE,yCAAyC;QACxE,kBAAkB,EAAE,OAAO,EAAE,uCAAuC;QACpE,0BAA0B,EAAE,OAAO,EAAE,4EAA4E;KAClH;CACF,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { CLRequest, CLRequestType } from '@feelyourprotocol/util';
2
+ import type { RunTxResult } from './types.ts';
3
+ import type { VM } from './vm.ts';
4
+ /**
5
+ * This helper method generates a list of all CL requests that can be included in a pending block
6
+ * @param vm VM instance (used in deriving partial withdrawal requests)
7
+ * @param txResults (used in deriving deposit requests)
8
+ * @returns a list of CL requests in ascending order by type
9
+ */
10
+ export declare const accumulateRequests: (vm: VM, txResults: RunTxResult[]) => Promise<CLRequest<CLRequestType>[]>;
11
+ //# sourceMappingURL=requests.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requests.d.ts","sourceRoot":"","sources":["../../src/requests.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,SAAS,EACT,aAAa,EASd,MAAM,kBAAkB,CAAA;AAEzB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC7C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAwDjC;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAC7B,IAAI,EAAE,EACN,WAAW,WAAW,EAAE,KACvB,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAyBpC,CAAA"}
@@ -0,0 +1,204 @@
1
+ import { Mainnet } from '@feelyourprotocol/common';
2
+ import { CLRequest, CLRequestType, EthereumJSErrorWithoutCode, bigIntToAddressBytes, bigIntToBytes, bytesToBigInt, bytesToHex, concatBytes, createAddressFromString, setLengthLeft, } from '@feelyourprotocol/util';
3
+ const DEPOSIT_TOPIC = '0x649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c5';
4
+ const PUBKEY_OFFSET = BigInt(160);
5
+ const WITHDRAWAL_CREDENTIALS_OFFSET = BigInt(256);
6
+ const AMOUNT_OFFSET = BigInt(320);
7
+ const SIGNATURE_OFFSET = BigInt(384);
8
+ const INDEX_OFFSET = BigInt(512);
9
+ const PUBKEY_SIZE = BigInt(48);
10
+ const WITHDRAWAL_CREDENTIALS_SIZE = BigInt(32);
11
+ const AMOUNT_SIZE = BigInt(8);
12
+ const SIGNATURE_SIZE = BigInt(96);
13
+ const INDEX_SIZE = BigInt(8);
14
+ const LOG_SIZE = 576;
15
+ const LOG_LAYOUT_MISMATCH = 'invalid deposit log: unsupported data layout';
16
+ function cloneSystemAccessEntry(vm, systemAddressHex) {
17
+ const access = vm.evm.blockLevelAccessList?.accesses[systemAddressHex];
18
+ if (access === undefined) {
19
+ return undefined;
20
+ }
21
+ const storageChanges = {};
22
+ for (const [slot, changes] of Object.entries(access.storageChanges)) {
23
+ storageChanges[slot] = changes.map(([index, value]) => [index, value]);
24
+ }
25
+ return {
26
+ nonceChanges: new Map(access.nonceChanges),
27
+ balanceChanges: new Map(access.balanceChanges),
28
+ codeChanges: access.codeChanges.map(([index, code]) => [index, code]),
29
+ storageChanges,
30
+ storageReads: new Set(access.storageReads),
31
+ };
32
+ }
33
+ function restoreSystemAccessEntry(vm, systemAddressHex, snapshot) {
34
+ const bal = vm.evm.blockLevelAccessList;
35
+ if (bal === undefined) {
36
+ return;
37
+ }
38
+ if (snapshot === undefined) {
39
+ delete bal.accesses[systemAddressHex];
40
+ return;
41
+ }
42
+ bal.accesses[systemAddressHex] = snapshot;
43
+ }
44
+ /**
45
+ * This helper method generates a list of all CL requests that can be included in a pending block
46
+ * @param vm VM instance (used in deriving partial withdrawal requests)
47
+ * @param txResults (used in deriving deposit requests)
48
+ * @returns a list of CL requests in ascending order by type
49
+ */
50
+ export const accumulateRequests = async (vm, txResults) => {
51
+ const requests = [];
52
+ const common = vm.common;
53
+ if (common.isActivatedEIP(6110)) {
54
+ const depositContractAddress = vm.common['_chainParams'].depositContractAddress ?? Mainnet.depositContractAddress;
55
+ if (depositContractAddress === undefined)
56
+ throw EthereumJSErrorWithoutCode('deposit contract address required with EIP 6110');
57
+ const depositsRequest = accumulateDepositsRequest(depositContractAddress, txResults);
58
+ requests.push(depositsRequest);
59
+ }
60
+ if (common.isActivatedEIP(7002)) {
61
+ const withdrawalsRequest = await accumulateWithdrawalsRequest(vm);
62
+ requests.push(withdrawalsRequest);
63
+ }
64
+ if (common.isActivatedEIP(7251)) {
65
+ const consolidationsRequest = await accumulateConsolidationsRequest(vm);
66
+ requests.push(consolidationsRequest);
67
+ }
68
+ // requests are already type byte ordered by construction
69
+ return requests;
70
+ };
71
+ const accumulateWithdrawalsRequest = async (vm) => {
72
+ // Partial withdrawals logic
73
+ const addressBytes = setLengthLeft(bigIntToBytes(vm.common.param('withdrawalRequestPredeployAddress')), 20);
74
+ const withdrawalsAddress = createAddressFromString(bytesToHex(addressBytes));
75
+ const systemAddressBytes = bigIntToAddressBytes(vm.common.param('systemAddress'));
76
+ const systemAddress = createAddressFromString(bytesToHex(systemAddressBytes));
77
+ const systemAccount = await vm.stateManager.getAccount(systemAddress);
78
+ const originalAccount = await vm.stateManager.getAccount(withdrawalsAddress);
79
+ if (originalAccount === undefined) {
80
+ return new CLRequest(CLRequestType.Withdrawal, new Uint8Array());
81
+ }
82
+ const systemAddressHex = systemAddress.toString();
83
+ const balSnapshot = cloneSystemAccessEntry(vm, systemAddressHex);
84
+ const results = await vm.evm.runCall({
85
+ caller: systemAddress,
86
+ gasLimit: vm.common.param('systemCallGasLimit'),
87
+ to: withdrawalsAddress,
88
+ });
89
+ restoreSystemAccessEntry(vm, systemAddressHex, balSnapshot);
90
+ if (systemAccount === undefined) {
91
+ await vm.stateManager.deleteAccount(systemAddress);
92
+ }
93
+ else {
94
+ await vm.stateManager.putAccount(systemAddress, systemAccount);
95
+ }
96
+ const resultsBytes = results.execResult.returnValue;
97
+ return new CLRequest(CLRequestType.Withdrawal, resultsBytes);
98
+ };
99
+ const accumulateConsolidationsRequest = async (vm) => {
100
+ // Partial withdrawals logic
101
+ const addressBytes = setLengthLeft(bigIntToBytes(vm.common.param('consolidationRequestPredeployAddress')), 20);
102
+ const consolidationsAddress = createAddressFromString(bytesToHex(addressBytes));
103
+ const systemAddressBytes = bigIntToAddressBytes(vm.common.param('systemAddress'));
104
+ const systemAddress = createAddressFromString(bytesToHex(systemAddressBytes));
105
+ const systemAccount = await vm.stateManager.getAccount(systemAddress);
106
+ const originalAccount = await vm.stateManager.getAccount(consolidationsAddress);
107
+ if (originalAccount === undefined) {
108
+ return new CLRequest(CLRequestType.Consolidation, new Uint8Array(0));
109
+ }
110
+ const systemAddressHex = systemAddress.toString();
111
+ const balSnapshot = cloneSystemAccessEntry(vm, systemAddressHex);
112
+ const results = await vm.evm.runCall({
113
+ caller: systemAddress,
114
+ gasLimit: vm.common.param('systemCallGasLimit'),
115
+ to: consolidationsAddress,
116
+ });
117
+ restoreSystemAccessEntry(vm, systemAddressHex, balSnapshot);
118
+ if (systemAccount === undefined) {
119
+ await vm.stateManager.deleteAccount(systemAddress);
120
+ }
121
+ else {
122
+ await vm.stateManager.putAccount(systemAddress, systemAccount);
123
+ }
124
+ const resultsBytes = results.execResult.returnValue;
125
+ return new CLRequest(CLRequestType.Consolidation, resultsBytes);
126
+ };
127
+ const accumulateDepositsRequest = (depositContractAddress, txResults) => {
128
+ let resultsBytes = new Uint8Array(0);
129
+ const depositContractAddressLowerCase = depositContractAddress.toLowerCase();
130
+ for (const [_, tx] of txResults.entries()) {
131
+ for (let i = 0; i < tx.receipt.logs.length; i++) {
132
+ const log = tx.receipt.logs[i];
133
+ const [address, topics, data] = log;
134
+ if (topics.length > 0 &&
135
+ bytesToHex(topics[0]) === DEPOSIT_TOPIC &&
136
+ depositContractAddressLowerCase === bytesToHex(address).toLowerCase()) {
137
+ const { pubkey, withdrawalCredentials, amount, signature, index } = parseDepositLog(data);
138
+ const depositRequestBytes = concatBytes(pubkey, withdrawalCredentials, amount, signature, index);
139
+ resultsBytes = concatBytes(resultsBytes, depositRequestBytes);
140
+ }
141
+ }
142
+ }
143
+ return new CLRequest(CLRequestType.Deposit, resultsBytes);
144
+ };
145
+ function parseDepositLog(requestData) {
146
+ if (requestData.length !== LOG_SIZE) {
147
+ throw EthereumJSErrorWithoutCode(LOG_LAYOUT_MISMATCH);
148
+ }
149
+ // Extracts validator pubkey, withdrawal credential, deposit amount, signature,
150
+ // and validator index from Deposit Event log.
151
+ // The event fields are non-indexed so contained in one byte array (log[2]) so parsing is as follows:
152
+ // 1. Read the first 32 bytes to get the starting position of the first field.
153
+ // 2. Continue reading the byte array in 32 byte increments to get all the field starting positions
154
+ // 3. Read 32 bytes starting with the first field position to get the size of the first field
155
+ // 4. Read the bytes from first field position + 32 + the size of the first field to get the first field value
156
+ // 5. Repeat steps 3-4 for each field
157
+ const pubKeyIdxBigInt = bytesToBigInt(requestData.slice(0, 32));
158
+ const withdrawalCreditsIdxBigInt = bytesToBigInt(requestData.slice(32, 64));
159
+ const amountIdxBigInt = bytesToBigInt(requestData.slice(64, 96));
160
+ const sigIdxBigInt = bytesToBigInt(requestData.slice(96, 128));
161
+ const indexIdxBigInt = bytesToBigInt(requestData.slice(128, 160));
162
+ if (pubKeyIdxBigInt !== PUBKEY_OFFSET ||
163
+ withdrawalCreditsIdxBigInt !== WITHDRAWAL_CREDENTIALS_OFFSET ||
164
+ amountIdxBigInt !== AMOUNT_OFFSET ||
165
+ sigIdxBigInt !== SIGNATURE_OFFSET ||
166
+ indexIdxBigInt !== INDEX_OFFSET) {
167
+ throw EthereumJSErrorWithoutCode(LOG_LAYOUT_MISMATCH);
168
+ }
169
+ const pubKeyIdx = Number(pubKeyIdxBigInt);
170
+ const withdrawalCreditsIdx = Number(withdrawalCreditsIdxBigInt);
171
+ const amountIdx = Number(amountIdxBigInt);
172
+ const sigIdx = Number(sigIdxBigInt);
173
+ const indexIdx = Number(indexIdxBigInt);
174
+ const pubKeySizeBigInt = bytesToBigInt(requestData.slice(pubKeyIdx, pubKeyIdx + 32));
175
+ const withdrawalCreditsSizeBigInt = bytesToBigInt(requestData.slice(withdrawalCreditsIdx, withdrawalCreditsIdx + 32));
176
+ const amountSizeBigInt = bytesToBigInt(requestData.slice(amountIdx, amountIdx + 32));
177
+ const sigSizeBigInt = bytesToBigInt(requestData.slice(sigIdx, sigIdx + 32));
178
+ const indexSizeBigInt = bytesToBigInt(requestData.slice(indexIdx, indexIdx + 32));
179
+ if (pubKeySizeBigInt !== PUBKEY_SIZE ||
180
+ withdrawalCreditsSizeBigInt !== WITHDRAWAL_CREDENTIALS_SIZE ||
181
+ amountSizeBigInt !== AMOUNT_SIZE ||
182
+ sigSizeBigInt !== SIGNATURE_SIZE ||
183
+ indexSizeBigInt !== INDEX_SIZE) {
184
+ throw EthereumJSErrorWithoutCode(LOG_LAYOUT_MISMATCH);
185
+ }
186
+ const pubKeySize = Number(pubKeySizeBigInt);
187
+ const withdrawalCreditsSize = Number(withdrawalCreditsSizeBigInt);
188
+ const amountSize = Number(amountSizeBigInt);
189
+ const sigSize = Number(sigSizeBigInt);
190
+ const indexSize = Number(indexSizeBigInt);
191
+ const pubkey = requestData.slice(pubKeyIdx + 32, pubKeyIdx + 32 + pubKeySize);
192
+ const withdrawalCredentials = requestData.slice(withdrawalCreditsIdx + 32, withdrawalCreditsIdx + 32 + withdrawalCreditsSize);
193
+ const amount = requestData.slice(amountIdx + 32, amountIdx + 32 + amountSize);
194
+ const signature = requestData.slice(sigIdx + 32, sigIdx + 32 + sigSize);
195
+ const index = requestData.slice(indexIdx + 32, indexIdx + 32 + indexSize);
196
+ return {
197
+ pubkey,
198
+ withdrawalCredentials,
199
+ amount,
200
+ signature,
201
+ index,
202
+ };
203
+ }
204
+ //# sourceMappingURL=requests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requests.js","sourceRoot":"","sources":["../../src/requests.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { type EVMInterface } from '@feelyourprotocol/evm';
2
+ import { TransactionType } from '@feelyourprotocol/tx';
3
+ import { Account, Address } from '@feelyourprotocol/util';
4
+ import type { Common } from '@feelyourprotocol/common';
5
+ import type { RunBlockOpts, RunBlockResult, TxReceipt } from './types.ts';
6
+ import type { VM } from './vm.ts';
7
+ /**
8
+ * Processes the `block` running all of the transactions it contains and updating the miner's account
9
+ *
10
+ * vm method modifies the state if successfully executed and header fields are valid.
11
+ * state modifications will be reverted if an exception is raised during execution or validation.
12
+ *
13
+ * @param {VM} vm
14
+ * @param {RunBlockOpts} opts - Default values for options:
15
+ * - `generate`: false
16
+ */
17
+ export declare function runBlock(vm: VM, opts: RunBlockOpts): Promise<RunBlockResult>;
18
+ /**
19
+ * vm method runs the logic of EIP 2935 (save blockhashes to state)
20
+ * It will put the `parentHash` of the block to the storage slot of `block.number - 1` of the history storage contract.
21
+ * vm contract is used to retrieve BLOCKHASHes in EVM if EIP 2935 is activated.
22
+ * In case that the previous block of `block` is pre-EIP-2935 (so we are on the EIP 2935 fork block), additionally
23
+ * also add the currently available past blockhashes which are available by BLOCKHASH (so, the past 256 block hashes)
24
+ * @param vm The VM to run on
25
+ * @param block The current block to save the parent block hash of
26
+ */
27
+ export declare function accumulateParentBlockHash(vm: VM, currentBlockNumber: bigint, parentHash: Uint8Array): Promise<void>;
28
+ export declare function accumulateParentBeaconBlockRoot(vm: VM, root: Uint8Array, timestamp: bigint): Promise<void>;
29
+ export declare function calculateMinerReward(minerReward: bigint, ommersNum: number): bigint;
30
+ export declare function rewardAccount(evm: EVMInterface, address: Address, reward: bigint, common: Common): Promise<Account>;
31
+ /**
32
+ * Returns the encoded tx receipt.
33
+ */
34
+ export declare function encodeReceipt(receipt: TxReceipt, txType: (typeof TransactionType)[keyof typeof TransactionType]): Uint8Array<ArrayBufferLike>;
35
+ //# sourceMappingURL=runBlock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runBlock.d.ts","sourceRoot":"","sources":["../../src/runBlock.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAG7D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EACL,OAAO,EACP,OAAO,EAmBR,MAAM,kBAAkB,CAAA;AAUzB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,KAAK,EAKV,YAAY,EACZ,cAAc,EAEd,SAAS,EACV,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAA;AAcjC;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAoSlF;AAuHD;;;;;;;;GAQG;AACH,wBAAsB,yBAAyB,CAC7C,EAAE,EAAE,EAAE,EACN,kBAAkB,EAAE,MAAM,EAC1B,UAAU,EAAE,UAAU,iBA6CvB;AAED,wBAAsB,+BAA+B,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAoDhG;AA0JD,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAMnF;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,YAAY,EACjB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAmClB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,+BAiB/D"}