Skip to content

Commit def26ac

Browse files
authored
chore: release v1.17.0 (#6523)
2 parents 14ea654 + 88b2564 commit def26ac

File tree

198 files changed

+2395
-1854
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

198 files changed

+2395
-1854
lines changed

.eslintrc.js

+15
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ module.exports = {
8080
"@typescript-eslint/no-unsafe-call": "error",
8181
"@typescript-eslint/no-unsafe-member-access": "error",
8282
"@typescript-eslint/no-unsafe-return": "error",
83+
"@typescript-eslint/no-unused-expressions": "error",
8384
"@typescript-eslint/no-unused-vars": ["error", {varsIgnorePattern: "^_", argsIgnorePattern: "^_"}],
8485
"@typescript-eslint/no-use-before-define": "off",
8586
"@typescript-eslint/restrict-template-expressions": [
@@ -133,6 +134,13 @@ module.exports = {
133134
"no-console": "error",
134135
"no-loss-of-precision": "error",
135136
"no-prototype-builtins": 0,
137+
"no-restricted-globals": [
138+
"error",
139+
{
140+
name: "fetch",
141+
message: "Please use 'fetch' from '@lodestar/api' instead.",
142+
},
143+
],
136144
"no-restricted-imports": [
137145
"error",
138146
{
@@ -209,6 +217,13 @@ module.exports = {
209217
"import/no-named-as-default-member": "off",
210218
},
211219
},
220+
{
221+
files: ["**/perf/**/*.ts"],
222+
rules: {
223+
// A lot of benchmarks just need to execute expressions without using the result
224+
"@typescript-eslint/no-unused-expressions": "off",
225+
},
226+
},
212227
{
213228
files: ["**/test/**/*.test.ts"],
214229
plugins: ["vitest"],

.github/workflows/test-sim-merge.yml

+1-27
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ jobs:
3232
with:
3333
node-version: 20
3434
check-latest: true
35-
cache: yarn
35+
cache: yarn
3636
- name: Node.js version
3737
id: node
3838
run: echo "v8CppApiVersion=$(node --print "process.versions.modules")" >> $GITHUB_OUTPUT
@@ -55,28 +55,9 @@ jobs:
5555
- name: Pull Geth
5656
run: docker pull $GETH_IMAGE
5757

58-
- name: Test Lodestar <> Geth interop
59-
run: yarn test:sim:merge-interop
60-
working-directory: packages/beacon-node
61-
env:
62-
EL_BINARY_DIR: ${{ env.GETH_IMAGE }}
63-
EL_SCRIPT_DIR: gethdocker
64-
ENGINE_PORT: 8551
65-
ETH_PORT: 8545
66-
TX_SCENARIOS: simple
67-
6858
- name: Pull Nethermind
6959
run: docker pull $NETHERMIND_IMAGE
7060

71-
- name: Test Lodestar <> Nethermind interop
72-
run: yarn test:sim:merge-interop
73-
working-directory: packages/beacon-node
74-
env:
75-
EL_BINARY_DIR: ${{ env.NETHERMIND_IMAGE }}
76-
EL_SCRIPT_DIR: netherminddocker
77-
ENGINE_PORT: 8551
78-
ETH_PORT: 8545
79-
8061
- name: Pull mergemock
8162
run: docker pull $MERGEMOCK_IMAGE
8263

@@ -90,13 +71,6 @@ jobs:
9071
ENGINE_PORT: 8551
9172
ETH_PORT: 8661
9273

93-
- name: Upload debug log test files
94-
if: ${{ always() }}
95-
uses: actions/upload-artifact@v4
96-
with:
97-
name: debug-test-logs
98-
path: packages/beacon-node/test-logs
99-
10074
- name: Pull geth withdrawals
10175
run: docker pull $GETH_WITHDRAWALS_IMAGE
10276

CONTRIBUTING.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ Thanks for your interest in contributing to Lodestar. It's people like you that
55
## Prerequisites
66

77
- :gear: [NodeJS](https://nodejs.org/) (LTS)
8-
- :toolbox: [Yarn](https://yarnpkg.com/)
8+
- :toolbox: [Yarn](https://classic.yarnpkg.com/lang/en/)
99

1010
### MacOS Specifics
1111

@@ -32,7 +32,7 @@ To run tests:
3232
- :test_tube: Run `yarn check-types` to check TypeScript types.
3333
- :test_tube: Run `yarn lint` to run the linter (ESLint).
3434

35-
Note that to run `test:e2e`, first ensure that the environment is correctly setup by running the `run_e2e_env.sh` script.
35+
Note that to run `test:e2e`, first ensure that the environment is correctly setup by running the `run_e2e_env.sh` script. This script requires a running docker engine.
3636

3737
```sh
3838
./scripts/run_e2e_env.sh start

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
## Prerequisites
3030

3131
- :gear: [NodeJS](https://nodejs.org/) (LTS)
32-
- :toolbox: [Yarn](https://yarnpkg.com/)
32+
- :toolbox: [Yarn](https://classic.yarnpkg.com/lang/en/)
3333

3434
###### Developer Quickstart:
3535

docs/pages/contribution/testing/integration-tests.md

-2
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ The images used by this test during CI are:
2020
- `GETH_WITHDRAWALS_IMAGE: g11tech/geth:withdrawalsfeb8`
2121
- `ETHEREUMJS_WITHDRAWALS_IMAGE: g11tech/ethereumjs:blobs-b6b63`
2222

23-
#### `test:sim:merge-interop`
24-
2523
#### `test:sim:mergemock`
2624

2725
#### `yarn test:sim:blobs`

docs/pages/validator-management/vc-configuration.md

+37-39
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,24 @@ The following instructions are for stakers utilizing the Lodestar validator clie
44

55
[TOC]
66

7-
## Wallet configuration
8-
9-
A wallet helps to manage many validators from a group of 12/24 words (also known as a "mnemonic" or "recovery phrase"). All validators and withdrawal keys can be re-generated from a backed-up mnemonic.
10-
11-
The mnemonic is randomly generated during wallet creation and printed out to the terminal. It's important to make one or more backups of the mnemonic to ensure your ETH wallets are not lost in the case of data loss.
12-
13-
<!-- prettier-ignore-start -->
14-
!!! danger
15-
It is very important to keep your mnemonic private as it represents the ultimate control of your ETH wallets.
16-
<!-- prettier-ignore-end -->
7+
## Setup your validator
178

18-
### Create a wallet
9+
Validators are represented by a BLS keypair. Use your generated mnemonic from one of the tools above to generate the keystore files required for validator duties on Ethereum using the Lodestar validator client.
1910

20-
Lodestar has removed its functionality to create wallets.
11+
### Create a keystore
2112

22-
To create a wallet, we recommend using the official [`staking-deposit-cli`](https://github.com/ethereum/staking-deposit-cli/releases) from the Ethereum Foundation for users comfortable with command line interfaces.
13+
To create a keystore, we recommend using the official [Staking Deposit CLI](https://github.com/ethereum/staking-deposit-cli/releases) from the Ethereum Foundation for users comfortable with command line interfaces.
2314

2415
Alternatively, for a graphical user interface, you can use the [Stakehouse Wagyu Key Generator](https://wagyu.gg/) developed by members of the EthStaker community.
2516

2617
<!-- prettier-ignore-start -->
27-
!!! info
28-
These tools will generate files for staking validators as well as the important mnemonic. This mnemonic must be handled and stored securely.
18+
!!! warning
19+
These tools will generate keystore files for staking validators as well as the important mnemonic. This mnemonic must be handled and stored securely.
2920
<!-- prettier-ignore-end -->
3021

31-
## Setup your validator
32-
33-
Validators are represented by a BLS keypair. Use your generated mnemonic from one of the tools above to generate the keystore files required for validator duties on Lodestar.
22+
### Import a validator keystore to Lodestar
3423

35-
### Import a validator keystore from your wallet to Lodestar
36-
37-
To import a validator keystore that was created via one of the methods described above, you must locate the validator JSON keystores exported by those tools (ex. `keystore-m_12381_3600_0_0_0-1654128694.json`).
24+
To import a validator JSON keystore that was created via one of the methods described above, you must locate the file for import (ex. `keystore-m_12381_3600_0_0_0-1654128694.json`).
3825

3926
Inside the keystore JSON file, you should have an [EIP-2335 keystore file](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2335.md#json-schema).
4027

@@ -60,7 +47,7 @@ _Plaintext passphrase file import_
6047
!!! info
6148
The interactive passphrase import method will prompt every keystore in the `validator_keys` folder for import and will ask for the individual password for each keystore. **This method will allow you to import multiple keystores with different passwords.**
6249

63-
The plaintext passphrase file import method will allow to import all keystores in the `validator_keys` folder with the same password contained in `password.txt` for efficiency.
50+
The plaintext passphrase file import method will allow you to import all keystores in the `validator_keys` folder encrypted with the same password contained in `password.txt` for efficiency.
6451
<!-- prettier-ignore-end -->
6552

6653
Once imported with either method, these keystores will be automatically loaded when you start the validator. To list the imported keystores, use the `validator list` command.
@@ -118,9 +105,19 @@ Example 3: Setting a `--builder.boostFactor=100` is the same as signaling `--bui
118105

119106
### Submit a validator deposit
120107

121-
Please use the official Ethereum Launchpad to perform your deposits
108+
Please use the official Ethereum Launchpad to perform your deposits. Ensure your deposits are sent to the proper beacon chain deposit address on the correct network.
109+
110+
#### Mainnet
111+
- [Ethereum Mainnet Launchpad](https://launchpad.ethereum.org)
112+
- [Beacon Chain Deposit Contract](https://etherscan.io/address/0x00000000219ab540356cbb839cbe05303d7705fa) `0x00000000219ab540356cBB839Cbe05303d7705Fa`
113+
114+
#### Holesky Testnet
115+
- [Ethereum Holesky Testnet Launchpad](https://holesky.launchpad.ethereum.org)
116+
- [Holesky Beacon Chain Deposit Contract](https://holesky.etherscan.io/address/0x4242424242424242424242424242424242424242) `0x4242424242424242424242424242424242424242`
122117

123-
- Ethereum Foundation launchpad: <https://launchpad.ethereum.org>
118+
#### Ephemery Testnet
119+
- [Ethereum Ephemery Testnet Launchpad](https://launchpad.ephemery.dev/)
120+
- [Ephemeral Testnet Resources](https://ephemery.dev/)
124121

125122
## Run the validator
126123

@@ -133,19 +130,20 @@ To start a Lodestar validator run the command:
133130
You should see confirmation that modules have started.
134131

135132
```txt
136-
Nov-29 10:47:13.647[] info: Lodestar network=sepolia, version=v1.2.2/f093b46, commit=f093b468ec3ab0dbbe8e2d2c8175f52ad88aa35f
137-
Nov-29 10:47:13.649[] info: Connecting to LevelDB database path=/home/user/.local/share/lodestar/sepolia/validator-db
138-
Nov-29 10:47:51.732[] info: 3 local keystores
139-
Nov-29 10:47:51.735[] info: 0x800f6be579b31ea950a50be65f7de8f678b23b7466579c01ac26ebf9c19599fb2b446da40ad4fc92c6109fcd6793303f
140-
Nov-29 10:47:51.735[] info: 0x81337ebe90d6942d8b61922ea880c4d28ebc745ddc10a1acc85b745a15c6c8754af1a73b1b3483b6a5024b783510b35c
141-
Nov-29 10:47:51.757[] info: 0xb95fc0ec39596deee2c4363f57bb4786f5bb8dfb345c1e5b14e2927be482615971d0d81f9a88b3389fac7079b3cb2f46
142-
Nov-29 10:47:51.776[] info: Genesis fetched from the beacon node
143-
Nov-29 10:47:51.781[] info: Verified connected beacon node and validator have same the config
144-
Nov-29 10:47:51.837[] info: Verified connected beacon node and validator have the same genesisValidatorRoot
145-
Nov-29 10:47:51.914[] info: Discovered new validators count=100
146-
Nov-29 10:48:00.197[] info: Published SyncCommitteeMessage slot=1165140, count=27
147-
Nov-29 10:48:02.296[] info: Published attestations slot=1165140, count=6
148-
Nov-29 10:48:08.122[] info: Published aggregateAndProofs slot=1165140, index=0, count=2
149-
Nov-29 10:48:12.102[] info: Published SyncCommitteeMessage slot=1165141, count=27
150-
Nov-29 10:48:14.236[] info: Published attestations slot=1165141, count=4
133+
Mar-01 03:06:35.048[] info: Lodestar network=holesky, version=v1.16.0/6ad9740, commit=6ad9740a085574306cf46c7642e749d6ec9a4264
134+
Mar-01 03:06:35.050[] info: Connecting to LevelDB database path=/keystoresDir/validator-db-holesky
135+
Mar-01 03:06:35.697[] info: 100% of keystores imported. current=2 total=2 rate=1318.68keys/m
136+
Mar-01 03:06:35.698[] info: 2 local keystores
137+
Mar-01 03:06:35.698[] info: 0xa6fcfca12e1db6c7341d82327010cd57224dc239d1c5e4fb18286cc32edb877d813c5af1c870d474aef7b3ff7ab927ea
138+
Mar-01 03:06:35.698[] info: 0x8f868e53bbe1451bcf6d42c9ab6d292cbd7fbfa09c59b6b99c1dd6a4977e2e7b4b752c328784ca2788dd6f63ffcbdb7e
139+
Mar-01 03:06:35.732[] info: Beacon node urls=http://127.0.0.1:9596
140+
Mar-01 03:09:23.813[] info: Genesis fetched from the beacon node
141+
Mar-01 03:09:23.816[] info: Verified connected beacon node and validator have same the config
142+
Mar-01 03:09:23.818[] info: Verified connected beacon node and validator have the same genesisValidatorRoot
143+
Mar-01 03:09:23.818[] info: Initializing validator useProduceBlockV3=deneb+, broadcastValidation=gossip, defaultBuilderSelection=executiononly, suggestedFeeRecipient=0xeeef273281fB83F56182eE960aA4bAfe7fE075DE, strictFeeRecipientCheck=false
144+
Mar-01 03:09:23.830[] info: Validator seen on beacon chain validatorIndex=1234567, pubKey=0xa6fcfca12e1db6c7341d82327010cd57224dc239d1c5e4fb18286cc32edb877d813c5af1c870d474aef7b3ff7ab927ea
145+
Mar-01 03:09:23.830[] info: Validator seen on beacon chain validatorIndex=1234568, pubKey=0x8f868e53bbe1451bcf6d42c9ab6d292cbd7fbfa09c59b6b99c1dd6a4977e2e7b4b752c328784ca2788dd6f63ffcbdb7e
146+
Mar-01 03:09:23.830[] info: Validator statuses active=2, total=2
147+
Mar-01 03:15:50.191[] info: Published attestations slot=1113379, count=1
148+
Mar-01 03:16:02.728[] info: Published attestations slot=1113380, count=1
151149
```

lerna.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
],
55
"npmClient": "yarn",
66
"useNx": true,
7-
"version": "1.16.0",
7+
"version": "1.17.0",
88
"stream": true,
99
"command": {
1010
"version": {

package.json

+9-8
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "root",
33
"private": true,
44
"engines": {
5-
"node": ">=18.17.0 <19 || >=20.1.0"
5+
"node": ">=20.1.0 <21"
66
},
77
"workspaces": [
88
"packages/*"
@@ -49,15 +49,15 @@
4949
"@chainsafe/eslint-plugin-node": "^11.2.3",
5050
"@dapplion/benchmark": "^0.2.4",
5151
"@types/mocha": "^10.0.6",
52-
"@types/node": "^20.6.5",
53-
"@typescript-eslint/eslint-plugin": "6.21.0",
54-
"@typescript-eslint/parser": "6.21.0",
52+
"@types/node": "^20.11.20",
53+
"@typescript-eslint/eslint-plugin": "^7.1.0",
54+
"@typescript-eslint/parser": "^7.1.0",
5555
"@vitest/coverage-v8": "^1.2.1",
5656
"@vitest/browser": "^1.2.1",
5757
"crypto-browserify": "^3.12.0",
5858
"dotenv": "^16.4.1",
5959
"electron": "^26.2.2",
60-
"eslint": "^8.56.0",
60+
"eslint": "^8.57.0",
6161
"eslint-import-resolver-typescript": "^3.6.1",
6262
"eslint-plugin-import": "^2.29.1",
6363
"eslint-plugin-prettier": "^5.1.3",
@@ -70,13 +70,13 @@
7070
"node-gyp": "^9.4.0",
7171
"npm-run-all": "^4.1.5",
7272
"path-browserify": "^1.0.1",
73-
"prettier": "^3.0.3",
73+
"prettier": "^3.2.5",
7474
"process": "^0.11.10",
7575
"stream-browserify": "^3.0.0",
7676
"stream-http": "^3.2.0",
7777
"supertest": "^6.3.3",
78-
"ts-node": "^10.9.1",
79-
"typescript": "^5.2.2",
78+
"ts-node": "^10.9.2",
79+
"typescript": "^5.3.3",
8080
"typescript-docs-verifier": "^2.5.0",
8181
"vite-plugin-node-polyfills": "^0.19.0",
8282
"vite-plugin-top-level-await": "^1.4.1",
@@ -86,6 +86,7 @@
8686
"webdriverio": "^8.28.0"
8787
},
8888
"resolutions": {
89+
"@puppeteer/browsers": "^2.1.0",
8990
"dns-over-http-resolver": "^2.1.1",
9091
"loupe": "^2.3.6",
9192
"vite": "^5.0.0"

packages/api/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ api.beacon
3636
## Prerequisites
3737

3838
- [NodeJS](https://nodejs.org/) (LTS)
39-
- [Yarn](https://yarnpkg.com/)
39+
- [Yarn](https://classic.yarnpkg.com/lang/en/)
4040

4141
## What you need
4242

packages/api/package.json

+6-6
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
"bugs": {
1212
"url": "https://github.com/ChainSafe/lodestar/issues"
1313
},
14-
"version": "1.16.0",
14+
"version": "1.17.0",
1515
"type": "module",
1616
"exports": {
1717
".": {
@@ -68,11 +68,11 @@
6868
},
6969
"dependencies": {
7070
"@chainsafe/persistent-merkle-tree": "^0.6.1",
71-
"@chainsafe/ssz": "^0.14.0",
72-
"@lodestar/config": "^1.16.0",
73-
"@lodestar/params": "^1.16.0",
74-
"@lodestar/types": "^1.16.0",
75-
"@lodestar/utils": "^1.16.0",
71+
"@chainsafe/ssz": "^0.14.3",
72+
"@lodestar/config": "^1.17.0",
73+
"@lodestar/params": "^1.17.0",
74+
"@lodestar/types": "^1.17.0",
75+
"@lodestar/utils": "^1.17.0",
7676
"eventsource": "^2.0.2",
7777
"qs": "^6.11.1"
7878
},

packages/api/src/beacon/routes/beacon/index.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {RoutesData, ReturnTypes, reqEmpty, ContainerData} from "../../../utils/i
66
import * as block from "./block.js";
77
import * as pool from "./pool.js";
88
import * as state from "./state.js";
9+
import * as rewards from "./rewards.js";
910

1011
// See /packages/api/src/routes/index.ts for reasoning and instructions to add new routes
1112

@@ -15,9 +16,11 @@ import * as state from "./state.js";
1516
export * as block from "./block.js";
1617
export * as pool from "./pool.js";
1718
export * as state from "./state.js";
19+
export * as rewards from "./rewards.js";
1820
export {BroadcastValidation} from "./block.js";
1921
export type {BlockId, BlockHeaderResponse} from "./block.js";
2022
export type {AttestationFilters} from "./pool.js";
23+
export type {BlockRewards, SyncCommitteeRewards} from "./rewards.js";
2124
// TODO: Review if re-exporting all these types is necessary
2225
export type {
2326
StateId,
@@ -34,7 +37,8 @@ export type {
3437

3538
export type Api = block.Api &
3639
pool.Api &
37-
state.Api & {
40+
state.Api &
41+
rewards.Api & {
3842
getGenesis(): Promise<ApiClientResponse<{[HttpStatusCode.OK]: {data: phase0.Genesis}}>>;
3943
};
4044

@@ -43,6 +47,7 @@ export const routesData: RoutesData<Api> = {
4347
...block.routesData,
4448
...pool.routesData,
4549
...state.routesData,
50+
...rewards.routesData,
4651
};
4752

4853
export type ReqTypes = {
@@ -56,6 +61,7 @@ export function getReqSerializers(config: ChainForkConfig) {
5661
...block.getReqSerializers(config),
5762
...pool.getReqSerializers(),
5863
...state.getReqSerializers(),
64+
...rewards.getReqSerializers(),
5965
};
6066
}
6167

@@ -65,5 +71,6 @@ export function getReturnTypes(): ReturnTypes<Api> {
6571
...block.getReturnTypes(),
6672
...pool.getReturnTypes(),
6773
...state.getReturnTypes(),
74+
...rewards.getReturnTypes(),
6875
};
6976
}

0 commit comments

Comments
 (0)