@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.
- package/LICENSE +373 -0
- package/README.md +583 -0
- package/dist/cjs/bloom/index.d.ts +29 -0
- package/dist/cjs/bloom/index.d.ts.map +1 -0
- package/dist/cjs/bloom/index.js +76 -0
- package/dist/cjs/bloom/index.js.map +1 -0
- package/dist/cjs/buildBlock.d.ts +118 -0
- package/dist/cjs/buildBlock.d.ts.map +1 -0
- package/dist/cjs/buildBlock.js +363 -0
- package/dist/cjs/buildBlock.js.map +1 -0
- package/dist/cjs/constructors.d.ts +9 -0
- package/dist/cjs/constructors.d.ts.map +1 -0
- package/dist/cjs/constructors.js +75 -0
- package/dist/cjs/constructors.js.map +1 -0
- package/dist/cjs/emitEVMProfile.d.ts +9 -0
- package/dist/cjs/emitEVMProfile.d.ts.map +1 -0
- package/dist/cjs/emitEVMProfile.js +130 -0
- package/dist/cjs/emitEVMProfile.js.map +1 -0
- package/dist/cjs/index.d.ts +11 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +36 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/params.d.ts +3 -0
- package/dist/cjs/params.d.ts.map +1 -0
- package/dist/cjs/params.js +105 -0
- package/dist/cjs/params.js.map +1 -0
- package/dist/cjs/requests.d.ts +11 -0
- package/dist/cjs/requests.d.ts.map +1 -0
- package/dist/cjs/requests.js +208 -0
- package/dist/cjs/requests.js.map +1 -0
- package/dist/cjs/runBlock.d.ts +35 -0
- package/dist/cjs/runBlock.d.ts.map +1 -0
- package/dist/cjs/runBlock.js +797 -0
- package/dist/cjs/runBlock.js.map +1 -0
- package/dist/cjs/runFrameTx.d.ts +18 -0
- package/dist/cjs/runFrameTx.d.ts.map +1 -0
- package/dist/cjs/runFrameTx.js +313 -0
- package/dist/cjs/runFrameTx.js.map +1 -0
- package/dist/cjs/runTx.d.ts +18 -0
- package/dist/cjs/runTx.d.ts.map +1 -0
- package/dist/cjs/runTx.js +900 -0
- package/dist/cjs/runTx.js.map +1 -0
- package/dist/cjs/types.d.ts +452 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/vm.d.ts +75 -0
- package/dist/cjs/vm.d.ts.map +1 -0
- package/dist/cjs/vm.js +111 -0
- package/dist/cjs/vm.js.map +1 -0
- package/dist/esm/bloom/index.d.ts +29 -0
- package/dist/esm/bloom/index.d.ts.map +1 -0
- package/dist/esm/bloom/index.js +72 -0
- package/dist/esm/bloom/index.js.map +1 -0
- package/dist/esm/buildBlock.d.ts +118 -0
- package/dist/esm/buildBlock.d.ts.map +1 -0
- package/dist/esm/buildBlock.js +358 -0
- package/dist/esm/buildBlock.js.map +1 -0
- package/dist/esm/constructors.d.ts +9 -0
- package/dist/esm/constructors.d.ts.map +1 -0
- package/dist/esm/constructors.js +72 -0
- package/dist/esm/constructors.js.map +1 -0
- package/dist/esm/emitEVMProfile.d.ts +9 -0
- package/dist/esm/emitEVMProfile.d.ts.map +1 -0
- package/dist/esm/emitEVMProfile.js +127 -0
- package/dist/esm/emitEVMProfile.js.map +1 -0
- package/dist/esm/index.d.ts +11 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +11 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/params.d.ts +3 -0
- package/dist/esm/params.d.ts.map +1 -0
- package/dist/esm/params.js +102 -0
- package/dist/esm/params.js.map +1 -0
- package/dist/esm/requests.d.ts +11 -0
- package/dist/esm/requests.d.ts.map +1 -0
- package/dist/esm/requests.js +204 -0
- package/dist/esm/requests.js.map +1 -0
- package/dist/esm/runBlock.d.ts +35 -0
- package/dist/esm/runBlock.d.ts.map +1 -0
- package/dist/esm/runBlock.js +790 -0
- package/dist/esm/runBlock.js.map +1 -0
- package/dist/esm/runFrameTx.d.ts +18 -0
- package/dist/esm/runFrameTx.d.ts.map +1 -0
- package/dist/esm/runFrameTx.js +310 -0
- package/dist/esm/runFrameTx.js.map +1 -0
- package/dist/esm/runTx.d.ts +18 -0
- package/dist/esm/runTx.d.ts.map +1 -0
- package/dist/esm/runTx.js +896 -0
- package/dist/esm/runTx.js.map +1 -0
- package/dist/esm/types.d.ts +452 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/vm.d.ts +75 -0
- package/dist/esm/vm.d.ts.map +1 -0
- package/dist/esm/vm.js +107 -0
- package/dist/esm/vm.js.map +1 -0
- package/dist/tsconfig.prod.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.prod.esm.tsbuildinfo +1 -0
- package/package.json +117 -0
- package/src/bloom/index.ts +83 -0
- package/src/buildBlock.ts +470 -0
- package/src/constructors.ts +91 -0
- package/src/emitEVMProfile.ts +151 -0
- package/src/index.ts +10 -0
- package/src/params.ts +104 -0
- package/src/requests.ts +293 -0
- package/src/runBlock.ts +1022 -0
- package/src/runFrameTx.ts +411 -0
- package/src/runTx.ts +1203 -0
- package/src/types.ts +511 -0
- package/src/vm.ts +147 -0
|
@@ -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"}
|