@lodestar/state-transition 1.49.0-dev.ee7c2aa8ee → 1.49.0-dev.f1b14bce8f

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 (60) hide show
  1. package/lib/block/processAttestationPhase0.d.ts +1 -1
  2. package/lib/block/processAttestationPhase0.js +1 -1
  3. package/lib/cache/epochTransitionCache.d.ts +1 -1
  4. package/lib/cache/epochTransitionCache.d.ts.map +1 -1
  5. package/lib/cache/epochTransitionCache.js +2 -3
  6. package/lib/cache/epochTransitionCache.js.map +1 -1
  7. package/lib/epoch/processSlashings.d.ts.map +1 -1
  8. package/lib/epoch/processSlashings.js +2 -1
  9. package/lib/epoch/processSlashings.js.map +1 -1
  10. package/lib/metrics.d.ts +4 -5
  11. package/lib/metrics.d.ts.map +1 -1
  12. package/lib/metrics.js +2 -7
  13. package/lib/metrics.js.map +1 -1
  14. package/lib/stateTransition.d.ts.map +1 -1
  15. package/lib/stateTransition.js +2 -4
  16. package/lib/stateTransition.js.map +1 -1
  17. package/lib/stateView/beaconStateView.js +1 -1
  18. package/lib/stateView/beaconStateView.js.map +1 -1
  19. package/lib/stateView/computeNewStateRoot.d.ts +2 -2
  20. package/lib/stateView/computeNewStateRoot.d.ts.map +1 -1
  21. package/lib/stateView/computeNewStateRoot.js +4 -7
  22. package/lib/stateView/computeNewStateRoot.js.map +1 -1
  23. package/lib/stateView/interface.d.ts +1 -0
  24. package/lib/stateView/interface.d.ts.map +1 -1
  25. package/lib/stateView/interface.js.map +1 -1
  26. package/lib/stateView/nativeBeaconStateView.js +1 -1
  27. package/lib/stateView/nativeBeaconStateView.js.map +1 -1
  28. package/lib/testUtils/index.d.ts +0 -1
  29. package/lib/testUtils/index.d.ts.map +1 -1
  30. package/lib/testUtils/index.js +0 -1
  31. package/lib/testUtils/index.js.map +1 -1
  32. package/lib/util/epochShuffling.d.ts +0 -1
  33. package/lib/util/epochShuffling.d.ts.map +1 -1
  34. package/lib/util/epochShuffling.js +1 -15
  35. package/lib/util/epochShuffling.js.map +1 -1
  36. package/lib/util/seed.js +1 -2
  37. package/lib/util/seed.js.map +1 -1
  38. package/package.json +7 -8
  39. package/src/block/processAttestationPhase0.ts +1 -1
  40. package/src/cache/epochTransitionCache.ts +3 -4
  41. package/src/epoch/processSlashings.ts +3 -2
  42. package/src/metrics.ts +4 -9
  43. package/src/stateTransition.ts +2 -4
  44. package/src/stateView/beaconStateView.ts +1 -1
  45. package/src/stateView/computeNewStateRoot.ts +5 -10
  46. package/src/stateView/interface.ts +1 -0
  47. package/src/stateView/nativeBeaconStateView.ts +1 -1
  48. package/src/testUtils/index.ts +0 -1
  49. package/src/util/epochShuffling.ts +1 -19
  50. package/src/util/seed.ts +4 -4
  51. package/lib/testUtils/infura.d.ts +0 -3
  52. package/lib/testUtils/infura.d.ts.map +0 -1
  53. package/lib/testUtils/infura.js +0 -8
  54. package/lib/testUtils/infura.js.map +0 -1
  55. package/lib/testUtils/testFileCache.d.ts +0 -17
  56. package/lib/testUtils/testFileCache.d.ts.map +0 -1
  57. package/lib/testUtils/testFileCache.js +0 -99
  58. package/lib/testUtils/testFileCache.js.map +0 -1
  59. package/src/testUtils/infura.ts +0 -10
  60. package/src/testUtils/testFileCache.ts +0 -130
@@ -1,99 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { pubkeyCache } from "@chainsafe/lodestar-z/pubkeys";
4
- import { getClient } from "@lodestar/api";
5
- import { createChainForkConfig } from "@lodestar/config";
6
- import { networksChainConfig } from "@lodestar/config/networks";
7
- import { fetch } from "@lodestar/utils";
8
- import { testCachePath } from "./cache.js";
9
- import { getInfuraBeaconUrl } from "./infura.js";
10
- import { createCachedBeaconStateTest } from "./state.js";
11
- /**
12
- * Full link example:
13
- * ```
14
- * https://github.com/dapplion/ethereum-consensus-test-data/releases/download/v0.1.0/block_mainnet_3766821.ssz
15
- * ``` */
16
- const TEST_FILES_BASE_URL = "https://github.com/dapplion/ethereum-consensus-test-data/releases/download/v0.1.0";
17
- /**
18
- * Create a network config from known network params
19
- */
20
- export function getNetworkConfig(network) {
21
- const configNetwork = networksChainConfig[network];
22
- return createChainForkConfig(configNetwork);
23
- }
24
- /**
25
- * Download a state from Infura. Caches states in local fs by network and slot to only download once.
26
- */
27
- export async function getNetworkCachedState(network, slot, timeout) {
28
- const config = getNetworkConfig(network);
29
- const fileId = `state_${network}_${slot}.ssz`;
30
- const filepath = path.join(testCachePath, fileId);
31
- if (fs.existsSync(filepath)) {
32
- const stateSsz = fs.readFileSync(filepath);
33
- pubkeyCache.reset();
34
- return createCachedBeaconStateTest(config.getForkTypes(slot).BeaconState.deserializeToViewDU(stateSsz), config);
35
- }
36
- const stateSsz = await tryEach([
37
- () => downloadTestFile(fileId),
38
- () => {
39
- const client = getClient({ baseUrl: getInfuraBeaconUrl(network), globalInit: { timeoutMs: timeout ?? 300_000 } }, { config });
40
- return client.debug.getStateV2({ stateId: slot }).then((r) => {
41
- return r.ssz();
42
- });
43
- },
44
- ]);
45
- fs.writeFileSync(filepath, stateSsz);
46
- pubkeyCache.reset();
47
- return createCachedBeaconStateTest(config.getForkTypes(slot).BeaconState.deserializeToViewDU(stateSsz), config);
48
- }
49
- /**
50
- * Download a state from Infura. Caches states in local fs by network and slot to only download once.
51
- */
52
- export async function getNetworkCachedBlock(network, slot, timeout) {
53
- const config = getNetworkConfig(network);
54
- const fileId = `block_${network}_${slot}.ssz`;
55
- const filepath = path.join(testCachePath, fileId);
56
- if (fs.existsSync(filepath)) {
57
- const blockSsz = fs.readFileSync(filepath);
58
- return config.getForkTypes(slot).SignedBeaconBlock.deserialize(blockSsz);
59
- }
60
- const blockSsz = await tryEach([
61
- () => downloadTestFile(fileId),
62
- async () => {
63
- const client = getClient({ baseUrl: getInfuraBeaconUrl(network), globalInit: { timeoutMs: timeout ?? 300_000 } }, { config });
64
- return (await client.beacon.getBlockV2({ blockId: slot })).ssz();
65
- },
66
- ]);
67
- fs.writeFileSync(filepath, blockSsz);
68
- return config.getForkTypes(slot).SignedBeaconBlock.deserialize(blockSsz);
69
- }
70
- async function downloadTestFile(fileId) {
71
- const fileUrl = `${TEST_FILES_BASE_URL}/${fileId}`;
72
- // biome-ignore lint/suspicious/noConsole: We explicity need to log to console
73
- console.log(`Downloading file ${fileUrl}`);
74
- try {
75
- const res = await fetch(fileUrl);
76
- if (!res.ok) {
77
- throw new Error(`Error downloading ${fileUrl}: ${res.status} ${res.statusText}`);
78
- }
79
- return new Uint8Array(await res.arrayBuffer());
80
- }
81
- catch (e) {
82
- const error = e;
83
- error.message = `Error downloading ${fileUrl}: ${error.message}`;
84
- throw error;
85
- }
86
- }
87
- async function tryEach(promises) {
88
- const errors = [];
89
- for (let i = 0; i < promises.length; i++) {
90
- try {
91
- return await promises[i]();
92
- }
93
- catch (e) {
94
- errors.push(e);
95
- }
96
- }
97
- throw Error(errors.map((e, i) => `Error[${i}] ${e.message}`).join("\n"));
98
- }
99
- //# sourceMappingURL=testFileCache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"testFileCache.js","sourceRoot":"","sources":["../../src/testUtils/testFileCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAC,WAAW,EAAC,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EAAC,SAAS,EAAC,MAAM,eAAe,CAAC;AACxC,OAAO,EAAkB,qBAAqB,EAAC,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAc,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AAE3E,OAAO,EAAC,KAAK,EAAC,MAAM,iBAAiB,CAAC;AAEtC,OAAO,EAAC,aAAa,EAAC,MAAM,YAAY,CAAC;AACzC,OAAO,EAAC,kBAAkB,EAAC,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAC,2BAA2B,EAAC,MAAM,YAAY,CAAC;AAEvD;;;;SAIS;AACT,MAAM,mBAAmB,GAAG,mFAAmF,CAAC;AAEhH;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAoB;IACnD,MAAM,aAAa,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACnD,OAAO,qBAAqB,CAAC,aAAa,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAoB,EACpB,IAAY,EACZ,OAAgB;IAEhB,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,SAAS,OAAO,IAAI,IAAI,MAAM,CAAC;IAE9C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAElD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC3C,WAAW,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,2BAA2B,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;IAClH,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;QAC7B,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC9B,GAAG,EAAE;YACH,MAAM,MAAM,GAAG,SAAS,CACtB,EAAC,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,EAAC,SAAS,EAAE,OAAO,IAAI,OAAO,EAAC,EAAC,EACnF,EAAC,MAAM,EAAC,CACT,CAAC;YACF,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;gBACzD,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACrC,WAAW,CAAC,KAAK,EAAE,CAAC;IACpB,OAAO,2BAA2B,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;AAClH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAAoB,EACpB,IAAY,EACZ,OAAgB;IAEhB,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,SAAS,OAAO,IAAI,IAAI,MAAM,CAAC;IAE9C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAElD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;QAC7B,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC9B,KAAK,IAAI,EAAE;YACT,MAAM,MAAM,GAAG,SAAS,CACtB,EAAC,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,EAAC,SAAS,EAAE,OAAO,IAAI,OAAO,EAAC,EAAC,EACnF,EAAC,MAAM,EAAC,CACT,CAAC;YAEF,OAAO,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACjE,CAAC;KACF,CAAC,CAAC;IAEH,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACrC,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC3E,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,MAAc;IAC5C,MAAM,OAAO,GAAG,GAAG,mBAAmB,IAAI,MAAM,EAAE,CAAC;IACnD,8EAA8E;IAC9E,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,KAAK,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,CAAU,CAAC;QACzB,KAAK,CAAC,OAAO,GAAG,qBAAqB,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;QACjE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,OAAO,CAAI,QAA8B;IACtD,MAAM,MAAM,GAAY,EAAE,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,OAAO,MAAM,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,CAAU,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3E,CAAC"}
@@ -1,10 +0,0 @@
1
- import {NetworkName} from "@lodestar/config/networks";
2
-
3
- export function getInfuraBeaconUrl(network: NetworkName): string {
4
- const INFURA_ETH2_CREDENTIALS = process.env.INFURA_ETH2_CREDENTIALS;
5
- if (!INFURA_ETH2_CREDENTIALS) {
6
- throw Error("Must set ENV INFURA_ETH2_CREDENTIALS");
7
- }
8
-
9
- return `https://${INFURA_ETH2_CREDENTIALS}@eth2-beacon-${network}.infura.io`;
10
- }
@@ -1,130 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import {pubkeyCache} from "@chainsafe/lodestar-z/pubkeys";
4
- import {getClient} from "@lodestar/api";
5
- import {ChainForkConfig, createChainForkConfig} from "@lodestar/config";
6
- import {NetworkName, networksChainConfig} from "@lodestar/config/networks";
7
- import {SignedBeaconBlock} from "@lodestar/types";
8
- import {fetch} from "@lodestar/utils";
9
- import {CachedBeaconStateAllForks} from "../index.js";
10
- import {testCachePath} from "./cache.js";
11
- import {getInfuraBeaconUrl} from "./infura.js";
12
- import {createCachedBeaconStateTest} from "./state.js";
13
-
14
- /**
15
- * Full link example:
16
- * ```
17
- * https://github.com/dapplion/ethereum-consensus-test-data/releases/download/v0.1.0/block_mainnet_3766821.ssz
18
- * ``` */
19
- const TEST_FILES_BASE_URL = "https://github.com/dapplion/ethereum-consensus-test-data/releases/download/v0.1.0";
20
-
21
- /**
22
- * Create a network config from known network params
23
- */
24
- export function getNetworkConfig(network: NetworkName): ChainForkConfig {
25
- const configNetwork = networksChainConfig[network];
26
- return createChainForkConfig(configNetwork);
27
- }
28
-
29
- /**
30
- * Download a state from Infura. Caches states in local fs by network and slot to only download once.
31
- */
32
- export async function getNetworkCachedState(
33
- network: NetworkName,
34
- slot: number,
35
- timeout?: number
36
- ): Promise<CachedBeaconStateAllForks> {
37
- const config = getNetworkConfig(network);
38
- const fileId = `state_${network}_${slot}.ssz`;
39
-
40
- const filepath = path.join(testCachePath, fileId);
41
-
42
- if (fs.existsSync(filepath)) {
43
- const stateSsz = fs.readFileSync(filepath);
44
- pubkeyCache.reset();
45
- return createCachedBeaconStateTest(config.getForkTypes(slot).BeaconState.deserializeToViewDU(stateSsz), config);
46
- }
47
-
48
- const stateSsz = await tryEach([
49
- () => downloadTestFile(fileId),
50
- () => {
51
- const client = getClient(
52
- {baseUrl: getInfuraBeaconUrl(network), globalInit: {timeoutMs: timeout ?? 300_000}},
53
- {config}
54
- );
55
- return client.debug.getStateV2({stateId: slot}).then((r) => {
56
- return r.ssz();
57
- });
58
- },
59
- ]);
60
-
61
- fs.writeFileSync(filepath, stateSsz);
62
- pubkeyCache.reset();
63
- return createCachedBeaconStateTest(config.getForkTypes(slot).BeaconState.deserializeToViewDU(stateSsz), config);
64
- }
65
-
66
- /**
67
- * Download a state from Infura. Caches states in local fs by network and slot to only download once.
68
- */
69
- export async function getNetworkCachedBlock(
70
- network: NetworkName,
71
- slot: number,
72
- timeout?: number
73
- ): Promise<SignedBeaconBlock> {
74
- const config = getNetworkConfig(network);
75
- const fileId = `block_${network}_${slot}.ssz`;
76
-
77
- const filepath = path.join(testCachePath, fileId);
78
-
79
- if (fs.existsSync(filepath)) {
80
- const blockSsz = fs.readFileSync(filepath);
81
- return config.getForkTypes(slot).SignedBeaconBlock.deserialize(blockSsz);
82
- }
83
-
84
- const blockSsz = await tryEach([
85
- () => downloadTestFile(fileId),
86
- async () => {
87
- const client = getClient(
88
- {baseUrl: getInfuraBeaconUrl(network), globalInit: {timeoutMs: timeout ?? 300_000}},
89
- {config}
90
- );
91
-
92
- return (await client.beacon.getBlockV2({blockId: slot})).ssz();
93
- },
94
- ]);
95
-
96
- fs.writeFileSync(filepath, blockSsz);
97
- return config.getForkTypes(slot).SignedBeaconBlock.deserialize(blockSsz);
98
- }
99
-
100
- async function downloadTestFile(fileId: string): Promise<Uint8Array> {
101
- const fileUrl = `${TEST_FILES_BASE_URL}/${fileId}`;
102
- // biome-ignore lint/suspicious/noConsole: We explicity need to log to console
103
- console.log(`Downloading file ${fileUrl}`);
104
-
105
- try {
106
- const res = await fetch(fileUrl);
107
- if (!res.ok) {
108
- throw new Error(`Error downloading ${fileUrl}: ${res.status} ${res.statusText}`);
109
- }
110
- return new Uint8Array(await res.arrayBuffer());
111
- } catch (e) {
112
- const error = e as Error;
113
- error.message = `Error downloading ${fileUrl}: ${error.message}`;
114
- throw error;
115
- }
116
- }
117
-
118
- async function tryEach<T>(promises: (() => Promise<T>)[]): Promise<T> {
119
- const errors: Error[] = [];
120
-
121
- for (let i = 0; i < promises.length; i++) {
122
- try {
123
- return await promises[i]();
124
- } catch (e) {
125
- errors.push(e as Error);
126
- }
127
- }
128
-
129
- throw Error(errors.map((e, i) => `Error[${i}] ${e.message}`).join("\n"));
130
- }