diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index de212fef4..a34327c3a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,8 +11,13 @@ jobs: name: Build sedge strategy: matrix: - go: ["1.19"] - os: [ubuntu-latest, windows-latest, macos-latest] + include: + - os: ubuntu-latest + go: '1.19' + - os: macos-latest + go: '1.19' + - os: windows-latest + go: '1.21' runs-on: ${{ matrix.os }} steps: diff --git a/.github/workflows/check-version.yml b/.github/workflows/check-version.yml index e3735395c..f87ae37fd 100644 --- a/.github/workflows/check-version.yml +++ b/.github/workflows/check-version.yml @@ -4,6 +4,7 @@ on: push: branches: - develop + workflow_dispatch: jobs: build: diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml index 61751308c..3650eccef 100644 --- a/.github/workflows/unit_tests.yml +++ b/.github/workflows/unit_tests.yml @@ -11,8 +11,11 @@ jobs: name: Run unit tests strategy: matrix: - go: ["1.19"] - os: [ubuntu-latest, windows-latest] + include: + - os: ubuntu-latest + go: '1.19' + - os: windows-latest + go: '1.21' runs-on: ${{ matrix.os }} steps: diff --git a/CHANGELOG.md b/CHANGELOG.md index 99c838d67..3433c9be9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [v1.3.0] - 2023-12-11 + +### Added + +- New `--latest` flag to `sedge generate` subcommands to use the latest version of the image in the clients. +- Integrate Holesky network. + +### Fixed + +- Remove TTD of the params, test cases, command flags and geth patch for custom testnets. + +### Changed + +- Remove default bootnodes for networks managed by clients. +- Remove custom configurations for Chiado and instead use the clients configuration. +- Update client images. + ## [v1.2.3] - 2023-08-16 ### Added @@ -109,8 +126,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Rename sedge data directory name to `sedge-data` instead of `docker-compose-scripts`. - Update mev-boost relay URLs. - Fixed validator restart failure. Validator never restarts, but has a better and safer start-up method: - - Validator waits a grace period (2 epochs) before starting. - - Validator waits for the consensus sync to finish: verifying that the `/eth/v1/node/health` consensus endpoint + - Validator waits a grace period (2 epochs) before starting. + - Validator waits for the consensus sync to finish: verifying that the `/eth/v1/node/health` consensus endpoint returns with the HTTP code 200 in the newly added `validator-blocker` docker-compose service. This replace the older track sync method. - Updated installation script for docker and docker compose in Linux flavours. diff --git a/README.md b/README.md index 29901de5e..062054293 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ Sedge is a one-click node setup tool for PoS network/chain validators and nodes - [Mainnet](#mainnet) - [Sepolia](#sepolia) - [Goerli](#goerli) + - [Holesky](#holesky) - [Gnosis](#gnosis) - [Chiado (Gnosis testnet)](#chiado-gnosis-testnet) - [CL clients with Mev-Boost](#cl-clients-with-mev-boost) @@ -156,6 +157,15 @@ Users acknowledge that no warranty is being made of a successful installation. S | Erigon | Prysm | Prysm | | Besu | Teku | Teku | +### Holesky + +| Execution | Consensus | Validator | +| ---------- |------------|------------| +| Geth | Lighthouse | Lighthouse | +| Nethermind | Lodestar | Lodestar | +| Erigon | Teku | Teku | +| Besu | Prysm | Prysm | + ### Gnosis | Execution | Consensus | Validator | diff --git a/cli/actions/generation_test.go b/cli/actions/generation_test.go index 7af59de28..af6896b9b 100644 --- a/cli/actions/generation_test.go +++ b/cli/actions/generation_test.go @@ -29,6 +29,8 @@ import ( "testing" "time" + "github.com/distribution/reference" + "github.com/NethermindEth/sedge/cli/actions" "github.com/NethermindEth/sedge/configs" "github.com/NethermindEth/sedge/internal/pkg/clients" @@ -250,6 +252,17 @@ func TestGenerateDockerCompose(t *testing.T) { ContainerTag: "sampleTag", }, }, + genTestData{ + name: fmt.Sprintf("execution: %s, consensus: %s, validator: %s, network: %s, no validator, with latest", executionCl, consensusCl, consensusCl, network), + genData: generate.GenData{ + ExecutionClient: &clients.Client{Name: executionCl, Type: "execution"}, + ConsensusClient: &clients.Client{Name: consensusCl, Type: "consensus"}, + Services: []string{"execution", "consensus"}, + Network: network, + ContainerTag: "sampleTag", + LatestVersion: true, + }, + }, ) } } @@ -303,6 +316,16 @@ func TestGenerateDockerCompose(t *testing.T) { assert.Equal(t, services.DefaultSedgeExecutionClient+"-sampleTag", cmpData.Services.Execution.ContainerName) } + // Check ecImage has the right format + ecImageVersion := envData["EC_IMAGE_VERSION"] + named, err := reference.ParseNormalizedNamed(ecImageVersion) + assert.NoError(t, err, "invalid image", ecImageVersion) + + // Test that the execution image is set to latest if flag --latest is provided + if tc.genData.LatestVersion { + assert.True(t, strings.HasSuffix(named.String(), ":latest")) + } + // Check that mev-boost service is not set when execution only if tc.genData.ValidatorClient == nil && tc.genData.ConsensusClient == nil { assert.Nil(t, cmpData.Services.Mevboost) @@ -326,6 +349,15 @@ func TestGenerateDockerCompose(t *testing.T) { assert.True(t, contains(t, cmpData.Services.Consensus.Command, tc.genData.CheckpointSyncUrl), "Checkpoint Sync URL not found in consensus service command: %s", cmpData.Services.Consensus.Command) } + // Check ccImage has the right format + ccImageVersion := envData["CC_IMAGE_VERSION"] + named, err := reference.ParseNormalizedNamed(ccImageVersion) + assert.NoError(t, err, "invalid image", ccImageVersion) + + // Test that the consensus image is set to latest if flag --latest is provided + if tc.genData.LatestVersion { + assert.True(t, strings.HasSuffix(named.String(), ":latest")) + } // Validate Execution API and AUTH URLs apiEndpoint, authEndpoint := envData["EC_API_URL"], envData["EC_AUTH_URL"] if tc.genData.ExecutionApiUrl != "" { @@ -378,6 +410,16 @@ func TestGenerateDockerCompose(t *testing.T) { prysmURL = strings.TrimPrefix(prysmURL, "http://") prysmURL = strings.TrimPrefix(prysmURL, "https://") + // Check vlImage has the right format + vlImageVersion := envData["VL_IMAGE_VERSION"] + named, err := reference.ParseNormalizedNamed(vlImageVersion) + assert.NoError(t, err, "invalid image", vlImageVersion) + + // Test that the consensus image is set to latest if flag --latest is provided + if tc.genData.LatestVersion { + assert.True(t, strings.HasSuffix(named.String(), ":latest")) + } + // Check Consensus API URL is set and is valid uri, err := url.ParseRequestURI(envData["CC_API_URL"]) assert.Nil(t, err) diff --git a/cli/actions/importKeys.go b/cli/actions/importKeys.go index 55d2ba14f..d12cfb290 100644 --- a/cli/actions/importKeys.go +++ b/cli/actions/importKeys.go @@ -229,7 +229,7 @@ func setupLodestarValidatorImport(dockerClient client.APIClient, serviceManager // CMD var preset string switch options.Network { - case "mainnet", "goerli", "sepolia": + case "mainnet", "goerli", "sepolia", "holesky": preset = "mainnet" case "gnosis", "chiado": preset = "gnosis" diff --git a/cli/actions/jwt_secrets.go b/cli/actions/jwt_secrets.go index 77c2e8cc3..0b71d8fa3 100644 --- a/cli/actions/jwt_secrets.go +++ b/cli/actions/jwt_secrets.go @@ -38,7 +38,7 @@ func (s *sedgeActions) CreateJWTSecrets(options CreateJWTSecretOptions) (string, // Generate JWT secret if necessary var err error jwtPath := options.JWTPath - if jwtPath == "" && configs.NetworksConfigs()[options.Network].RequireJWT { + if jwtPath == "" && !configs.NetworksConfigs()[options.Network].NoJWT { return handleJWTSecret(options.GenerationPath) } else if filepath.IsAbs(jwtPath) { // Ensure jwtPath is absolute if jwtPath, err = filepath.Abs(jwtPath); err != nil { diff --git a/cli/cli.go b/cli/cli.go index 4a9096e11..1903ac560 100644 --- a/cli/cli.go +++ b/cli/cli.go @@ -44,6 +44,7 @@ const ( NetworkSepolia = "sepolia" NetworkGnosis = "gnosis" NetworkChiado = "chiado" + NetworkHolesky = "holesky" NetworkCustom = "custom" NodeTypeFullNode = "full-node" @@ -136,7 +137,6 @@ func setupFullNode(p ui.Prompter, o *CliCmdOptions, a actions.SedgeActions, deps inputCustomNetworkConfig, inputCustomChainSpec, inputCustomGenesis, - inputCustomTTD, inputCustomDeployBlock, inputExecutionBootNodes, inputConsensusBootNodes, @@ -209,7 +209,6 @@ func setupExecutionNode(p ui.Prompter, o *CliCmdOptions, a actions.SedgeActions, if o.genData.Network == NetworkCustom { if err := runPromptActions(p, o, inputCustomChainSpec, - inputCustomTTD, inputExecutionBootNodes, ); err != nil { return err @@ -617,7 +616,7 @@ func runPromptActions(p ui.Prompter, o *CliCmdOptions, actions ...promptAction) } func selectNetwork(p ui.Prompter, o *CliCmdOptions) error { - options := []string{NetworkMainnet, NetworkGoerli, NetworkSepolia, NetworkGnosis, NetworkChiado} + options := []string{NetworkMainnet, NetworkGoerli, NetworkSepolia, NetworkGnosis, NetworkChiado, NetworkHolesky} index, err := p.Select("Select network", "", options) if err != nil { return err @@ -662,10 +661,6 @@ func selectExecutionClient(p ui.Prompter, o *CliCmdOptions) (err error) { Type: "execution", } o.genData.ExecutionClient.SetImageOrDefault("") - // Patch Geth image if network needs TTD to be set - if o.genData.ExecutionClient.Name == "geth" && o.genData.Network == NetworkMainnet { - o.genData.ExecutionClient.Image = "ethereum/client-go:v1.10.26" - } return nil } @@ -826,11 +821,6 @@ func inputCustomGenesis(p ui.Prompter, o *CliCmdOptions) (err error) { return absPathInPlace(&o.genData.CustomGenesisPath) } -func inputCustomTTD(p ui.Prompter, o *CliCmdOptions) (err error) { - o.genData.CustomTTD, err = p.Input("Custom TTD (Terminal Total Difficulty)", "0", false, ui.DigitsStringValidator) - return -} - func inputCustomDeployBlock(p ui.Prompter, o *CliCmdOptions) (err error) { o.genData.CustomDeployBlock, err = p.Input("Custom deploy block", "0", false, ui.DigitsStringValidator) return diff --git a/cli/cli_test.go b/cli/cli_test.go index f82701e66..94a11f47b 100644 --- a/cli/cli_test.go +++ b/cli/cli_test.go @@ -94,7 +94,7 @@ func TestCli(t *testing.T) { } sedgeActions.EXPECT().GetCommandRunner().Return(&test.SimpleCMDRunner{}) gomock.InOrder( - prompter.EXPECT().Select("Select network", "", []string{NetworkMainnet, NetworkGoerli, NetworkSepolia, NetworkGnosis, NetworkChiado}).Return(0, nil), + prompter.EXPECT().Select("Select network", "", []string{NetworkMainnet, NetworkGoerli, NetworkSepolia, NetworkGnosis, NetworkChiado, NetworkHolesky}).Return(0, nil), prompter.EXPECT().Select("Select node type", "", []string{NodeTypeFullNode, NodeTypeExecution, NodeTypeConsensus, NodeTypeValidator}).Return(0, nil), prompter.EXPECT().Input("Generation path", configs.DefaultAbsSedgeDataPath, false, nil).Return(generationPath, nil), prompter.EXPECT().Input("Container tag, sedge will add to each container and the network, a suffix with the tag", "", false, nil).Return("tag", nil), @@ -164,7 +164,7 @@ func TestCli(t *testing.T) { JWTSecretPath: filepath.Join(generationPath, "jwtsecret"), } gomock.InOrder( - prompter.EXPECT().Select("Select network", "", []string{NetworkMainnet, NetworkGoerli, NetworkSepolia, NetworkGnosis, NetworkChiado}).Return(0, nil), + prompter.EXPECT().Select("Select network", "", []string{NetworkMainnet, NetworkGoerli, NetworkSepolia, NetworkGnosis, NetworkChiado, NetworkHolesky}).Return(0, nil), prompter.EXPECT().Select("Select node type", "", []string{NodeTypeFullNode, NodeTypeExecution, NodeTypeConsensus, NodeTypeValidator}).Return(0, nil), prompter.EXPECT().Input("Generation path", configs.DefaultAbsSedgeDataPath, false, nil).Return(generationPath, nil), prompter.EXPECT().Input("Container tag, sedge will add to each container and the network, a suffix with the tag", "", false, nil).Return("tag", nil), @@ -183,6 +183,49 @@ func TestCli(t *testing.T) { ) }, }, + { + name: "full node without validator holesky", + setup: func(t *testing.T, sedgeActions *sedge_mocks.MockSedgeActions, prompter *sedge_mocks.MockPrompter, depsMgr *sedge_mocks.MockDependenciesManager) { + generationPath := t.TempDir() + genData := generate.GenData{ + Services: []string{"execution", "consensus"}, + ExecutionClient: &clients.Client{ + Name: "nethermind", + Type: "execution", + Image: configs.ClientImages.Execution.Nethermind.String(), + }, + ConsensusClient: &clients.Client{ + Name: "lodestar", + Type: "consensus", + Image: configs.ClientImages.Consensus.Lodestar.String(), + }, + Network: "holesky", + CheckpointSyncUrl: "https://checkpoint-sync.holesky.ethpandaops.io/", + FeeRecipient: "0x2d07a21ebadde0c13e6b91022a7e5722eb6bf5d5", + MapAllPorts: true, + ContainerTag: "tag", + JWTSecretPath: filepath.Join(generationPath, "jwtsecret"), + } + gomock.InOrder( + prompter.EXPECT().Select("Select network", "", []string{NetworkMainnet, NetworkGoerli, NetworkSepolia, NetworkGnosis, NetworkChiado, NetworkHolesky}).Return(5, nil), + prompter.EXPECT().Select("Select node type", "", []string{NodeTypeFullNode, NodeTypeExecution, NodeTypeConsensus, NodeTypeValidator}).Return(0, nil), + prompter.EXPECT().Input("Generation path", configs.DefaultAbsSedgeDataPath, false, nil).Return(generationPath, nil), + prompter.EXPECT().Input("Container tag, sedge will add to each container and the network, a suffix with the tag", "", false, nil).Return("tag", nil), + prompter.EXPECT().Confirm("Do you want to set up a validator?", true).Return(false, nil), + prompter.EXPECT().Select("Select execution client", "", ETHClients["execution"]).Return(0, nil), + prompter.EXPECT().Select("Select consensus client", "", ETHClients["consensus"]).Return(3, nil), + prompter.EXPECT().InputURL("Checkpoint sync URL", configs.NetworksConfigs()[genData.Network].CheckpointSyncURL, false).Return("https://checkpoint-sync.holesky.ethpandaops.io/", nil), + prompter.EXPECT().EthAddress("Please enter the Fee Recipient address (press enter to skip it)", "", false).Return("0x2d07a21ebadde0c13e6b91022a7e5722eb6bf5d5", nil), + prompter.EXPECT().Confirm("Do you want to expose all ports?", false).Return(true, nil), + prompter.EXPECT().Select("Select JWT source", "", []string{SourceTypeCreate, SourceTypeExisting}).Return(0, nil), + sedgeActions.EXPECT().Generate(gomock.Eq(actions.GenerateOptions{ + GenerationPath: generationPath, + GenerationData: genData, + })).Return(genData, nil), + prompter.EXPECT().Confirm("Run services now?", false).Return(false, nil), + ) + }, + }, { name: "execution node", setup: func(t *testing.T, sedgeActions *sedge_mocks.MockSedgeActions, prompter *sedge_mocks.MockPrompter, depsMgr *sedge_mocks.MockDependenciesManager) { @@ -200,7 +243,50 @@ func TestCli(t *testing.T) { } gomock.InOrder( - prompter.EXPECT().Select("Select network", "", []string{NetworkMainnet, NetworkGoerli, NetworkSepolia, NetworkGnosis, NetworkChiado}).Return(0, nil), + prompter.EXPECT().Select("Select network", "", []string{NetworkMainnet, NetworkGoerli, NetworkSepolia, NetworkGnosis, NetworkChiado, NetworkHolesky}).Return(0, nil), + prompter.EXPECT().Select("Select node type", "", []string{NodeTypeFullNode, NodeTypeExecution, NodeTypeConsensus, NodeTypeValidator}).Return(1, nil), + prompter.EXPECT().Input("Generation path", configs.DefaultAbsSedgeDataPath, false, nil).Return(generationPath, nil), + prompter.EXPECT().Input("Container tag, sedge will add to each container and the network, a suffix with the tag", "", false, nil).Return("tag", nil), + prompter.EXPECT().Select("Select execution client", "", ETHClients["execution"]).Return(0, nil), + prompter.EXPECT().Confirm("Do you want to expose all ports?", false).Return(true, nil), + prompter.EXPECT().Select("Select JWT source", "", []string{SourceTypeCreate, SourceTypeExisting, SourceTypeSkip}).Return(2, nil), + sedgeActions.EXPECT().Generate(gomock.Eq(actions.GenerateOptions{ + GenerationPath: generationPath, + GenerationData: genData, + })).Return(genData, nil), + prompter.EXPECT().Confirm("Run services now?", false).Return(true, nil), + depsMgr.EXPECT().Check([]string{dependencies.Docker}).Return([]string{dependencies.Docker}, nil), + depsMgr.EXPECT().DockerEngineIsOn().Return(nil), + depsMgr.EXPECT().DockerComposeIsInstalled().Return(nil), + sedgeActions.EXPECT().SetupContainers(actions.SetupContainersOptions{ + GenerationPath: generationPath, + Services: []string{"execution"}, + }), + sedgeActions.EXPECT().RunContainers(actions.RunContainersOptions{ + GenerationPath: generationPath, + Services: []string{"execution"}, + }), + ) + }, + }, + { + name: "execution node holesky", + setup: func(t *testing.T, sedgeActions *sedge_mocks.MockSedgeActions, prompter *sedge_mocks.MockPrompter, depsMgr *sedge_mocks.MockDependenciesManager) { + generationPath := t.TempDir() + genData := generate.GenData{ + Services: []string{"execution"}, + ExecutionClient: &clients.Client{ + Name: "nethermind", + Type: "execution", + Image: configs.ClientImages.Execution.Nethermind.String(), + }, + Network: "holesky", + MapAllPorts: true, + ContainerTag: "tag", + } + + gomock.InOrder( + prompter.EXPECT().Select("Select network", "", []string{NetworkMainnet, NetworkGoerli, NetworkSepolia, NetworkGnosis, NetworkChiado, NetworkHolesky}).Return(5, nil), prompter.EXPECT().Select("Select node type", "", []string{NodeTypeFullNode, NodeTypeExecution, NodeTypeConsensus, NodeTypeValidator}).Return(1, nil), prompter.EXPECT().Input("Generation path", configs.DefaultAbsSedgeDataPath, false, nil).Return(generationPath, nil), prompter.EXPECT().Input("Container tag, sedge will add to each container and the network, a suffix with the tag", "", false, nil).Return("tag", nil), @@ -249,7 +335,7 @@ func TestCli(t *testing.T) { } gomock.InOrder( - prompter.EXPECT().Select("Select network", "", []string{NetworkMainnet, NetworkGoerli, NetworkSepolia, NetworkGnosis, NetworkChiado}).Return(1, nil), + prompter.EXPECT().Select("Select network", "", []string{NetworkMainnet, NetworkGoerli, NetworkSepolia, NetworkGnosis, NetworkChiado, NetworkHolesky}).Return(1, nil), prompter.EXPECT().Select("Select node type", "", []string{NodeTypeFullNode, NodeTypeExecution, NodeTypeConsensus, NodeTypeValidator}).Return(2, nil), prompter.EXPECT().Input("Generation path", configs.DefaultAbsSedgeDataPath, false, nil).Return(generationPath, nil), prompter.EXPECT().Input("Container tag, sedge will add to each container and the network, a suffix with the tag", "", false, nil).Return("tag", nil), @@ -269,6 +355,47 @@ func TestCli(t *testing.T) { ) }, }, + { + name: "consensus node holesky", + setup: func(t *testing.T, sedgeActions *sedge_mocks.MockSedgeActions, prompter *sedge_mocks.MockPrompter, depsMgr *sedge_mocks.MockDependenciesManager) { + generationPath := t.TempDir() + genData := generate.GenData{ + Services: []string{"consensus"}, + ConsensusClient: &clients.Client{ + Name: "lodestar", + Type: "consensus", + Image: configs.ClientImages.Consensus.Lodestar.String(), + }, + Network: NetworkHolesky, + CheckpointSyncUrl: "https://checkpoint-sync.holesky.ethpandaops.io/", + FeeRecipient: "0x2d07a21ebadde0c13e8b91022a7e5732eb6bf5d5", + MapAllPorts: false, + ExecutionApiUrl: "http://execution:5051", + ExecutionAuthUrl: "http://execution:5051", + ContainerTag: "tag", + JWTSecretPath: filepath.Join(generationPath, "jwtsecret"), + } + + gomock.InOrder( + prompter.EXPECT().Select("Select network", "", []string{NetworkMainnet, NetworkGoerli, NetworkSepolia, NetworkGnosis, NetworkChiado, NetworkHolesky}).Return(5, nil), + prompter.EXPECT().Select("Select node type", "", []string{NodeTypeFullNode, NodeTypeExecution, NodeTypeConsensus, NodeTypeValidator}).Return(2, nil), + prompter.EXPECT().Input("Generation path", configs.DefaultAbsSedgeDataPath, false, nil).Return(generationPath, nil), + prompter.EXPECT().Input("Container tag, sedge will add to each container and the network, a suffix with the tag", "", false, nil).Return("tag", nil), + prompter.EXPECT().Select("Select consensus client", "", ETHClients["consensus"]).Return(3, nil), + prompter.EXPECT().InputURL("Checkpoint sync URL", configs.NetworksConfigs()[genData.Network].CheckpointSyncURL, false).Return("https://checkpoint-sync.holesky.ethpandaops.io/", nil), + prompter.EXPECT().InputURL("Execution API URL", "", true).Return("http://execution:5051", nil), + prompter.EXPECT().InputURL("Execution Auth API URL", "", true).Return("http://execution:5051", nil), + prompter.EXPECT().EthAddress("Please enter the Fee Recipient address (press enter to skip it)", "", false).Return("0x2d07a21ebadde0c13e8b91022a7e5732eb6bf5d5", nil), + prompter.EXPECT().Confirm("Do you want to expose all ports?", false).Return(false, nil), + prompter.EXPECT().Select("Select JWT source", "", []string{SourceTypeCreate, SourceTypeExisting, SourceTypeSkip}).Return(0, nil), + sedgeActions.EXPECT().Generate(gomock.Eq(actions.GenerateOptions{ + GenerationPath: generationPath, + GenerationData: genData, + })).Return(genData, nil), + prompter.EXPECT().Confirm("Run services now?", false).Return(false, nil), + ) + }, + }, { name: "validator mainnet", setup: func(t *testing.T, sedgeActions *sedge_mocks.MockSedgeActions, prompter *sedge_mocks.MockPrompter, depsMgr *sedge_mocks.MockDependenciesManager) { @@ -292,7 +419,7 @@ func TestCli(t *testing.T) { } gomock.InOrder( - prompter.EXPECT().Select("Select network", "", []string{NetworkMainnet, NetworkGoerli, NetworkSepolia, NetworkGnosis, NetworkChiado}).Return(0, nil), + prompter.EXPECT().Select("Select network", "", []string{NetworkMainnet, NetworkGoerli, NetworkSepolia, NetworkGnosis, NetworkChiado, NetworkHolesky}).Return(0, nil), prompter.EXPECT().Select("Select node type", "", []string{NodeTypeFullNode, NodeTypeExecution, NodeTypeConsensus, NodeTypeValidator}).Return(3, nil), prompter.EXPECT().Input("Generation path", configs.DefaultAbsSedgeDataPath, false, nil).Return(generationPath, nil), prompter.EXPECT().Input("Container tag, sedge will add to each container and the network, a suffix with the tag", "", false, nil).Return("tag", nil), diff --git a/cli/generate.go b/cli/generate.go index 5c30a866c..3b96e1a20 100644 --- a/cli/generate.go +++ b/cli/generate.go @@ -49,7 +49,6 @@ const ( ) type CustomFlags struct { - customTTD string customChainSpec string customNetworkConfig string customGenesis string @@ -83,6 +82,7 @@ type GenCmdFlags struct { waitEpoch int customEnodes []string customEnrs []string + latestVersion bool } func GenerateCmd(sedgeAction actions.SedgeActions) *cobra.Command { @@ -111,7 +111,7 @@ You can generate: cmd.AddCommand(MevBoostSubCmd(sedgeAction)) cmd.PersistentFlags().StringVarP(&generationPath, "path", "p", configs.DefaultAbsSedgeDataPath, "generation path for sedge data. Default is sedge-data") - cmd.PersistentFlags().StringVarP(&network, "network", "n", "mainnet", "Target network. e.g. mainnet, goerli, sepolia, etc.") + cmd.PersistentFlags().StringVarP(&network, "network", "n", "mainnet", "Target network. e.g. mainnet, goerli, sepolia, holesky, gnosis, chiado, etc.") cmd.PersistentFlags().StringVar(&logging, "logging", "json", fmt.Sprintf("Docker logging driver used by all the services. Set 'none' to use the default docker logging driver. Possible values: %v", configs.ValidLoggingFlags())) cmd.PersistentFlags().StringVar(&containerTag, "container-tag", "", "Container tag to use. If defined, sedge will add to each container and the network, a suffix with the tag. e.g. sedge-validator-client -> sedge-validator-client-.") return cmd @@ -292,7 +292,6 @@ func runGenCmd(out io.Writer, flags *GenCmdFlags, sedgeAction actions.SedgeActio ConsensusApiUrl: flags.consensusApiUrl, ECBootnodes: flags.customEnodes, CCBootnodes: flags.customEnrs, - CustomTTD: flags.customTTD, CustomChainSpecPath: flags.CustomFlags.customChainSpec, CustomNetworkConfigPath: flags.CustomFlags.customNetworkConfig, CustomGenesisPath: flags.CustomFlags.customGenesis, @@ -300,6 +299,7 @@ func runGenCmd(out io.Writer, flags *GenCmdFlags, sedgeAction actions.SedgeActio CustomDeployBlockPath: flags.CustomFlags.customDeployBlock, MevBoostOnValidator: flags.mevBoostOnVal, ContainerTag: containerTag, + LatestVersion: flags.latestVersion, } _, err = sedgeAction.Generate(actions.GenerateOptions{ GenerationData: gd, @@ -345,10 +345,6 @@ func valClients(allClients clients.OrderedClients, flags *GenCmdFlags, services } } executionClient.SetImageOrDefault(strings.Join(executionParts[1:], ":")) - // Patch Geth image if network needs TTD to be set - if executionClient.Name == "geth" && network != "mainnet" { - executionClient.Image = "ethereum/client-go:v1.10.26" - } if err = clients.ValidateClient(executionClient, execution); err != nil { return nil, err } diff --git a/cli/generate_test.go b/cli/generate_test.go index d43fff0a3..ce2b6c767 100644 --- a/cli/generate_test.go +++ b/cli/generate_test.go @@ -126,9 +126,6 @@ func (flags *GenCmdFlags) argsList() []string { if flags.mapAllPorts { s = append(s, "--map-all") } - if flags.customTTD != "" { - s = append(s, "--custom-ttd", flags.customTTD) - } if flags.customChainSpec != "" { s = append(s, "--custom-chainSpec", flags.customChainSpec) } @@ -150,6 +147,9 @@ func (flags *GenCmdFlags) argsList() []string { if len(flags.fallbackEL) > 0 { s = append(s, "--fallback-execution-urls", strings.Join(flags.fallbackEL, ",")) } + if flags.latestVersion { + s = append(s, "--latest") + } return s } @@ -1031,83 +1031,6 @@ func TestGenerateCmd(t *testing.T) { }, errors.New("invalid execution client"), }, - { - "Mainnet Network, custom ttd, should fail", - subCmd{ - name: "full-node", - }, - GenCmdFlags{ - CustomFlags: CustomFlags{ - customTTD: "some", - }, - }, - globalFlags{ - network: "mainnet", - }, - errors.New("custom flags used without --network custom"), - }, - { - "Custom Network and custom ttd, should work", - subCmd{ - name: "full-node", - }, - GenCmdFlags{ - feeRecipient: "0x0000000000000000000000000000000000000000", - CustomFlags: CustomFlags{ - customTTD: "some", - }, - }, - globalFlags{ - network: "custom", - }, - nil, - }, - { - "Custom Network and custom ttd, execution node, should work", - subCmd{ - name: "execution", - }, - GenCmdFlags{ - CustomFlags: CustomFlags{ - customTTD: "some", - }, - }, - globalFlags{ - network: "custom", - }, - nil, - }, - { - "Mainnet Network custom ChainSpec, execution node, shouldn't work", - subCmd{ - name: "execution", - }, - GenCmdFlags{ - CustomFlags: CustomFlags{ - customTTD: "some", - }, - }, - globalFlags{ - network: "mainnet", - }, - errors.New("custom flags used without --network custom"), - }, - { - "Full-node, custom TTD", - subCmd{ - name: "full-node", - }, - GenCmdFlags{ - feeRecipient: "0x0000000000000000000000000000000000000000", - CustomFlags: CustomFlags{ - customTTD: "some", - }, - }, - globalFlags{ - network: "custom", - }, - nil, - }, { "Execution ", subCmd{ @@ -1335,6 +1258,58 @@ func TestGenerateCmd(t *testing.T) { }, nil, }, + { + "Full node - Latest version of clients", + subCmd{ + name: "full-node", + }, + GenCmdFlags{ + noValidator: true, + executionName: "nethermind", + consensusName: "teku", + latestVersion: true, + }, + globalFlags{ + network: "mainnet", + }, + nil, + }, + { + "Execution - Latest version of clients", + subCmd{ + name: "execution", + }, + GenCmdFlags{ + latestVersion: true, + }, + globalFlags{}, + nil, + }, + { + "Consensus - Latest version of clients", + subCmd{ + name: "consensus", + }, + GenCmdFlags{ + latestVersion: true, + executionApiUrl: "https://localhost:8545", + executionAuthUrl: "https://localhost:8545", + }, + globalFlags{}, + nil, + }, + { + "Validator - Latest version of clients", + subCmd{ + name: "validator", + }, + GenCmdFlags{ + latestVersion: true, + consensusApiUrl: "https://localhost:8000/api/endpoint", + }, + globalFlags{}, + nil, + }, } // TODO: Add test cases for Execution fallback urls diff --git a/cli/keys.go b/cli/keys.go index 3ceeb0d5f..d7d5bc9a3 100644 --- a/cli/keys.go +++ b/cli/keys.go @@ -181,7 +181,7 @@ func KeysCmd(cmdRunner commands.CommandRunner, p ui.Prompter) *cobra.Command { }, } // Flag binds - cmd.Flags().StringVarP(&flags.network, "network", "n", "mainnet", "Target network. e.g. mainnet, goerli, sepolia etc.") + cmd.Flags().StringVarP(&flags.network, "network", "n", "mainnet", "Target network. e.g. mainnet, goerli, sepolia, holesky, gnosis, chiado etc.") cmd.Flags().StringVarP(&flags.path, "path", "p", configs.DefaultAbsSedgeDataPath, "Absolute path to keystore folder. e.g. /home/user/keystore") cmd.Flags().StringVar(&flags.eth1WithdrawalAddress, "eth1-withdrawal-address", "", "If this field is set and valid, the given Eth1 address will be used to create the withdrawal credentials. Otherwise, it will generate withdrawal credentials with the mnemonic-derived withdrawal public key in EIP-2334 format.") cmd.Flags().StringVar(&flags.mnemonicPath, "mnemonic-path", "", "Path to file with a existing mnemonic to use.") diff --git a/cli/sub_gen.go b/cli/sub_gen.go index faed841c4..eab966d56 100644 --- a/cli/sub_gen.go +++ b/cli/sub_gen.go @@ -26,7 +26,7 @@ var ErrCustomFlagsUsedWithoutCustomNetwork = errors.New("custom flags used witho func validateCustomNetwork(flags *CustomFlags, net string) error { if net != "custom" { - if len(flags.customTTD) != 0 || len(flags.customChainSpec) != 0 || len(flags.customNetworkConfig) != 0 || + if len(flags.customChainSpec) != 0 || len(flags.customNetworkConfig) != 0 || len(flags.customGenesis) != 0 || len(flags.customDeployBlock) != 0 { // TODO add error on expected place return ErrCustomFlagsUsedWithoutCustomNetwork @@ -77,6 +77,7 @@ Additionally, you can use this syntax ':' to override the cmd.Flags().StringVarP(&flags.consensusName, "consensus", "c", "", "Consensus engine client, e.g. teku, lodestar, prysm, lighthouse, Nimbus. Additionally, you can use this syntax ':' to override the docker image used for the client. If you want to use the default docker image, just use the client name") cmd.Flags().StringVarP(&flags.executionName, "execution", "e", "", "Execution engine client, e.g. geth, nethermind, besu, erigon. Additionally, you can use this syntax ':' to override the docker image used for the client. If you want to use the default docker image, just use the client name") cmd.Flags().StringVarP(&flags.validatorName, "validator", "v", "", "Validator engine client, e.g. teku, lodestar, prysm, lighthouse, Nimbus. Additionally, you can use this syntax ':' to override the docker image used for the client. If you want to use the default docker image, just use the client name") + cmd.Flags().BoolVar(&flags.latestVersion, "latest", false, "Use the latest version of clients. This sets the \"latest\" tag on the client's docker images. Latest version might not work.") cmd.Flags().StringVar(&flags.checkpointSyncUrl, "checkpoint-sync-url", "", "Initial state endpoint (trusted synced consensus endpoint) for the consensus client to sync from a finalized checkpoint. Provide faster sync process for the consensus client and protect it from long-range attacks affored by Weak Subjetivity. Each network has a default checkpoint sync url.") cmd.Flags().StringVar(&flags.feeRecipient, "fee-recipient", "", "Suggested fee recipient. Is a 20-byte Ethereum address which the execution layer might choose to set as the coinbase and the recipient of other fees or rewards. There is no guarantee that an execution node will use the suggested fee recipient to collect fees, it may use any address it chooses. It is assumed that an honest execution node will use the suggested fee recipient, but users should note this trust assumption") cmd.Flags().BoolVar(&flags.noMev, "no-mev-boost", false, "Not use mev-boost if supported") @@ -90,7 +91,6 @@ Additionally, you can use this syntax ':' to override the cmd.Flags().StringArrayVar(&flags.elExtraFlags, "el-extra-flag", []string{}, "Additional flag to configure the execution client service in the generated docker-compose script. Example: 'sedge generate full-node --el-extra-flag \"=value1\" --el-extra-flag \"=\\\"value2\\\"\"'") cmd.Flags().StringArrayVar(&flags.clExtraFlags, "cl-extra-flag", []string{}, "Additional flag to configure the consensus client service in the generated docker-compose script. Example: 'sedge generate full-node --cl-extra-flag \"=value1\" --cl-extra-flag \"=\\\"value2\\\"\"'") cmd.Flags().StringArrayVar(&flags.vlExtraFlags, "vl-extra-flag", []string{}, "Additional flag to configure the validator client service in the generated docker-compose script. Example: 'sedge generate full-node --vl-extra-flag \"=value1\" --vl-extra-flag \"=\\\"value2\\\"\"'") - cmd.Flags().StringVar(&flags.customTTD, "custom-ttd", "", "Custom Terminal Total Difficulty to use for the execution client") cmd.Flags().StringVar(&flags.customChainSpec, "custom-chainSpec", "", "File path or url to use as custom network chainSpec for execution client.") cmd.Flags().StringVar(&flags.customNetworkConfig, "custom-config", "", "File path or url to use as custom network config file for consensus client.") cmd.Flags().StringVar(&flags.customGenesis, "custom-genesis", "", "File path or url to use as custom network genesis for consensus client.") @@ -133,9 +133,9 @@ func ExecutionSubCmd(sedgeAction actions.SedgeActions) *cobra.Command { } // Bind flags + cmd.Flags().BoolVar(&flags.latestVersion, "latest", false, "Use the latest version of clients. This sets the \"latest\" tag on the client's docker images. Latest version might not work.") cmd.Flags().StringVar(&flags.jwtPath, "jwt-secret-path", "", "Path to the JWT secret file") cmd.Flags().BoolVar(&flags.mapAllPorts, "map-all", false, "Map all clients ports to host. Use with care. Useful to allow remote access to the clients") - cmd.Flags().StringVar(&flags.customTTD, "custom-ttd", "", "Custom Terminal Total Difficulty to use for the execution client") cmd.Flags().StringVar(&flags.customChainSpec, "custom-chainSpec", "", "File path or url to use as custom network chainSpec for execution client.") cmd.Flags().StringSliceVar(&flags.customEnodes, "execution-bootnodes", []string{}, "List of comma separated enodes to use as custom network peers for execution client.") cmd.Flags().StringArrayVar(&flags.elExtraFlags, "el-extra-flag", []string{}, "Additional flag to configure the execution client service in the generated docker-compose script. Example: 'sedge generate consensus--el-extra-flag \"=value1\" --el-extra-flag \"=\\\"value2\\\"\"'") @@ -177,6 +177,7 @@ func ConsensusSubCmd(sedgeAction actions.SedgeActions) *cobra.Command { }, } // Bind flags + cmd.Flags().BoolVar(&flags.latestVersion, "latest", false, "Use the latest version of clients. This sets the \"latest\" tag on the client's docker images. Latest version might not work.") cmd.Flags().StringVar(&flags.executionApiUrl, "execution-api-url", "", "Execution API endpoint for the consensus client. Example: 'sedge generate consensus -r --execution-api-url=https://api.url.endpoint'") cmd.Flags().StringVar(&flags.executionAuthUrl, "execution-auth-url", "", "Execution AUTH endpoint for the consensus client. Example: 'sedge generate consensus -r --execution-auth-url=https://auth.url.endpoint'") cmd.Flags().StringVar(&flags.checkpointSyncUrl, "checkpoint-sync-url", "", "Initial state endpoint (trusted synced consensus endpoint) for the consensus client to sync from a finalized checkpoint. Provide faster sync process for the consensus client and protect it from long-range attacks affored by Weak Subjetivity. Each network has a default checkpoint sync url.") @@ -236,6 +237,7 @@ func ValidatorSubCmd(sedgeAction actions.SedgeActions) *cobra.Command { }, } // Bind flags + cmd.Flags().BoolVar(&flags.latestVersion, "latest", false, "Use the latest version of clients. This sets the \"latest\" tag on the client's docker images. Latest version might not work.") cmd.Flags().StringVar(&flags.consensusApiUrl, "consensus-url", "", "Consensus endpoint for the validator client to connect to. Example: 'sedge generate validator --consensus-url http://localhost:4000'") cmd.Flags().StringVar(&flags.feeRecipient, "fee-recipient", "", "Suggested fee recipient. Is a 20-byte Ethereum address which the execution layer might choose to set as the coinbase and the recipient of other fees or rewards. There is no guarantee that an execution node will use the suggested fee recipient to collect fees, it may use any address it chooses. It is assumed that an honest execution node will use the suggested fee recipient, but users should note this trust assumption") cmd.Flags().StringVar(&flags.graffiti, "graffiti", "", "Graffiti to be used by the validator") @@ -271,6 +273,7 @@ func MevBoostSubCmd(sedgeAction actions.SedgeActions) *cobra.Command { // Bind flags cmd.Flags().StringSliceVar(&flags.relayURLs, "relay-urls", []string{}, "List of comma separated relay URLs used to connect to mev relay. Example: 'sedge generate mev-boost --relay-urls=https://0xac6e77dfe25ecd6110b8e780608cce0dab71fdd5ebea22a16c0205200f2f8e2e3ad3b71d3499c54ad14d6c21b41a37ae@boost-relay.flashbots.net,https://0xa1559ace749633b997cb3fdacffb890aeebdb0f5a3b6aaa7eeeaf1a38af0a8fe88b9e4b1f61f236d2e64d95733327a62@relay.ultrasound.money'") cmd.Flags().StringVarP(&flags.mevImage, "mev-boost-image", "m", "", "Custom docker image to use for Mev Boost. Example: 'sedge generate mev-boost --mev-boost-image flashbots/mev-boost:latest-portable'") + cmd.Flags().StringVarP(&network, "network", "n", "mainnet", "Target network. e.g. mainnet, goerli, sepolia etc.") cmd.Flags().SortFlags = false return cmd } diff --git a/configs/client_images.yaml b/configs/client_images.yaml index b3c119b36..e76021133 100644 --- a/configs/client_images.yaml +++ b/configs/client_images.yaml @@ -1,39 +1,39 @@ execution: geth: name: ethereum/client-go - version: v1.12.1 + version: v1.13.5 besu: name: hyperledger/besu - version: 23.4.4 + version: 23.10.2 nethermind: name: nethermind/nethermind - version: 1.20.1 + version: 1.23.0 erigon: name: thorax/erigon - version: v2.48.1 + version: v2.55.1 consensus: lighthouse: name: sigp/lighthouse - version: v4.3.0 + version: v4.5.0 lodestar: name: chainsafe/lodestar - version: v1.9.2 + version: v1.12.0 teku: name: consensys/teku - version: 23.8.0 + version: 23.11.0 prysm: name: gcr.io/prysmaticlabs/prysm/beacon-chain - version: v4.0.7 + version: v4.1.1 validator: lighthouse: name: sigp/lighthouse - version: v4.3.0 + version: v4.5.0 lodestar: name: chainsafe/lodestar - version: v1.9.2 + version: v1.12.0 teku: name: consensys/teku - version: 23.8.0 + version: 23.11.0 prysm: name: gcr.io/prysmaticlabs/prysm/validator - version: v4.0.7 + version: v4.1.1 diff --git a/configs/init.go b/configs/init.go index 3ccb97447..25110ef76 100644 --- a/configs/init.go +++ b/configs/init.go @@ -18,22 +18,10 @@ package configs var networksConfigs map[string]NetworkConfig = map[string]NetworkConfig{ NetworkMainnet: { Name: NetworkMainnet, - RequireJWT: true, NetworkService: "merge", GenesisForkVersion: "0x00000000", SupportsMEVBoost: true, - DefaultTTD: "", - DefaultECBootnodes: []string{ - "enode://d860a01f9722d78051619d1e2351aba3f43f943f6f00718d1b9baa4101932a1f5011f16bb2b1bb35db20d6fe28fa0bf09636d26a87d31de9ec6203eeedb1f666@18.138.108.67:30303", - "enode://22a8232c3abc76a16ae9d6c3b164f98775fe226f0917b0ca871128a74a8e9630b458460865bab457221f1d448dd9791d24c4e5d88786180ac185df813a68d4de@3.209.45.79:30303", - "enode://8499da03c47d637b20eee24eec3c356c9a2e6148d6fe25ca195c7949ab8ec2c03e3556126b0d7ed644675e78c4318b08691b7b57de10e5f0d40d05b09238fa0a@52.187.207.27:30303", - "enode://103858bdb88756c71f15e9b5e09b56dc1be52f0a5021d46301dbbfb7e130029cc9d0d6f73f693bc29b665770fff7da4d34f3c6379fe12721b5d7a0bcb5ca1fc1@191.234.162.198:30303", - "enode://715171f50508aba88aecd1250af392a45a330af91d7b90701c436b618c86aaa1589c9184561907bebbb56439b8f8787bc01f49a7c77276c58c1b09822d75e8e8@52.231.165.108:30303", - "enode://5d6d7cd20d6da4bb83a1d28cadb5d409b64edf314c0335df658c1a54e32c7c4a7ab7823d57c39b6a757556e68ff1df17c748b698544a55cb488b52479a92b60f@104.42.217.25:30303", - "enode://2b252ab6a1d0f971d9722cb839a42cb81db019ba44c08754628ab4a823487071b5695317c8ccd085219c3a03af063495b2f1da8d18218da2d6a82981b45e6ffc@65.108.70.101:30303", - "enode://4aeb4ab6c14b23e2c4cfdce879c04b0748a20d8e9b59e25ded2a08143e265c6c25936e74cbc8e641e3312ca288673d91f2f93f8e277de3cfa444ecdaaf982052@157.90.35.166:30303", - }, - CheckpointSyncURL: "https://beaconstate.ethstaker.cc", + CheckpointSyncURL: "https://beaconstate.ethstaker.cc", RelayURLs: []string{ "https://0xa7ab7a996c8584251c8f925da3170bdfd6ebc75d50f5ddc4050a6fdc77f2a3b5fce2cc750d0865e05d7228af97d69561@agnostic-relay.net", "https://0x9000009807ed12c1f08bf4e81c6da3ba8e3fc3d953898ce0102433094e5f22f21102ec057841fcb81978ed1ea0fa8246@builder-relay-mainnet.blocknative.com", @@ -47,27 +35,10 @@ var networksConfigs map[string]NetworkConfig = map[string]NetworkConfig{ }, NetworkGoerli: { Name: NetworkGoerli, - RequireJWT: true, NetworkService: "merge", GenesisForkVersion: "0x00001020", SupportsMEVBoost: true, - DefaultTTD: "10790000", - DefaultECBootnodes: []string{ - "enode://011f758e6552d105183b1761c5e2dea0111bc20fd5f6422bc7f91e0fabbec9a6595caf6239b37feb773dddd3f87240d99d859431891e4a642cf2a0a9e6cbb98a@51.141.78.53:30303", - "enode://176b9417f511d05b6b2cf3e34b756cf0a7096b3094572a8f6ef4cdcb9d1f9d00683bf0f83347eebdf3b81c3521c2332086d9592802230bf528eaf606a1d9677b@13.93.54.137:30303", - "enode://46add44b9f13965f7b9875ac6b85f016f341012d84f975377573800a863526f4da19ae2c620ec73d11591fa9510e992ecc03ad0751f53cc02f7c7ed6d55c7291@94.237.54.114:30313", - "enode://b5948a2d3e9d486c4d75bf32713221c2bd6cf86463302339299bd227dc2e276cd5a1c7ca4f43a0e9122fe9af884efed563bd2a1fd28661f3b5f5ad7bf1de5949@18.218.250.66:30303", - }, - DefaultCCBootnodes: []string{ - "enr:-LK4QH1xnjotgXwg25IDPjrqRGFnH1ScgNHA3dv1Z8xHCp4uP3N3Jjl_aYv_WIxQRdwZvSukzbwspXZ7JjpldyeVDzMCh2F0dG5ldHOIAAAAAAAAAACEZXRoMpB53wQoAAAQIP__________gmlkgnY0gmlwhIe1te-Jc2VjcDI1NmsxoQOkcGXqbCJYbcClZ3z5f6NWhX_1YPFRYRRWQpJjwSHpVIN0Y3CCIyiDdWRwgiMo", - "enr:-KG4QCIzJZTY_fs_2vqWEatJL9RrtnPwDCv-jRBuO5FQ2qBrfJubWOWazri6s9HsyZdu-fRUfEzkebhf1nvO42_FVzwDhGV0aDKQed8EKAAAECD__________4JpZIJ2NIJpcISHtbYziXNlY3AyNTZrMaED4m9AqVs6F32rSCGsjtYcsyfQE2K8nDiGmocUY_iq-TSDdGNwgiMog3VkcIIjKA", - "enr:-Ku4QFmUkNp0g9bsLX2PfVeIyT-9WO-PZlrqZBNtEyofOOfLMScDjaTzGxIb1Ns9Wo5Pm_8nlq-SZwcQfTH2cgO-s88Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpDkvpOTAAAQIP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQLV_jMOIxKbjHFKgrkFvwDvpexo6Nd58TK5k7ss4Vt0IoN1ZHCCG1g", - "enr:-LK4QLINdtobGquK7jukLDAKmsrH2ZuHM4k0TklY5jDTD4ZgfxR9weZmo5Jwu81hlKu3qPAvk24xHGBDjYs4o8f1gZ0Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpB53wQoAAAQIP__________gmlkgnY0gmlwhDRN_P6Jc2VjcDI1NmsxoQJuNujTgsJUHUgVZML3pzrtgNtYg7rQ4K1tkWERgl0DdoN0Y3CCIyiDdWRwgiMo", - "enr:-LK4QMzPq4Q7w5R-rnGQDcI8BYky6oPVBGQTbS1JJLVtNi_8PzBLV7Bdzsoame9nJK5bcJYpGHn4SkaDN2CM6tR5G_4Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpB53wQoAAAQIP__________gmlkgnY0gmlwhAN4yvyJc2VjcDI1NmsxoQKa8Qnp_P2clLIP6VqLKOp_INvEjLszalEnW0LoBZo4YYN0Y3CCI4yDdWRwgiOM", - "enr:-LK4QLM_pPHa78R8xlcU_s40Y3XhFjlb3kPddW9lRlY67N5qeFE2Wo7RgzDgRs2KLCXODnacVHMFw1SfpsW3R474RZEBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpB53wQoAAAQIP__________gmlkgnY0gmlwhANBY-yJc2VjcDI1NmsxoQNsZkFXgKbTzuxF7uwxlGauTGJelE6HD269CcFlZ_R7A4N0Y3CCI4yDdWRwgiOM", - "enr:-KK4QH0RsNJmIG0EX9LSnVxMvg-CAOr3ZFF92hunU63uE7wcYBjG1cFbUTvEa5G_4nDJkRhUq9q2ck9xY-VX1RtBsruBtIRldGgykIL0pysBABAg__________-CaWSCdjSCaXCEEnXQ0YlzZWNwMjU2azGhA1grTzOdMgBvjNrk-vqWtTZsYQIi0QawrhoZrsn5Hd56g3RjcIIjKIN1ZHCCIyg", - }, - CheckpointSyncURL: "https://goerli.checkpoint-sync.ethpandaops.io", + CheckpointSyncURL: "https://goerli.checkpoint-sync.ethpandaops.io", RelayURLs: []string{ "https://0xafa4c6985aa049fb79dd37010438cfebeb0f2bd42b115b89dd678dab0670c1de38da0c4e9138c9290a398ecd9a0b3110@builder-relay-goerli.flashbots.net", "https://0x821f2a65afb70e7f2e820a925a9b4c80a159620582c1766b1b09729fec178b11ea22abb3a51f07b288be815a1a2ff516@bloxroute.max-profit.builder.goerli.blxrbdn.com", @@ -78,66 +49,35 @@ var networksConfigs map[string]NetworkConfig = map[string]NetworkConfig{ }, NetworkSepolia: { Name: NetworkSepolia, - RequireJWT: true, NetworkService: "merge", GenesisForkVersion: "0x90000069", - SupportsMEVBoost: false, - DefaultTTD: "17000000000000000", - DefaultCCBootnodes: []string{ - "enr:-Iq4QMCTfIMXnow27baRUb35Q8iiFHSIDBJh6hQM5Axohhf4b6Kr_cOCu0htQ5WvVqKvFgY28893DHAg8gnBAXsAVqmGAX53x8JggmlkgnY0gmlwhLKAlv6Jc2VjcDI1NmsxoQK6S-Cii_KmfFdUJL2TANL3ksaKUnNXvTCv1tLwXs0QgIN1ZHCCIyk", - "enr:-Ly4QFoZTWR8ulxGVsWydTNGdwEESueIdj-wB6UmmjUcm-AOPxnQi7wprzwcdo7-1jBW_JxELlUKJdJES8TDsbl1EdNlh2F0dG5ldHOI__78_v2bsV-EZXRoMpA2-lATkAAAcf__________gmlkgnY0gmlwhBLYJjGJc2VjcDI1NmsxoQI0gujXac9rMAb48NtMqtSTyHIeNYlpjkbYpWJw46PmYYhzeW5jbmV0cw-DdGNwgiMog3VkcIIjKA", - "enr:-KG4QE5OIg5ThTjkzrlVF32WT_-XT14WeJtIz2zoTqLLjQhYAmJlnk4ItSoH41_2x0RX0wTFIe5GgjRzU2u7Q1fN4vADhGV0aDKQqP7o7pAAAHAyAAAAAAAAAIJpZIJ2NIJpcISlFsStiXNlY3AyNTZrMaEC-Rrd_bBZwhKpXzFCrStKp1q_HmGOewxY3KwM8ofAj_ODdGNwgiMog3VkcIIjKA", - "enr:-L64QC9Hhov4DhQ7mRukTOz4_jHm4DHlGL726NWH4ojH1wFgEwSin_6H95Gs6nW2fktTWbPachHJ6rUFu0iJNgA0SB2CARqHYXR0bmV0c4j__________4RldGgykDb6UBOQAABx__________-CaWSCdjSCaXCEA-2vzolzZWNwMjU2azGhA17lsUg60R776rauYMdrAz383UUgESoaHEzMkvm4K6k6iHN5bmNuZXRzD4N0Y3CCIyiDdWRwgiMo", - }, - CheckpointSyncURL: "https://sepolia.checkpoint-sync.ethpandaops.io", + SupportsMEVBoost: true, + CheckpointSyncURL: "https://sepolia.checkpoint-sync.ethpandaops.io", RelayURLs: []string{ "https://0x845bd072b7cd566f02faeb0a4033ce9399e42839ced64e8b2adcfc859ed1e8e1a5a293336a49feac6d9a5edb779be53a@builder-relay-sepolia.flashbots.net", }, }, NetworkChiado: { - Name: NetworkChiado, - RequireJWT: true, - NetworkService: "merge", - GenesisForkVersion: "0x0000006f", - DefaultTTD: "231707791542740786049188744689299064356246512", - DefaultCustomConfigSrc: "https://github.com/gnosischain/configs/raw/main/chiado/config.yaml", - DefaultCustomGenesisSrc: "https://github.com/gnosischain/configs/raw/main/chiado/genesis.ssz", - DefaultCustomDeployBlock: "0", - DefaultCCBootnodes: []string{ - "enr:-L64QOijsdi9aVIawMb5h5PWueaPM9Ai6P17GNPFlHzz7MGJQ8tFMdYrEx8WQitNKLG924g2Q9cCdzg54M0UtKa3QIKCMxaHYXR0bmV0c4j__________4RldGgykDE2cEMCAABv__________-CaWSCdjSCaXCEi5AaWYlzZWNwMjU2azGhA8CjTkD4m1s8FbKCN18LgqlYcE65jrT148vFtwd9U62SiHN5bmNuZXRzD4N0Y3CCIyiDdWRwgiMo", - "enr:-L64QKYKGQj5ybkfBxyFU5IEVzP7oJkGHJlie4W8BCGAYEi4P0mmMksaasiYF789mVW_AxYVNVFUjg9CyzmdvpyWQ1KCMlmHYXR0bmV0c4j__________4RldGgykDE2cEMCAABv__________-CaWSCdjSCaXCEi5CtNolzZWNwMjU2azGhAuA7BAwIijy1z81AO9nz_MOukA1ER68rGA67PYQ5pF1qiHN5bmNuZXRzD4N0Y3CCIyiDdWRwgiMo", - "enr:-Ly4QJJUnV9BxP_rw2Bv7E9iyw4sYS2b4OQZIf4Mu_cA6FljJvOeSTQiCUpbZhZjR4R0VseBhdTzrLrlHrAuu_OeZqgJh2F0dG5ldHOI__________-EZXRoMpAxNnBDAgAAb___________gmlkgnY0gmlwhIuQGnOJc2VjcDI1NmsxoQPT_u3IjDtB2r-nveH5DhUmlM8F2IgLyxhmwmqW4L5k3ohzeW5jbmV0cw-DdGNwgiMog3VkcIIjKA", - "enr:-MK4QCkOyqOTPX1_-F-5XVFjPclDUc0fj3EeR8FJ5-hZjv6ARuGlFspM0DtioHn1r6YPUXkOg2g3x6EbeeKdsrvVBYmGAYQKrixeh2F0dG5ldHOIAAAAAAAAAACEZXRoMpAxNnBDAgAAb___________gmlkgnY0gmlwhIuQGlWJc2VjcDI1NmsxoQKdW3-DgLExBkpLGMRtuM88wW_gZkC7Yeg0stYDTrlynYhzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA==", - "enr:-Ly4QLYLNqrjvSxD3lpAPBUNlxa6cIbe79JqLZLFcZZjWoCjZcw-85agLUErHiygG2weRSCLnd5V460qTbLbwJQsfZkoh2F0dG5ldHOI__________-EZXRoMpAxNnBDAgAAb___________gmlkgnY0gmlwhKq7mu-Jc2VjcDI1NmsxoQP900YAYa9kdvzlSKGjVo-F3XVzATjOYp3BsjLjSophO4hzeW5jbmV0cw-DdGNwgiMog3VkcIIjKA", - "enr:-Ly4QCGeYvTCNOGKi0mKRUd45rLj96b4pH98qG7B9TCUGXGpHZALtaL2-XfjASQyhbCqENccI4PGXVqYTIehNT9KJMQgh2F0dG5ldHOI__________-EZXRoMpAxNnBDAgAAb___________gmlkgnY0gmlwhIuQrVSJc2VjcDI1NmsxoQP9iDchx2PGl3JyJ29B9fhLCvVMN6n23pPAIIeFV-sHOIhzeW5jbmV0cw-DdGNwgiMog3VkcIIjKA", - }, - CheckpointSyncURL: "https://checkpoint.chiadochain.net", + Name: NetworkChiado, + NetworkService: "merge", + GenesisForkVersion: "0x0000006f", + CheckpointSyncURL: "https://checkpoint.chiadochain.net", }, NetworkGnosis: { Name: NetworkGnosis, - RequireJWT: true, NetworkService: "merge", GenesisForkVersion: "0x00000064", - DefaultTTD: "8626000000000000000000058750000000000000000000", - DefaultECBootnodes: []string{ - "enode://ea6d67eb3277d8ae9292fc700fa757ef6d2127c4db9712bcd5eb1341b1d937ac71cc2b15efe3a8496f4fc9fc12156d7ac73d82eb3c0f68928442116030b76f48@3.135.122.4:30303", - "enode://c5e1e38709a2eb402557e82e071ccec1c6e2adedb01f7d6afdc80d25f7e9287f954fa9b742f01b1b74a5c532de9476afeb6efdcf5a683672a663204eadb15e45@3.17.46.220:30303", - }, - DefaultCCBootnodes: []string{ - "enr:-Ly4QMU1y81COwm1VZgxGF4_eZ21ub9-GHF6dXZ29aEJ0oZpcV2Rysw-viaEKfpcpu9ZarILJLxFZjcKOjE0Sybs3MQBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCCS-QxAgAAZP__________gmlkgnY0gmlwhANLnx-Jc2VjcDI1NmsxoQKoaYT8I-wf2I_f_ii6EgoSSXj5T3bhiDyW-7ZLsY3T64hzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", - "enr:-Ly4QBf76jLiCA_pDXoZjhyRbuwzFOscFY-MIKkPnmHPQbvaKhIDZutfe38G9ibzgQP0RKrTo3vcWOy4hf_8wOZ-U5MBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCCS-QxAgAAZP__________gmlkgnY0gmlwhBLGgjaJc2VjcDI1NmsxoQLGeo0Q4lDvxIjHjnkAqEuETTaFIjsNrEcSpdDhcHXWFYhzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", - "enr:-Ly4QLjZUWdqUO_RwyDqCAccIK5-MbLRD6A2c7oBuVbBgBnWDkEf0UKJVAaJqi2pO101WVQQLYSnYgz1Q3pRhYdrlFoBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCCS-QxAgAAZP__________gmlkgnY0gmlwhANA8sSJc2VjcDI1NmsxoQK4TC_EK1jSs0VVPUpOjIo1rhJmff2SLBPFOWSXMwdLVYhzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", - "enr:-Ly4QKwX2rTFtKWKQHSGQFhquxsxL1jewO8JB1MG-jgHqAZVFWxnb3yMoQqnYSV1bk25-_jiLuhIulxar3RBWXEDm6EBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCCS-QxAgAAZP__________gmlkgnY0gmlwhAN-qZeJc2VjcDI1NmsxoQI7EPGMpecl0QofLp4Wy_lYNCCChUFEH6kY7k-oBGkPFIhzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", - "enr:-Ly4QPoChSQTleJROee1-k-4HOEgKqL9kLksE-tEiVqcY9kwF9V53aBg-MruD7Yx4Aks3LAeJpKXAS4ntMrIdqvQYc8Ch2F0dG5ldHOIAAAAAAAAAACEZXRoMpCCS-QxAgAAZP__________gmlkgnY0gmlwhGsWBHiJc2VjcDI1NmsxoQKwGQrwOSBJB_DtQOkFZVAY4YQfMAbUVxFpL5WgrzEddYhzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", - "enr:-Ly4QBbaKRSX4SncCOxTTL611Kxlz-zYFrIn-k_63jGIPK_wbvFghVUHJICPCxufgTX5h79jvgfPr-2hEEQEdziGQ5MCh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCCS-QxAgAAZP__________gmlkgnY0gmlwhAMazo6Jc2VjcDI1NmsxoQKt-kbM9isuWp8djhyEq6-4MLv1Sy7dOXeMOMdPgwu9LohzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", - "enr:-Ly4QKJ5BzgFyJ6BaTlGY0C8ROzl508U3GA6qxdG5Gn2hxdke6nQO187pYlLvhp82Dez4PQn436Fts1F0WAm-_5l2LACh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCCS-QxAgAAZP__________gmlkgnY0gmlwhA-YLVKJc2VjcDI1NmsxoQI8_Lvr6p_TkcAu8KorKacfUEnoOon0tdO0qWhriPdBP4hzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", - "enr:-Ly4QJMtoiX2bPnVbiQOJCLbtUlqdqZk7kCJQln_W1bp1vOHcxWowE-iMXkKC4_uOb0o73wAW71WYi80Dlsg-7a5wiICh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCCS-QxAgAAZP__________gmlkgnY0gmlwhDbP3KmJc2VjcDI1NmsxoQNvcfKYUqcemLFlpKxl7JcQJwQ3L9unYL44gY2aEiRnI4hzeW5jbmV0cwCDdGNwgiMog3VkcIIjKA", - }, - CheckpointSyncURL: "https://checkpoint.gnosischain.com", + CheckpointSyncURL: "https://checkpoint.gnosischain.com", + }, + NetworkHolesky: { + Name: NetworkHolesky, + NetworkService: "merge", + GenesisForkVersion: "0x00017000", + SupportsMEVBoost: false, + CheckpointSyncURL: "https://checkpoint-sync.holesky.ethpandaops.io/", }, NetworkCustom: { Name: NetworkCustom, - RequireJWT: true, NetworkService: "merge", GenesisForkVersion: "0x00000000", // TODO: only affects keystores generation, ensure the deposit method does not conflict over this. }, diff --git a/configs/networks.go b/configs/networks.go index 46058f135..afd327c2e 100644 --- a/configs/networks.go +++ b/configs/networks.go @@ -28,6 +28,7 @@ const ( NetworkSepolia = "sepolia" NetworkGnosis = "gnosis" NetworkChiado = "chiado" + NetworkHolesky = "holesky" NetworkCustom = "custom" ) @@ -35,7 +36,7 @@ var ErrInvalidNetwork = errors.New("invalid network") func NetworkCheck(value string) error { switch value { - case NetworkMainnet, NetworkGoerli, NetworkSepolia, NetworkGnosis, NetworkChiado, NetworkCustom: + case NetworkMainnet, NetworkGoerli, NetworkSepolia, NetworkGnosis, NetworkChiado, NetworkHolesky, NetworkCustom: return nil default: return fmt.Errorf("%w: %s", ErrInvalidNetwork, value) @@ -50,6 +51,7 @@ func NetworkSupported() []string { NetworkSepolia, NetworkGnosis, NetworkChiado, + NetworkHolesky, NetworkCustom, } } diff --git a/configs/networks_test.go b/configs/networks_test.go index 7e680d571..90bed5cd5 100644 --- a/configs/networks_test.go +++ b/configs/networks_test.go @@ -72,7 +72,7 @@ func TestSupportMEVBoost(t *testing.T) { { name: "Valid network, sepolia", network: "sepolia", - want: false, + want: true, }, { name: "Valid network, gnosis", diff --git a/configs/types.go b/configs/types.go index 3726aab09..cb3af28b0 100644 --- a/configs/types.go +++ b/configs/types.go @@ -22,10 +22,9 @@ type LogConfig struct { type NetworkConfig struct { Name string - RequireJWT bool + NoJWT bool NetworkService string GenesisForkVersion string - DefaultTTD string DefaultECBootnodes []string DefaultCCBootnodes []string DefaultCustomChainSpecSrc string diff --git a/docs/docs/commands/cli.mdx b/docs/docs/commands/cli.mdx index ce5c132ea..cb6778870 100644 --- a/docs/docs/commands/cli.mdx +++ b/docs/docs/commands/cli.mdx @@ -42,7 +42,7 @@ This is an example of what you can expect: ``` sedge cli 2023-03-20 21:54:08 -- [INFO] [Logger Init] Log level: info -2023-03-20 21:54:08 -- [INFO] You are running the latest version of sedge. Version: v0.6.0 +2023-03-20 21:54:08 -- [INFO] You are running the latest version of sedge. Version: v1.3.0 ? Select network goerli ? Select node type full-node ? Generation path /root/sedge-data diff --git a/docs/docs/commands/clients.mdx b/docs/docs/commands/clients.mdx index 7512ce0fd..2e703b792 100644 --- a/docs/docs/commands/clients.mdx +++ b/docs/docs/commands/clients.mdx @@ -30,48 +30,66 @@ The execution of `sedge clients` will result in an output like this, that will s ``` $ sedge clients -2022-00-00 00:00:00 -- [INFO] [Logger Init] Log level: info -2022-00-00 00:00:00 -- [INFO] You are running the latest version of sedge. Version: v0.5.1 -2022-00-00 00:00:00 -- [INFO] Listing supported clients for network chiado +2023-10-13 14:13:44 -- [INFO] [Logger Init] Log level: info +2023-10-13 14:13:45 -- [INFO] You are running the latest version of sedge. Version: v1.3.0 +2023-10-13 14:13:45 -- [INFO] Listing supported clients for network chiado # Execution Clients Consensus Clients Validator Clients === =================== =================== =================== 1 nethermind lighthouse lighthouse - 2 - lodestar lodestar - 3 - teku teku + 2 - teku teku + 3 - lodestar lodestar -2022-00-00 00:00:00 -- [INFO] Listing supported clients for network gnosis +2023-10-13 14:13:45 -- [INFO] Listing supported clients for network custom # Execution Clients Consensus Clients Validator Clients === =================== =================== =================== 1 nethermind lighthouse lighthouse - 2 - lodestar lodestar + 2 - prysm prysm 3 - teku teku + 4 - lodestar lodestar + +2023-10-13 14:13:45 -- [INFO] Listing supported clients for network gnosis + + # Execution Clients Consensus Clients Validator Clients +=== =================== =================== =================== + 1 nethermind lighthouse lighthouse + 2 erigon teku teku + 3 - lodestar lodestar + +2023-10-13 14:13:45 -- [INFO] Listing supported clients for network goerli -2022-00-00 00:00:00 -- [INFO] Listing supported clients for network goerli + # Execution Clients Consensus Clients Validator Clients +=== =================== =================== =================== + 1 nethermind lighthouse lighthouse + 2 geth prysm prysm + 3 erigon teku teku + 4 besu lodestar lodestar + +2023-10-13 14:13:45 -- [INFO] Listing supported clients for network holesky # Execution Clients Consensus Clients Validator Clients === =================== =================== =================== - 1 besu lighthouse lighthouse - 2 erigon lodestar lodestar - 3 geth prysm prysm - 4 nethermind teku teku + 1 nethermind lighthouse lighthouse + 2 geth teku teku + 3 erigon lodestar lodestar + 4 besu prysm prysm -2022-00-00 00:00:00 -- [INFO] Listing supported clients for network mainnet +2023-10-13 14:13:45 -- [INFO] Listing supported clients for network mainnet # Execution Clients Consensus Clients Validator Clients === =================== =================== =================== - 1 besu lighthouse lighthouse - 2 erigon lodestar lodestar - 3 geth prysm prysm - 4 nethermind teku teku + 1 nethermind lighthouse lighthouse + 2 geth prysm prysm + 3 erigon teku teku + 4 besu lodestar lodestar -2022-00-00 00:00:00 -- [INFO] Listing supported clients for network sepolia +2023-10-13 14:13:45 -- [INFO] Listing supported clients for network sepolia # Execution Clients Consensus Clients Validator Clients === =================== =================== =================== - 1 besu lighthouse lighthouse - 2 erigon lodestar lodestar - 3 geth prysm prysm - 4 nethermind teku teku + 1 nethermind lighthouse lighthouse + 2 geth prysm prysm + 3 erigon teku teku + 4 besu lodestar lodestar ``` \ No newline at end of file diff --git a/docs/docs/commands/deps.mdx b/docs/docs/commands/deps.mdx index 89ad37b4a..4615d86ad 100644 --- a/docs/docs/commands/deps.mdx +++ b/docs/docs/commands/deps.mdx @@ -75,7 +75,7 @@ The execution of `sedge deps check` will result in an output like this if everyt ``` $ sedge deps check 2023-03-21 02:56:04 -- [INFO] [Logger Init] Log level: info -2023-03-21 02:56:05 -- [INFO] You are running the latest version of sedge. Version: v0.6.0 +2023-03-21 02:56:05 -- [INFO] You are running the latest version of sedge. Version: v1.3.0 2023-03-21 02:56:05 -- [INFO] docker is installed 2023-03-21 02:56:06 -- [INFO] All dependencies are installed and running ``` diff --git a/docs/docs/commands/down.mdx b/docs/docs/commands/down.mdx index 612accc34..73019f32a 100644 --- a/docs/docs/commands/down.mdx +++ b/docs/docs/commands/down.mdx @@ -38,7 +38,7 @@ The execution of `sedge down` will close and remove all the opened containers an ``` $ sedge down 2022-00-00 00:00:00 -- [INFO] [Logger Init] Log level: info -2022-00-00 00:00:00 -- [INFO] You are running the latest version of sedge. Version: v0.5.1 +2022-00-00 00:00:00 -- [INFO] You are running the latest version of sedge. Version: v1.3.0 [sudo] password for maceo: [+] Running 7/7 ⠿ Container execution-client Removed 93.8s diff --git a/docs/docs/commands/generate.mdx b/docs/docs/commands/generate.mdx index 973187da0..456eb31aa 100644 --- a/docs/docs/commands/generate.mdx +++ b/docs/docs/commands/generate.mdx @@ -37,7 +37,7 @@ Flags: --container-tag string Container tag to use. If defined, sedge will add to each container and the network, a suffix with the tag. e.g. sedge-validator-client -> sedge-validator-client-. -h, --help help for generate --logging string Docker logging driver used by all the services. Set 'none' to use the default docker logging driver. Possible values: [none json] (default "json") - -n, --network string Target network. e.g. mainnet, goerli, sepolia, etc. (default "mainnet") + -n, --network string Target network. e.g. mainnet, goerli, sepolia, holesky, gnosis, chiado, etc. (default "mainnet") -p, --path string generation path for sedge data. Default is sedge-data (default "/path/to/sedge-data") Global Flags: @@ -75,6 +75,7 @@ Flags: -c, --consensus string Consensus engine client, e.g. teku, lodestar, prysm, lighthouse, Nimbus. Additionally, you can use this syntax ':' to override the docker image used for the client. If you want to use the default docker image, just use the client name -e, --execution string Execution engine client, e.g. geth, nethermind, besu, erigon. Additionally, you can use this syntax ':' to override the docker image used for the client. If you want to use the default docker image, just use the client name -v, --validator string Validator engine client, e.g. teku, lodestar, prysm, lighthouse, Nimbus. Additionally, you can use this syntax ':' to override the docker image used for the client. If you want to use the default docker image, just use the client name + --latest Use the latest version of clients. This sets the "latest" tag on the client's docker images. Latest version might not work. --checkpoint-sync-url string Initial state endpoint (trusted synced consensus endpoint) for the consensus client to sync from a finalized checkpoint. Provide faster sync process for the consensus client and protect it from long-range attacks affored by Weak Subjetivity. Each network has a default checkpoint sync url. --fee-recipient string Suggested fee recipient. Is a 20-byte Ethereum address which the execution layer might choose to set as the coinbase and the recipient of other fees or rewards. There is no guarantee that an execution node will use the suggested fee recipient to collect fees, it may use any address it chooses. It is assumed that an honest execution node will use the suggested fee recipient, but users should note this trust assumption --no-mev-boost Not use mev-boost if supported @@ -88,7 +89,6 @@ Flags: --el-extra-flag stringArray Additional flag to configure the execution client service in the generated docker-compose script. Example: 'sedge generate full-node --el-extra-flag "=value1" --el-extra-flag "=\"value2\""' --cl-extra-flag stringArray Additional flag to configure the consensus client service in the generated docker-compose script. Example: 'sedge generate full-node --cl-extra-flag "=value1" --cl-extra-flag "=\"value2\""' --vl-extra-flag stringArray Additional flag to configure the validator client service in the generated docker-compose script. Example: 'sedge generate full-node --vl-extra-flag "=value1" --vl-extra-flag "=\"value2\""' - --custom-ttd string Custom Terminal Total Difficulty to use for the execution client --custom-chainSpec string File path or url to use as custom network chainSpec for execution client. --custom-config string File path or url to use as custom network config file for consensus client. --custom-genesis string File path or url to use as custom network genesis for consensus client. @@ -102,7 +102,7 @@ Global Flags: --container-tag string Container tag to use. If defined, sedge will add to each container and the network, a suffix with the tag. e.g. sedge-validator-client -> sedge-validator-client-. --log-level string Set Log Level, e.g panic, fatal, error, warn, warning, info, debug, trace (default "info") --logging string Docker logging driver used by all the services. Set 'none' to use the default docker logging driver. Possible values: [none json] (default "json") - -n, --network string Target network. e.g. mainnet, goerli, sepolia, etc. (default "mainnet") + -n, --network string Target network. e.g. mainnet, goerli, sepolia, holesky, gnosis, chiado, etc. (default "mainnet") -p, --path string generation path for sedge data. Default is sedge-data (default "/path/to/sedge/sedge-data") ``` @@ -124,6 +124,7 @@ Usage: sedge generate consensus [flags] --execution-api-url --execution-auth-url [args] Flags: + --latest Use the latest version of clients. This sets the "latest" tag on the client's docker images. Latest version might not work. --execution-api-url string Execution API endpoint for the consensus client. Example: 'sedge generate consensus -r --execution-api-url=https://api.url.endpoint' --execution-auth-url string Execution AUTH endpoint for the consensus client. Example: 'sedge generate consensus -r --execution-auth-url=https://auth.url.endpoint' --checkpoint-sync-url string Initial state endpoint (trusted synced consensus endpoint) for the consensus client to sync from a finalized checkpoint. Provide faster sync process for the consensus client and protect it from long-range attacks affored by Weak Subjetivity. Each network has a default checkpoint sync url. @@ -161,9 +162,9 @@ Usage: sedge generate execution [flags] [args] Flags: + --latest Use the latest version of clients. This sets the "latest" tag on the client's docker images. Latest version might not work. --jwt-secret-path string Path to the JWT secret file --map-all Map all clients ports to host. Use with care. Useful to allow remote access to the clients - --custom-ttd string Custom Terminal Total Difficulty to use for the execution client --custom-chainSpec string File path or url to use as custom network chainSpec for execution client. --execution-bootnodes strings List of comma separated enodes to use as custom network peers for execution client. --el-extra-flag stringArray Additional flag to configure the execution client service in the generated docker-compose script. Example: 'sedge generate consensus--el-extra-flag "=value1" --el-extra-flag "=\"value2\""' @@ -173,7 +174,7 @@ Global Flags: --container-tag string Container tag to use. If defined, sedge will add to each container and the network, a suffix with the tag. e.g. sedge-validator-client -> sedge-validator-client-. --log-level string Set Log Level, e.g panic, fatal, error, warn, warning, info, debug, trace (default "info") --logging string Docker logging driver used by all the services. Set 'none' to use the default docker logging driver. Possible values: [none json] (default "json") - -n, --network string Target network. e.g. mainnet, goerli, sepolia, etc. (default "mainnet") + -n, --network string Target network. e.g. mainnet, goerli, sepolia, holesky, gnosis, chiado, etc. (default "mainnet") -p, --path string generation path for sedge data. Default is sedge-data (default "/path/to/sedge/sedge-data") ``` @@ -199,6 +200,7 @@ Usage: sedge generate validator [flags] --consensus-url [args] Flags: + --latest Use the latest version of clients. This sets the "latest" tag on the client's docker images. Latest version might not work. --consensus-url string Consensus endpoint for the validator client to connect to. Example: 'sedge generate validator --consensus-url http://localhost:4000' --fee-recipient string Suggested fee recipient. Is a 20-byte Ethereum address which the execution layer might choose to set as the coinbase and the recipient of other fees or rewards. There is no guarantee that an execution node will use the suggested fee recipient to collect fees, it may use any address it chooses. It is assumed that an honest execution node will use the suggested fee recipient, but users should note this trust assumption --graffiti string Graffiti to be used by the validator @@ -214,7 +216,7 @@ Global Flags: --container-tag string Container tag to use. If defined, sedge will add to each container and the network, a suffix with the tag. e.g. sedge-validator-client -> sedge-validator-client-. --log-level string Set Log Level, e.g panic, fatal, error, warn, warning, info, debug, trace (default "info") --logging string Docker logging driver used by all the services. Set 'none' to use the default docker logging driver. Possible values: [none json] (default "json") - -n, --network string Target network. e.g. mainnet, goerli, sepolia, etc. (default "mainnet") + -n, --network string Target network. e.g. mainnet, goerli, sepolia, holesky, gnosis, chiado, etc. (default "mainnet") -p, --path string generation path for sedge data. Default is sedge-data (default "/path/to/sedge/sedge-data") ``` diff --git a/docs/docs/commands/importKey.mdx b/docs/docs/commands/importKey.mdx index 6acadda73..bf2f2b3c6 100644 --- a/docs/docs/commands/importKey.mdx +++ b/docs/docs/commands/importKey.mdx @@ -78,7 +78,7 @@ To import the validator keys, and start the validator client after the import, r ```shell $ sedge import-key --from keystore -n sepolia --start-validator prysm 2023-01-26 11:59:34 -- [INFO] [Logger Init] Log level: info -2023-01-26 11:59:34 -- [INFO] You are running the latest version of sedge. Version: v0.6.0 +2023-01-26 11:59:34 -- [INFO] You are running the latest version of sedge. Version: v1.3.0 # highlight-next-line 2023-01-26 11:59:34 -- [WARN] The keys path is not the default one, copying the keys to the default path /root/sedge/example/sedge-data/keystore 2023-01-26 11:59:34 -- [INFO] Importing validator keys diff --git a/docs/docs/commands/keys.mdx b/docs/docs/commands/keys.mdx index ba6d6a920..2921b05ae 100644 --- a/docs/docs/commands/keys.mdx +++ b/docs/docs/commands/keys.mdx @@ -29,7 +29,7 @@ Flags: -h, --help help for keys -i, --install Install dependencies if not installed without asking --mnemonic-path string Path to file with a existing mnemonic to use. - -n, --network string Target network. e.g. mainnet, goerli, sepolia etc. (default "mainnet") + -n, --network string Target network. e.g. mainnet, goerli, sepolia, holesky, gnosis, chiado etc. (default "mainnet") --num-validators int Number of validators to generate. This number will be used in addition to the existing flag as the end index for the generated keystores. (default -1) --passphrase-path string Path to file with a keystores passphrase to use. -p, --path string Absolute path to keystore folder. e.g. /home/user/keystore (default "./docker-compose-scripts") diff --git a/docs/docs/commands/logs.mdx b/docs/docs/commands/logs.mdx index 0ef4861e7..967668d3e 100644 --- a/docs/docs/commands/logs.mdx +++ b/docs/docs/commands/logs.mdx @@ -5,7 +5,7 @@ id: logs # Logs -Running `sedge logs` will shut down running containers using docker compose CLI. +Running `sedge logs` will get running container logs using docker compose CLI. ## Help @@ -27,21 +27,3 @@ Flags: Global Flags: --logLevel string Set Log Level (default "info") ``` - -## Execution Example - -The execution of `sedge down` will close and remove all the opened containers and networks used by sedge. - -``` -$ sedge down -2022-00-00 00:00:00 -- [INFO] [Logger Init] Log level: info -2022-00-00 00:00:00 -- [INFO] You are running the latest version of sedge. Version: v0.5.1 -[sudo] password for maceo: -[+] Running 7/7 - ⠿ Container execution-client Removed 93.8s - ⠿ Container validator-client Removed 0.0s - ⠿ Container consensus-client Removed 3.8s - ⠿ Container validator-import-client Removed 0.0s - ⠿ Network docker-compose-scripts_default Removed 0.2s - ⠿ Network sedge_network Removed 0.1s -``` diff --git a/docs/docs/commands/networks.mdx b/docs/docs/commands/networks.mdx index 9930ef4b5..d756fa4a3 100644 --- a/docs/docs/commands/networks.mdx +++ b/docs/docs/commands/networks.mdx @@ -29,7 +29,7 @@ Global Flags: ``` $ sedge networks 2022-00-00 00:00:00 -- [INFO] [Logger Init] Log level: info -2022-00-00 00:00:00 -- [INFO] You are running the latest version of sedge. Version: v0.5.1 +2022-00-00 00:00:00 -- [INFO] You are running the latest version of sedge. Version: v1.3.0 2022-00-00 00:00:00 -- [INFO] Listing supported networks # Supported Networks diff --git a/docs/docs/commands/run.mdx b/docs/docs/commands/run.mdx index a56701ddb..de33be74f 100644 --- a/docs/docs/commands/run.mdx +++ b/docs/docs/commands/run.mdx @@ -58,7 +58,7 @@ the following command to start all services in the default generation path $ sedge run Using config file: /root/.sedge.yaml 2022-12-29 19:55:55 -- [INFO] [Logger Init] Logging configuration: {Level:debug} -2022-12-29 19:55:55 -- [INFO] You are running the latest version of sedge. Version: v0.6.0 +2022-12-29 19:55:55 -- [INFO] You are running the latest version of sedge. Version: v1.3.0 2022-12-29 20:40:24 -- [INFO] Checking dependencies: docker 2022-12-29 20:40:24 -- [INFO] All dependencies are installed on host machine 2022-12-29 19:55:55 -- [INFO] Setting up containers @@ -109,7 +109,7 @@ start the validator. $ sedge run --services execution,consensus Using config file: /root/.sedge.yaml 2022-12-29 21:03:29 -- [INFO] [Logger Init] Logging configuration: {Level:debug} -2022-12-29 21:03:29 -- [INFO] You are running the latest version of sedge. Version: v0.6.0 +2022-12-29 21:03:29 -- [INFO] You are running the latest version of sedge. Version: v1.3.0 2022-12-29 21:03:29 -- [INFO] Checking dependencies: docker 2022-12-29 21:03:29 -- [INFO] All dependencies are installed on host machine 2022-12-29 21:03:29 -- [INFO] Setting up containers @@ -154,7 +154,7 @@ Now you can start the validator client like follow: $ sedge run --services validator Using config file: /root/.sedge.yaml 2022-12-29 21:24:12 -- [INFO] [Logger Init] Logging configuration: {Level:debug} -2022-12-29 21:24:12 -- [INFO] You are running the latest version of sedge. Version: v0.6.0 +2022-12-29 21:24:12 -- [INFO] You are running the latest version of sedge. Version: v1.3.0 2022-12-29 21:24:12 -- [INFO] Checking dependencies: docker 2022-12-29 21:24:12 -- [INFO] All dependencies are installed on host machine 2022-12-29 21:24:12 -- [INFO] Setting up containers diff --git a/docs/docs/commands/show.mdx b/docs/docs/commands/show.mdx index 278cb504e..4a3f9f07c 100644 --- a/docs/docs/commands/show.mdx +++ b/docs/docs/commands/show.mdx @@ -29,7 +29,7 @@ Global Flags: ``` $ sedge show 2023-00-00 00:00:00 -- [INFO] [Logger Init] Log level: info -2023-00-00 00:00:00 -- [INFO] You are running the latest version of sedge. Version: v1.1.0 +2023-00-00 00:00:00 -- [INFO] You are running the latest version of sedge. Version: v1.3.0 2023-00-00 00:00:00 -- [INFO] Showing existing containers information 2023-00-00 00:00:00 -- [INFO] containers: - name: sedge-execution-client diff --git a/docs/docs/commands/slashingExport.mdx b/docs/docs/commands/slashingExport.mdx index d98e0b310..88d9e0833 100644 --- a/docs/docs/commands/slashingExport.mdx +++ b/docs/docs/commands/slashingExport.mdx @@ -59,7 +59,7 @@ This is an example of exporting slashing protection data from a setup using sepo ```shell $ sedge slashing-export lighthouse -n sepolia --out slashing-protection.json 2023-01-06 15:47:56 -- [INFO] [Logger Init] Log level: info -2023-01-06 15:47:57 -- [INFO] You are running the latest version of sedge. Version: v0.6.0 +2023-01-06 15:47:57 -- [INFO] You are running the latest version of sedge. Version: v1.3.0 2023-01-06 15:47:57 -- [INFO] Exporting slashing data from client lighthouse # highlight-next-line 2023-01-06 15:47:57 -- [INFO] The slashing protection container is starting... @@ -72,7 +72,7 @@ Notice in this case the validator client remains stopped because it has been sto ```shell $ sedge slashing-export lighthouse -n sepolia --out slashing-protection.json --start-validator 2023-01-06 15:51:11 -- [INFO] [Logger Init] Log level: info -2023-01-06 15:51:11 -- [INFO] You are running the latest version of sedge. Version: v0.6.0 +2023-01-06 15:51:11 -- [INFO] You are running the latest version of sedge. Version: v1.3.0 2023-01-06 15:51:11 -- [INFO] Exporting slashing data from client lighthouse 2023-01-06 15:51:11 -- [INFO] The slashing protection container is starting... 2023-01-06 15:51:12 -- [INFO] The slashing container ends successfully. @@ -87,7 +87,7 @@ Another case may be exporting the slashing data protection when the validator is ```shell $ sedge slashing-export lighthouse -n sepolia --out slashing-protection.json 2023-01-06 15:51:46 -- [INFO] [Logger Init] Log level: info -2023-01-06 15:51:46 -- [INFO] You are running the latest version of sedge. Version: v0.6.0 +2023-01-06 15:51:46 -- [INFO] You are running the latest version of sedge. Version: v1.3.0 # highlight-next-line 2023-01-06 15:51:46 -- [INFO] Stopping validator client # highlight-next-line @@ -108,7 +108,7 @@ In this case, the validator client is stopped before the export and started agai ```shell $ sedge slashing-export lighthouse -n sepolia --out slashing-protection.json --stop-validator 2023-01-06 15:52:07 -- [INFO] [Logger Init] Log level: info -2023-01-06 15:52:07 -- [INFO] You are running the latest version of sedge. Version: v0.6.0 +2023-01-06 15:52:07 -- [INFO] You are running the latest version of sedge. Version: v1.3.0 # highlight-next-line 2023-01-06 15:52:07 -- [INFO] Stopping validator client # highlight-next-line diff --git a/docs/docs/commands/slashingImport.mdx b/docs/docs/commands/slashingImport.mdx index 805b31c7e..004fe0fb6 100644 --- a/docs/docs/commands/slashingImport.mdx +++ b/docs/docs/commands/slashingImport.mdx @@ -58,7 +58,7 @@ This is an example of importing slashing protection data to a setup using sepoli ```shell $ sedge slashing-import prysm -f slashing-export.json -n sepolia 2023-01-06 14:59:11 -- [INFO] [Logger Init] Log level: info -2023-01-06 14:59:11 -- [INFO] You are running the latest version of sedge. Version: v0.6.0 +2023-01-06 14:59:11 -- [INFO] You are running the latest version of sedge. Version: v1.3.0 # highlight-next-line 2023-01-06 14:59:11 -- [INFO] Importing slashing data to client prysm from slashing-export.json # highlight-next-line @@ -72,7 +72,7 @@ Notice in this case the validator client remains stopped because it has been sto ```shell $ sedge slashing-import prysm -f slashing-export.json -n sepolia --start-validator 2023-01-06 15:08:05 -- [INFO] [Logger Init] Log level: info -2023-01-06 15:08:06 -- [INFO] You are running the latest version of sedge. Version: v0.6.0 +2023-01-06 15:08:06 -- [INFO] You are running the latest version of sedge. Version: v1.3.0 2023-01-06 15:08:06 -- [INFO] Importing slashing data to client prysm from slashing-export.json 2023-01-06 15:08:06 -- [INFO] The slashing protection container is starting... 2023-01-06 15:08:06 -- [INFO] The slashing container ends successfully. @@ -87,7 +87,7 @@ Another case may be importing the slashing data protection when the validator is ```shell $ sedge slashing-import prysm -f slashing-export.json -n sepolia 2023-01-06 15:10:27 -- [INFO] [Logger Init] Log level: info -2023-01-06 15:10:27 -- [INFO] You are running the latest version of sedge. Version: v0.6.0 +2023-01-06 15:10:27 -- [INFO] You are running the latest version of sedge. Version: v1.3.0 # highlight-next-line 2023-01-06 15:10:27 -- [INFO] Stopping validator client... # highlight-next-line @@ -108,7 +108,7 @@ In this case, the validator client is stopped before the import and started agai ```shell $ sedge slashing-import prysm -f slashing-export.json -n sepolia --stop-validator 2023-01-06 15:12:22 -- [INFO] [Logger Init] Log level: info -2023-01-06 15:12:22 -- [INFO] You are running the latest version of sedge. Version: v0.6.0 +2023-01-06 15:12:22 -- [INFO] You are running the latest version of sedge. Version: v1.3.0 # highlight-next-line 2023-01-06 15:12:22 -- [INFO] Stopping validator client... # highlight-next-line diff --git a/docs/docs/commands/version.mdx b/docs/docs/commands/version.mdx index 99314b59e..827d7c16b 100644 --- a/docs/docs/commands/version.mdx +++ b/docs/docs/commands/version.mdx @@ -29,6 +29,6 @@ Global Flags: ``` $ sedge version 2022-00-00 00:00:00 -- [INFO] [Logger Init] Log level: info -2022-00-00 00:00:00 -- [INFO] You are running the latest version of sedge. Version: v0.5.1 +2022-00-00 00:00:00 -- [INFO] You are running the latest version of sedge. Version: v1.3.0 sedge v0.5.1 ``` \ No newline at end of file diff --git a/docs/docs/guidelines/new-network.mdx b/docs/docs/guidelines/new-network.mdx index e47695c96..26e59084c 100644 --- a/docs/docs/guidelines/new-network.mdx +++ b/docs/docs/guidelines/new-network.mdx @@ -31,16 +31,15 @@ RELAY_URL={{if .RelayURL}}{{.RelayURL}}{{else}}https://0xafa4c6985aa049fb79dd370 4. Create an entry on `configs/init.go`, in the method `InitNetworksConfigs()` with the network information, for example: ``` { - Name: NetworkSepolia, - RequireJWT: true, - NetworkService: "merge", - GenesisForkVersion: "0x90000069", - DefaultTTD: "17000000000000000", - DefaultECBootnodes: []string{ - "enode://9246d00bc8fd1742e5ad2428b80fc4dc45d786283e05ef6edbd9002cbc335d40998444732fbe921cb88e1d2c73d1b1de53bae6a2237996e9bfe14f871baf7066@18.168.182.86:30303", "enode://ec66ddcf1a974950bd4c782789a7e04f8aa7110a72569b6e65fcd51e937e74eed303b1ea734e4d19cfaec9fbff9b6ee65bf31dcb50ba79acce9dd63a6aca61c7@52.14.151.177:30303", - }, - DefaultCCBootnodes: []string{ - "enr:-Iq4QMCTfIMXnow27baRUb35Q8iiFHSIDBJh6hQM5Axohhf4b6Kr_cOCu0htQ5WvVqKvFgY28893DHAg8gnBAXsAVqmGAX53x8JggmlkgnY0gmlwhLKAlv6Jc2VjcDI1NmsxoQK6S-Cii_KmfFdUJL2TANL3ksaKUnNXvTCv1tLwXs0QgIN1ZHCCIyk", "enr:-Ly4QFoZTWR8ulxGVsWydTNGdwEESueIdj-wB6UmmjUcm-AOPxnQi7wprzwcdo7-1jBW_JxELlUKJdJES8TDsbl1EdNlh2F0dG5ldHOI__78_v2bsV-EZXRoMpA2-lATkAAAcf__________gmlkgnY0gmlwhBLYJjGJc2VjcDI1NmsxoQI0gujXac9rMAb48NtMqtSTyHIeNYlpjkbYpWJw46PmYYhzeW5jbmV0cw-DdGNwgiMog3VkcIIjKA", "enr:-KG4QE5OIg5ThTjkzrlVF32WT_-XT14WeJtIz2zoTqLLjQhYAmJlnk4ItSoH41_2x0RX0wTFIe5GgjRzU2u7Q1fN4vADhGV0aDKQqP7o7pAAAHAyAAAAAAAAAIJpZIJ2NIJpcISlFsStiXNlY3AyNTZrMaEC-Rrd_bBZwhKpXzFCrStKp1q_HmGOewxY3KwM8ofAj_ODdGNwgiMog3VkcIIjKA", "enr:-L64QC9Hhov4DhQ7mRukTOz4_jHm4DHlGL726NWH4ojH1wFgEwSin_6H95Gs6nW2fktTWbPachHJ6rUFu0iJNgA0SB2CARqHYXR0bmV0c4j__________4RldGgykDb6UBOQAABx__________-CaWSCdjSCaXCEA-2vzolzZWNwMjU2azGhA17lsUg60R776rauYMdrAz383UUgESoaHEzMkvm4K6k6iHN5bmNuZXRzD4N0Y3CCIyiDdWRwgiMo", + NetworkSepolia: { + Name: NetworkSepolia, + NetworkService: "merge", + GenesisForkVersion: "0x90000069", + SupportsMEVBoost: true, + CheckpointSyncURL: "https://sepolia.checkpoint-sync.ethpandaops.io", + RelayURLs: []string{ + "https://0x845bd072b7cd566f02faeb0a4033ce9399e42839ced64e8b2adcfc859ed1e8e1a5a293336a49feac6d9a5edb779be53a@builder-relay-sepolia.flashbots.net", + }, }, }, ``` diff --git a/docs/docs/networks/chiado.mdx b/docs/docs/networks/chiado.mdx index 2d849d325..a2040c1e4 100644 --- a/docs/docs/networks/chiado.mdx +++ b/docs/docs/networks/chiado.mdx @@ -1,11 +1,11 @@ --- -sidebar_position: 5 +sidebar_position: 6 id: chiado --- # Chiado -Chiado is a Gnosis Chain tesnet. Gnosis Chain is an EVM based Ethereum sidechain that is designed to be a platform for +Chiado is a Gnosis Chain testnet. Gnosis Chain is an EVM based Ethereum sidechain that is designed to be a platform for decentralized prediction markets. ## Supported Execution Clients diff --git a/docs/docs/networks/gnosis.mdx b/docs/docs/networks/gnosis.mdx index 2f00f0a04..5b7606b2c 100644 --- a/docs/docs/networks/gnosis.mdx +++ b/docs/docs/networks/gnosis.mdx @@ -1,5 +1,5 @@ --- -sidebar_position: 4 +sidebar_position: 5 id: gnosis --- diff --git a/docs/docs/networks/holesky.mdx b/docs/docs/networks/holesky.mdx new file mode 100644 index 000000000..862fbd7a4 --- /dev/null +++ b/docs/docs/networks/holesky.mdx @@ -0,0 +1,59 @@ +--- +sidebar_position: 4 +id: holesky +--- + +# Holesky + +Holesky is Ethereum's public testnet that serves as a technical experimentation platform for Ethereum's infrastructure, staking designs, and protocol-level developments. This testing environment brings its own set of validators, a dedicated block explorer, and an ecosystem of faucets. + +## Supported Execution Clients +- [Nethermind](https://docs.nethermind.io/) +- [Geth](https://geth.ethereum.org/docs/) +- [Erigon](https://github.com/ledgerwatch/erigon) +- [Besu](https://besu.hyperledger.org/en/stable/) + +## Supported Consensus Clients +- [Lighthouse](https://lighthouse-book.sigmaprime.io/) +- [Lodestar](https://chainsafe.github.io/lodestar/) +- [Prysm](https://docs.prylabs.network/docs/getting-started/) +- [Teku](https://docs.teku.consensys.net/en/latest/) + +## Supported Validator Clients +- [Lighthouse](https://lighthouse-book.sigmaprime.io/) +- [Lodestar](https://chainsafe.github.io/lodestar/) +- [Prysm](https://docs.prylabs.network/docs/getting-started/) +- [Teku](https://docs.teku.consensys.net/en/latest/) + + +## Generating a Full Node + +To generate a setup of a full node (without a validator node) with random clients, you only need to add the `--no-validator` to `sedge generate full-node`. For example: + +```bash +sedge generate full-node --no-validator --network=holesky +``` + +## Generating a Full Node with a Validator + +To generate a setup of a validator with random clients, you need to omit the `--no-validator` flag. For example: + +```bash +sedge generate full-node --network=holesky +``` + +## Create keystore for validator + +To create a keystore for a validator, you need to run the following command: + +```bash +sedge keys --network holesky +``` + +## Running your setup + +Once you have generated your setup, you can run it with the following command: + +``` +sedge run +``` \ No newline at end of file diff --git a/docs/docs/quickstart/complete-guide.mdx b/docs/docs/quickstart/complete-guide.mdx index a5d5f08da..91c2e8b8c 100644 --- a/docs/docs/quickstart/complete-guide.mdx +++ b/docs/docs/quickstart/complete-guide.mdx @@ -41,14 +41,14 @@ want to use another installation method: ``` - curl -L https://github.com/NethermindEth/sedge/releases/download/v1.2.3/sedge-v1.2.3-linux-amd64 --output sedge + curl -L https://github.com/NethermindEth/sedge/releases/download/v1.3.0/sedge-v1.3.0-linux-amd64 --output sedge ``` ``` - wget https://github.com/NethermindEth/sedge/releases/download/v1.2.3/sedge-v1.2.3-linux-amd64 -O sedge + wget https://github.com/NethermindEth/sedge/releases/download/v1.3.0/sedge-v1.3.0-linux-amd64 -O sedge ``` @@ -141,6 +141,24 @@ You can learn more about `sedge generate` if you check [here in our documentatio ::: +:::info + +If you want to use the client's latest version and avoid using the fixed version tested by us, you can generate the +setup using the following command: `sedge generate full-node --latest`. If you want to learn +more, you can check [here in our documentation](/docs/commands/generate). + +The `--latest` flag can be used for the `full-node`, `execution`, `consensus` and `validator` commands. + +::: + +:::info + +You can update your client's versions using the following commands if the clients release any version: +1. Run `docker compose -f /path/to/docker-compose.yml pull` to update the images. +2. Run `docker compose -f /path/to/docker-compose.yml up -d` to restart the containers. + +::: + ##### 2.2.2 Generate validator keystore Running the `sedge keys` command will generate a keystore folder with validator keys inside. This keystore contains a `deposit_data.json` that can be used to register the validator. diff --git a/docs/docs/quickstart/index.md b/docs/docs/quickstart/index.md index ec7b74ddb..887f2cef7 100644 --- a/docs/docs/quickstart/index.md +++ b/docs/docs/quickstart/index.md @@ -4,8 +4,12 @@ keywords: - sedge - installation - validator - - goerli - mainnet + - goerli + - sepolia + - holesky + - chiado + - gnosis - Ethereum - mev-boost --- diff --git a/docs/docs/quickstart/install-guide.mdx b/docs/docs/quickstart/install-guide.mdx index 647bf11e7..9f00a5d6d 100644 --- a/docs/docs/quickstart/install-guide.mdx +++ b/docs/docs/quickstart/install-guide.mdx @@ -37,7 +37,7 @@ Downloading any binary from the internet risks downloading files that malicious, - > Replace `` with the desired version number, e.g 1.2.2; `` with your OS, e.g linux; and `` with your architecture, e.g amd64. + > Replace `` with the desired version number, e.g 1.3.0; `` with your OS, e.g linux; and `` with your architecture, e.g amd64. 2. Open a console or terminal instance on the directory you downloaded the binary. 3. Set binary as executable executing `chmod +x ` in the Terminal. Replace `` with the name of the downloaded binary. diff --git a/docs/package-lock.json b/docs/package-lock.json index 1b8cd540a..4a0758606 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -181,16 +181,81 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "dependencies": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/@babel/compat-data": { "version": "7.19.3", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.3.tgz", @@ -237,12 +302,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz", - "integrity": "sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dependencies": { - "@babel/types": "^7.19.3", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { @@ -370,9 +436,9 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "engines": { "node": ">=6.9.0" } @@ -389,23 +455,23 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" @@ -525,28 +591,28 @@ } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "dependencies": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "engines": { "node": ">=6.9.0" } @@ -587,12 +653,12 @@ } }, "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -664,9 +730,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz", - "integrity": "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1908,31 +1974,31 @@ } }, "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz", - "integrity": "sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.3", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.3", - "@babel/types": "^7.19.3", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1941,12 +2007,12 @@ } }, "node_modules/@babel/types": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz", - "integrity": "sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dependencies": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2897,12 +2963,12 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@leichtgewicht/ip-codec": { @@ -8198,9 +8264,15 @@ } }, "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -8754,9 +8826,9 @@ } }, "node_modules/postcss": { - "version": "8.4.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz", - "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "funding": [ { "type": "opencollective", @@ -8765,10 +8837,14 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, @@ -12829,11 +12905,63 @@ } }, "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", "requires": { - "@babel/highlight": "^7.18.6" + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "@babel/compat-data": { @@ -12871,12 +12999,13 @@ } }, "@babel/generator": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.3.tgz", - "integrity": "sha512-fqVZnmp1ncvZU757UzDheKZpfPgatqY59XtW2/j/18H7u76akb8xqvjw82f+i2UKd/ksYsSick/BCLQUUtJ/qQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "requires": { - "@babel/types": "^7.19.3", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "dependencies": { @@ -12971,9 +13100,9 @@ } }, "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" }, "@babel/helper-explode-assignable-expression": { "version": "7.18.6", @@ -12984,20 +13113,20 @@ } }, "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" } }, "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-member-expression-to-functions": { @@ -13084,22 +13213,22 @@ } }, "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", "requires": { - "@babel/types": "^7.18.6" + "@babel/types": "^7.22.5" } }, "@babel/helper-string-parser": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", - "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==" + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" }, "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" }, "@babel/helper-validator-option": { "version": "7.18.6", @@ -13128,12 +13257,12 @@ } }, "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "dependencies": { @@ -13189,9 +13318,9 @@ } }, "@babel/parser": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.3.tgz", - "integrity": "sha512-pJ9xOlNWHiy9+FuFP09DEAFbAn4JskgRsVcc169w2xRBC3FRGuQEwjeIMMND9L2zc0iEhO/tGv4Zq+km+hxNpQ==" + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==" }, "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.18.6", @@ -13993,39 +14122,39 @@ } }, "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" } }, "@babel/traverse": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.3.tgz", - "integrity": "sha512-qh5yf6149zhq2sgIXmwjnsvmnNQC2iw70UFjp4olxucKrWd/dvlUsBI88VSLUsnMNF7/vnOiA+nk1+yLoCqROQ==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.19.3", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.19.3", - "@babel/types": "^7.19.3", + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.19.3", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.3.tgz", - "integrity": "sha512-hGCaQzIY22DJlDh9CH7NOxgKkFjBk0Cw9xDO1Xmh2151ti7wiGfQ3LauXzL4HP1fmFlTX6XjpRETTpUcv7wQLw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "requires": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" } }, @@ -14767,12 +14896,12 @@ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "@jridgewell/trace-mapping": { - "version": "0.3.15", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", - "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "@leichtgewicht/ip-codec": { @@ -18651,9 +18780,9 @@ } }, "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" }, "negotiator": { "version": "0.6.3", @@ -19046,11 +19175,11 @@ } }, "postcss": { - "version": "8.4.17", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.17.tgz", - "integrity": "sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "requires": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } diff --git a/docs/src/components/HomepageFeatures/index.js b/docs/src/components/HomepageFeatures/index.js index 03a88efa9..2d612e1fb 100644 --- a/docs/src/components/HomepageFeatures/index.js +++ b/docs/src/components/HomepageFeatures/index.js @@ -8,7 +8,7 @@ const FeatureList = [ Svg: require('@site/static/img/ethereum.svg').default, description: ( <> - We fully support Mainnet, Goerli(tesnet) and Sepolia(tesnet). + We fully support Mainnet, and Testnets (Goerli, Sepolia, and Holesky). ), @@ -18,7 +18,7 @@ const FeatureList = [ Svg: require('@site/static/img/gnosis.svg').default, description: ( <> - We fully support deployment on Gnosis and Chiado(tesnet). + We fully support deployment on Gnosis and Chiado(testnet). ), }, diff --git a/go.mod b/go.mod index e199967e2..298008296 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/NethermindEth/sedge -go 1.18 +go 1.19 require ( github.com/AlecAivazis/survey/v2 v2.3.6 @@ -8,7 +8,8 @@ require ( github.com/antonfisher/nested-logrus-formatter v1.3.1 github.com/cenkalti/backoff/v4 v4.2.0 github.com/compose-spec/compose-go v1.12.0 - github.com/docker/docker v23.0.3+incompatible + github.com/distribution/reference v0.5.0 + github.com/docker/docker v24.0.7+incompatible github.com/golang/mock v1.6.0 github.com/google/go-github/v47 v47.1.0 github.com/google/uuid v1.3.0 @@ -37,7 +38,7 @@ require ( github.com/creack/pty v1.1.18 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/distribution/distribution/v3 v3.0.0-20230223072852-e5d5810851d1 // indirect - github.com/docker/distribution v2.8.2+incompatible // indirect + github.com/docker/distribution v2.8.3+incompatible // indirect github.com/docker/go-connections v0.4.0 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/ferranbt/fastssz v0.1.3 // indirect @@ -70,12 +71,12 @@ require ( github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect - golang.org/x/crypto v0.6.0 // indirect + golang.org/x/crypto v0.14.0 // indirect golang.org/x/mod v0.8.0 // indirect - golang.org/x/net v0.7.0 // indirect - golang.org/x/sys v0.5.0 // indirect - golang.org/x/term v0.5.0 // indirect - golang.org/x/text v0.7.0 // indirect + golang.org/x/net v0.17.0 // indirect + golang.org/x/sys v0.13.0 // indirect + golang.org/x/term v0.13.0 // indirect + golang.org/x/text v0.13.0 // indirect golang.org/x/time v0.0.0-20220609170525-579cf78fd858 // indirect golang.org/x/tools v0.6.0 // indirect ) diff --git a/go.sum b/go.sum index 943480dea..db80d4f44 100644 --- a/go.sum +++ b/go.sum @@ -23,10 +23,12 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/distribution/distribution/v3 v3.0.0-20230223072852-e5d5810851d1 h1:OtfRoaZ54jKZ7jl9WuxqekousLR9T63iJf0y2EdC2S4= github.com/distribution/distribution/v3 v3.0.0-20230223072852-e5d5810851d1/go.mod h1:r5XLH1cp+Wau2jxdptkYsFvvvzPPQTIe8eUuQ0vq30Q= -github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= -github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v23.0.3+incompatible h1:9GhVsShNWz1hO//9BNg/dpMnZW25KydO4wtVxWAIbho= -github.com/docker/docker v23.0.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= +github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= +github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= +github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM= +github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= @@ -172,8 +174,8 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= -golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= +golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= +golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -185,8 +187,8 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= +golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -206,16 +208,16 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= +golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY= -golang.org/x/term v0.5.0 h1:n2a8QNdAb0sZNpU9R1ALUXBbY+w51fCQDN+7EdxNBsY= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= +golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20220609170525-579cf78fd858 h1:Dpdu/EMxGMFgq0CeYMh4fazTD2vtlZRYE7wyynxJb9U= golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/internal/pkg/env/check_variable_test.go b/internal/pkg/env/check_variable_test.go index 2a55105fb..9515af975 100644 --- a/internal/pkg/env/check_variable_test.go +++ b/internal/pkg/env/check_variable_test.go @@ -35,15 +35,6 @@ func TestCheckVariable(t *testing.T) { want bool isErr bool }{ - { - "Test case 1, mainnet, no TTD", - ReMEV, - "mainnet", - "execution", - "nethermind", - false, - false, - }, { "Test case 2, invalid network, error", ReMEV, diff --git a/internal/pkg/env/get_variable.go b/internal/pkg/env/get_variable.go index 48baaab66..96160da54 100644 --- a/internal/pkg/env/get_variable.go +++ b/internal/pkg/env/get_variable.go @@ -86,31 +86,3 @@ func GetCCBootnodes(envFilePath string) ([]string, error) { log.Warnf(configs.NoBootnodesFound, envFilePath) return nil, nil } - -/* -GetTTD : -Get TTD from the environment variables in .env. - -params :- -a. path to generated env file - -returns :- -a. []string -List of bootnodes -b. error -Error if any -*/ -func GetTTD(envFilePath string) (string, error) { - content, err := os.ReadFile(envFilePath) - if err != nil { - return "", err - } - - if m := ReTTD.FindStringSubmatch(string(content)); m != nil { - m[1] = strings.ReplaceAll(m[1], "\"", "") - return strings.Trim(m[1], "\r\n "), nil - } - - log.Warnf(configs.NoBootnodesFound, envFilePath) - return "", nil -} diff --git a/internal/pkg/env/get_variable_test.go b/internal/pkg/env/get_variable_test.go index a457049b1..bb5a6831f 100644 --- a/internal/pkg/env/get_variable_test.go +++ b/internal/pkg/env/get_variable_test.go @@ -101,46 +101,6 @@ func TestGetECBootnodes(t *testing.T) { } } -func TestGetTTD(t *testing.T) { - t.Parallel() - - tcs := []struct { - name string - testdataCase string - want string - isErr bool - }{ - { - name: "Test case 1, no TTD", - testdataCase: "case_1", - want: "", - isErr: false, - }, - { - name: "Test case 2, TTD", - testdataCase: "case_2", - want: "8000000000000000000000001000000000000", - isErr: false, - }, - } - - for _, tc := range tcs { - t.Run(tc.name, func(t *testing.T) { - testCaseEnvFilePath := filepath.Join("testdata", tc.testdataCase, ".env") - got, err := GetTTD(testCaseEnvFilePath) - - descr := fmt.Sprintf("GetTTD(%s)", testCaseEnvFilePath) - if err = utils.CheckErr(descr, tc.isErr, err); err != nil { - t.Error(err) - } - - if got != tc.want { - t.Errorf("Expected %v, got %v. Function call: %s", tc.want, got, descr) - } - }) - } -} - func TestCheckVariableBase(t *testing.T) { t.Parallel() diff --git a/internal/pkg/env/regex.go b/internal/pkg/env/regex.go index bddcadc98..4d4eb7885 100644 --- a/internal/pkg/env/regex.go +++ b/internal/pkg/env/regex.go @@ -18,7 +18,6 @@ package env import "regexp" var ( - ReTTD = regexp.MustCompile(`TTD=(.*)`) ReMEV = regexp.MustCompile(`MEV=(.*)`) ReXEEV = regexp.MustCompile(`XEE_VERSION=(.*)`) ReClBOOTNODES = regexp.MustCompile(`CC_BOOTNODES=(.*)`) diff --git a/internal/pkg/env/testdata/case_2/.env b/internal/pkg/env/testdata/case_2/.env index e17c80e21..65ec66915 100644 --- a/internal/pkg/env/testdata/case_2/.env +++ b/internal/pkg/env/testdata/case_2/.env @@ -1,3 +1,2 @@ -TTD=8000000000000000000000001000000000000 EC_BOOTNODES="enode://011f758e6552d105183b1761c5e2dea0111bc20fd5f6422bc7f91e0fabbec9a6595caf6239b37feb773dddd3f87240d99d859431891e4a642cf2a0a9e6cbb98a@51.141.78.53:30303,enode://176b9417f511d05b6b2cf3e34b756cf0a7096b3094572a8f6ef4cdcb9d1f9d00683bf0f83347eebdf3b81c3521c2332086d9592802230bf528eaf606a1d9677b@13.93.54.137:30303,enode://46add44b9f13965f7b9875ac6b85f016f341012d84f975377573800a863526f4da19ae2c620ec73d11591fa9510e992ecc03ad0751f53cc02f7c7ed6d55c7291@94.237.54.114:30313,enode://b5948a2d3e9d486c4d75bf32713221c2bd6cf86463302339299bd227dc2e276cd5a1c7ca4f43a0e9122fe9af884efed563bd2a1fd28661f3b5f5ad7bf1de5949@18.218.250.66:30303" CC_BOOTNODES="enr:-LK4QH1xnjotgXwg25IDPjrqRGFnH1ScgNHA3dv1Z8xHCp4uP3N3Jjl_aYv_WIxQRdwZvSukzbwspXZ7JjpldyeVDzMCh2F0dG5ldHOIAAAAAAAAAACEZXRoMpB53wQoAAAQIP__________gmlkgnY0gmlwhIe1te-Jc2VjcDI1NmsxoQOkcGXqbCJYbcClZ3z5f6NWhX_1YPFRYRRWQpJjwSHpVIN0Y3CCIyiDdWRwgiMo,enr:-KG4QCIzJZTY_fs_2vqWEatJL9RrtnPwDCv-jRBuO5FQ2qBrfJubWOWazri6s9HsyZdu-fRUfEzkebhf1nvO42_FVzwDhGV0aDKQed8EKAAAECD__________4JpZIJ2NIJpcISHtbYziXNlY3AyNTZrMaED4m9AqVs6F32rSCGsjtYcsyfQE2K8nDiGmocUY_iq-TSDdGNwgiMog3VkcIIjKA,enr:-Ku4QFmUkNp0g9bsLX2PfVeIyT-9WO-PZlrqZBNtEyofOOfLMScDjaTzGxIb1Ns9Wo5Pm_8nlq-SZwcQfTH2cgO-s88Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpDkvpOTAAAQIP__________gmlkgnY0gmlwhBLf22SJc2VjcDI1NmsxoQLV_jMOIxKbjHFKgrkFvwDvpexo6Nd58TK5k7ss4Vt0IoN1ZHCCG1g,enr:-LK4QLINdtobGquK7jukLDAKmsrH2ZuHM4k0TklY5jDTD4ZgfxR9weZmo5Jwu81hlKu3qPAvk24xHGBDjYs4o8f1gZ0Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpB53wQoAAAQIP__________gmlkgnY0gmlwhDRN_P6Jc2VjcDI1NmsxoQJuNujTgsJUHUgVZML3pzrtgNtYg7rQ4K1tkWERgl0DdoN0Y3CCIyiDdWRwgiMo,enr:-LK4QMzPq4Q7w5R-rnGQDcI8BYky6oPVBGQTbS1JJLVtNi_8PzBLV7Bdzsoame9nJK5bcJYpGHn4SkaDN2CM6tR5G_4Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpB53wQoAAAQIP__________gmlkgnY0gmlwhAN4yvyJc2VjcDI1NmsxoQKa8Qnp_P2clLIP6VqLKOp_INvEjLszalEnW0LoBZo4YYN0Y3CCI4yDdWRwgiOM,enr:-LK4QLM_pPHa78R8xlcU_s40Y3XhFjlb3kPddW9lRlY67N5qeFE2Wo7RgzDgRs2KLCXODnacVHMFw1SfpsW3R474RZEBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpB53wQoAAAQIP__________gmlkgnY0gmlwhANBY-yJc2VjcDI1NmsxoQNsZkFXgKbTzuxF7uwxlGauTGJelE6HD269CcFlZ_R7A4N0Y3CCI4yDdWRwgiOM,enr:-KK4QH0RsNJmIG0EX9LSnVxMvg-CAOr3ZFF92hunU63uE7wcYBjG1cFbUTvEa5G_4nDJkRhUq9q2ck9xY-VX1RtBsruBtIRldGgykIL0pysBABAg__________-CaWSCdjSCaXCEEnXQ0YlzZWNwMjU2azGhA1grTzOdMgBvjNrk-vqWtTZsYQIi0QawrhoZrsn5Hd56g3RjcIIjKIN1ZHCCIyg" diff --git a/internal/pkg/generate/generate_scripts.go b/internal/pkg/generate/generate_scripts.go index 8b86272de..424bd4bc9 100644 --- a/internal/pkg/generate/generate_scripts.go +++ b/internal/pkg/generate/generate_scripts.go @@ -156,7 +156,7 @@ func ComposeFile(gd *GenData, at io.Writer) error { } cls := mapClients(gd) - + networkConfig := configs.NetworksConfigs()[gd.Network] for tmpKind, client := range cls { var name string if client == nil { @@ -166,7 +166,7 @@ func ComposeFile(gd *GenData, at io.Writer) error { } tmp, err := templates.Services.ReadFile(strings.Join([]string{ "services", - configs.NetworksConfigs()[gd.Network].NetworkService, + networkConfig.NetworkService, tmpKind, name + ".tmpl", }, "/")) @@ -216,11 +216,6 @@ func ComposeFile(gd *GenData, at io.Writer) error { } } - ttd := gd.CustomTTD - if len(ttd) == 0 { - ttd = configs.NetworksConfigs()[gd.Network].DefaultTTD - } - // Check for CL Bootnode nodes if len(gd.CCBootnodes) == 0 { gd.CCBootnodes = configs.NetworksConfigs()[gd.Network].DefaultCCBootnodes @@ -251,9 +246,8 @@ func ComposeFile(gd *GenData, at io.Writer) error { data := DockerComposeData{ Services: gd.Services, Network: gd.Network, - TTD: ttd, XeeVersion: xeeVersion, - Mev: gd.MevBoostService || (mevSupported && gd.Mev), + Mev: networkConfig.SupportsMEVBoost && (gd.MevBoostService || (mevSupported && gd.Mev)), MevBoostOnValidator: gd.MevBoostService || (mevSupported && gd.Mev) || gd.MevBoostOnValidator, MevPort: gd.Ports["MevPort"], MevBoostEndpoint: gd.MevBoostEndpoint, @@ -317,13 +311,13 @@ func EnvFile(gd *GenData, at io.Writer) error { } cls := mapClients(gd) - + networkConfig := configs.NetworksConfigs()[gd.Network] for tmpKind, client := range cls { var tmp []byte if client == nil { tmp, err = templates.Services.ReadFile(strings.Join([]string{ "services", - configs.NetworksConfigs()[gd.Network].NetworkService, + networkConfig.NetworkService, tmpKind, "empty.tmpl", }, "/")) @@ -406,12 +400,12 @@ func EnvFile(gd *GenData, at io.Writer) error { data := EnvData{ Services: gd.Services, - Mev: gd.MevBoostService || (mevSupported && gd.Mev) || gd.MevBoostOnValidator, - ElImage: imageOrEmpty(cls[execution]), + Mev: networkConfig.SupportsMEVBoost && (gd.MevBoostService || (mevSupported && gd.Mev) || gd.MevBoostOnValidator), + ElImage: imageOrEmpty(cls[execution], gd.LatestVersion), ElDataDir: "./" + configs.ExecutionDir, - CcImage: imageOrEmpty(cls[consensus]), + CcImage: imageOrEmpty(cls[consensus], gd.LatestVersion), CcDataDir: "./" + configs.ConsensusDir, - VlImage: imageOrEmpty(cls[validator]), + VlImage: imageOrEmpty(cls[validator], gd.LatestVersion), VlDataDir: "./" + configs.ValidatorDir, ExecutionApiURL: executionApiUrl, ExecutionAuthURL: executionAuthUrl, @@ -580,8 +574,13 @@ func joinIfNotEmpty(strs ...string) string { } // imageOrEmpty returns the image of the client if it is not nil, otherwise returns an empty string -func imageOrEmpty(cls *clients.Client) string { +func imageOrEmpty(cls *clients.Client, latest bool) string { if cls != nil { + if latest { + splits := strings.Split(cls.Image, ":") + splits[len(splits)-1] = "latest" + return strings.Join(splits, ":") + } return cls.Image } return "" diff --git a/internal/pkg/generate/generate_scripts_test.go b/internal/pkg/generate/generate_scripts_test.go index b1720eb23..38ad4355b 100644 --- a/internal/pkg/generate/generate_scripts_test.go +++ b/internal/pkg/generate/generate_scripts_test.go @@ -104,26 +104,6 @@ func checkCCBootnodesOnConsensus(t *testing.T, data *GenData, compose, env io.Re return nil } -func checkTTDOnExecution(t *testing.T, data *GenData, compose, env io.Reader) error { - composeData := retrieveComposeData(t, compose) - customTTD := data.CustomTTD - if customTTD == "" { - customTTD = configs.NetworksConfigs()[data.Network].DefaultTTD - } - if customTTD != "" { - if composeData.Services.Execution != nil && data.ExecutionClient.Name == "besu" { - checkFlagOnCommands(t, composeData.Services.Execution.Command, "--override-genesis-config=terminalTotalDifficulty="+customTTD) - } - if composeData.Services.Execution != nil && data.ExecutionClient.Name == "nethermind" { - checkFlagOnCommands(t, composeData.Services.Execution.Command, "--Merge.TerminalTotalDifficulty="+customTTD) - } - if composeData.Services.Execution != nil && data.ExecutionClient.Name == "geth" { - checkFlagOnCommands(t, composeData.Services.Execution.Command, "--override.terminaltotaldifficulty="+customTTD) - } - } - return nil -} - func checkECBootnodesOnExecution(t *testing.T, data *GenData, compose, env io.Reader) error { composeData := retrieveComposeData(t, compose) if len(data.ECBootnodes) == 0 { @@ -240,7 +220,10 @@ func defaultFunc(t *testing.T, data *GenData, compose, env io.Reader) error { if utils.Contains(data.Services, configConsensus) { assert.NotNil(t, composeData.Services.ConfigConsensus) } - + networkConfig := configs.NetworksConfigs()[data.Network] + if !networkConfig.SupportsMEVBoost { + assert.Nil(t, composeData.Services.Mevboost) + } // load .env file envData := retrieveEnvData(t, env) if data.Network == "gnosis" { @@ -452,7 +435,7 @@ func customFlagsTestCases(t *testing.T) (tests []genTestData) { if utils.Contains(validatorClients, consensusCl) { tests = append(tests, genTestData{ - Description: fmt.Sprintf(baseDescription+"customTTD tests, execution: %s, consensus: %s, validator: %s, network: %s, all", executionCl, consensusCl, consensusCl, network), + Description: fmt.Sprintf(baseDescription+"execution: %s, consensus: %s, validator: %s, network: %s, all", executionCl, consensusCl, consensusCl, network), GenerationData: &GenData{ ExecutionClient: &clients.Client{Name: executionCl}, ConsensusClient: &clients.Client{Name: consensusCl}, @@ -460,7 +443,7 @@ func customFlagsTestCases(t *testing.T) (tests []genTestData) { Network: network, Services: []string{execution, consensus, validator}, }, - CheckFunctions: []CheckFunc{checkTTDOnExecution, defaultFunc, checkECBootnodesOnExecution, checkValidatorBlocker}, + CheckFunctions: []CheckFunc{defaultFunc, checkECBootnodesOnExecution, checkValidatorBlocker}, }, genTestData{ Description: fmt.Sprintf(baseDescription+"ecBootnodes tests, execution: %s, consensus: %s, validator: %s, network: %s, no validator", executionCl, consensusCl, consensusCl, network), @@ -471,7 +454,7 @@ func customFlagsTestCases(t *testing.T) (tests []genTestData) { ConsensusClient: &clients.Client{Name: consensusCl}, Network: network, }, - CheckFunctions: []CheckFunc{defaultFunc, checkECBootnodesOnExecution, checkTTDOnExecution, checkValidatorBlocker}, + CheckFunctions: []CheckFunc{defaultFunc, checkECBootnodesOnExecution, checkValidatorBlocker}, }, genTestData{ Description: fmt.Sprintf(baseDescription+"ccBootnodes tests, execution: %s, consensus: %s, validator: %s, network: %s, Execution Client not Valid", executionCl, consensusCl, consensusCl, network), diff --git a/internal/pkg/generate/types.go b/internal/pkg/generate/types.go index ead35407b..81e4a6491 100644 --- a/internal/pkg/generate/types.go +++ b/internal/pkg/generate/types.go @@ -69,7 +69,6 @@ type GenData struct { LoggingDriver string ECBootnodes []string CCBootnodes []string - CustomTTD string CustomChainSpecPath string CustomNetworkConfigPath string CustomGenesisPath string @@ -80,13 +79,13 @@ type GenData struct { ExecutionAuthUrl string ConsensusApiUrl string ContainerTag string + LatestVersion bool } // DockerComposeData : Struct Data object to be applied to docker-compose script type DockerComposeData struct { Services []string Network string - TTD string XeeVersion bool Mev bool MevBoostOnValidator bool diff --git a/internal/utils/networks_test.go b/internal/utils/networks_test.go index d8509725b..8e0ce0f82 100644 --- a/internal/utils/networks_test.go +++ b/internal/utils/networks_test.go @@ -21,7 +21,7 @@ import ( "testing" ) -var networks = []string{"mainnet", "custom", "goerli", "sepolia", "chiado", "gnosis"} +var networks = []string{"mainnet", "custom", "goerli", "sepolia", "chiado", "gnosis", "holesky"} func TestSupportedNetworks(t *testing.T) { names, err := SupportedNetworks() diff --git a/templates/envs/holesky/consensus/lighthouse.tmpl b/templates/envs/holesky/consensus/lighthouse.tmpl new file mode 100644 index 000000000..de9a9116d --- /dev/null +++ b/templates/envs/holesky/consensus/lighthouse.tmpl @@ -0,0 +1,13 @@ +{{/* lighthouse.tmpl */}} +{{ define "consensus" }} +# --- Consensus Layer - Beacon Node - configuration --- +CC_PEER_COUNT=50 +CC_LOG_LEVEL=info +EC_API_URL={{.ExecutionApiURL}} +EC_AUTH_URL={{.ExecutionAuthURL}} +CC_INSTANCE_NAME=Lighthouse +CC_IMAGE_VERSION={{.CcImage}} +CC_DATA_DIR={{.CcDataDir}} +CC_JWT_SECRET_PATH={{.JWTSecretPath}} +{{if .CheckpointSyncUrl}}CHECKPOINT_SYNC_URL={{.CheckpointSyncUrl}}{{end}} +{{ end }} \ No newline at end of file diff --git a/templates/envs/holesky/consensus/lodestar.tmpl b/templates/envs/holesky/consensus/lodestar.tmpl new file mode 100644 index 000000000..c78448baf --- /dev/null +++ b/templates/envs/holesky/consensus/lodestar.tmpl @@ -0,0 +1,14 @@ +{{/* lodestar.tmpl */}} +{{ define "consensus" }} +# --- Consensus Layer - Beacon Node - configuration --- +CC_PEER_COUNT=50 +CC_LOG_LEVEL=info +EC_API_URL={{.ExecutionApiURL}} +EC_AUTH_URL={{.ExecutionAuthURL}} +CC_INSTANCE_NAME=Lodestar +CC_IMAGE_VERSION={{.CcImage}} +CC_DATA_DIR={{.CcDataDir}} +CC_LODESTAR_PRESET=mainnet +CC_JWT_SECRET_PATH={{.JWTSecretPath}} +{{if .CheckpointSyncUrl}}CHECKPOINT_SYNC_URL={{.CheckpointSyncUrl}}{{end}} +{{ end }} diff --git a/templates/envs/holesky/consensus/prysm.tmpl b/templates/envs/holesky/consensus/prysm.tmpl new file mode 100644 index 000000000..c26d55016 --- /dev/null +++ b/templates/envs/holesky/consensus/prysm.tmpl @@ -0,0 +1,13 @@ +{{/* prysm.tmpl */}} +{{ define "consensus" }} +# --- Consensus Layer - Beacon Node - configuration --- +CC_PEER_COUNT=50 +CC_LOG_LEVEL=info +EC_API_URL={{.ExecutionApiURL}} +EC_AUTH_URL={{.ExecutionAuthURL}} +CC_INSTANCE_NAME=Prysm +CC_IMAGE_VERSION={{.CcImage}} +CC_DATA_DIR={{.CcDataDir}} +CC_JWT_SECRET_PATH={{.JWTSecretPath}} +{{if .CheckpointSyncUrl}}CHECKPOINT_SYNC_URL={{.CheckpointSyncUrl}}{{end}} +{{ end }} \ No newline at end of file diff --git a/templates/envs/holesky/consensus/teku.tmpl b/templates/envs/holesky/consensus/teku.tmpl new file mode 100644 index 000000000..3bf338468 --- /dev/null +++ b/templates/envs/holesky/consensus/teku.tmpl @@ -0,0 +1,13 @@ +{{/* teku.tmpl */}} +{{ define "consensus" }} +# --- Consensus Layer - Beacon Node - configuration --- +CC_PEER_COUNT=50 +CC_LOG_LEVEL=info +EC_API_URL={{.ExecutionApiURL}} +EC_AUTH_URL={{.ExecutionAuthURL}} +CC_INSTANCE_NAME=Teku +CC_IMAGE_VERSION={{.CcImage}} +CC_DATA_DIR={{.CcDataDir}} +CC_JWT_SECRET_PATH={{.JWTSecretPath}} +{{if .CheckpointSyncUrl}}CHECKPOINT_SYNC_URL={{.CheckpointSyncUrl}}{{end}} +{{ end }} \ No newline at end of file diff --git a/templates/envs/holesky/env_base.tmpl b/templates/envs/holesky/env_base.tmpl new file mode 100644 index 000000000..95c0b8c70 --- /dev/null +++ b/templates/envs/holesky/env_base.tmpl @@ -0,0 +1,10 @@ +{{/* docker-compose_base.tmpl */}} +{{ define "env" }} +# --- Global configuration --- +NETWORK=holesky +{{if .FeeRecipient}} +FEE_RECIPIENT={{.FeeRecipient}}{{end}} +{{template "execution" .}} +{{template "consensus" .}} +{{template "validator" .}} +{{ end }} \ No newline at end of file diff --git a/templates/envs/holesky/execution/besu.tmpl b/templates/envs/holesky/execution/besu.tmpl new file mode 100644 index 000000000..b9c05f713 --- /dev/null +++ b/templates/envs/holesky/execution/besu.tmpl @@ -0,0 +1,8 @@ +{{/* besu.tmpl */}} +{{ define "execution" }} +# --- Execution Layer - Execution Node - configuration --- +EC_IMAGE_VERSION={{.ElImage}} +EC_ENABLED_MODULES=ETH,NET,CLIQUE,DEBUG,MINER,NET,PERM,ADMIN,EEA,TXPOOL,PRIV,WEB3 +EC_DATA_DIR={{.ElDataDir}} +EC_JWT_SECRET_PATH={{.JWTSecretPath}} +{{ end }} \ No newline at end of file diff --git a/templates/envs/holesky/execution/erigon.tmpl b/templates/envs/holesky/execution/erigon.tmpl new file mode 100644 index 000000000..d59695f92 --- /dev/null +++ b/templates/envs/holesky/execution/erigon.tmpl @@ -0,0 +1,7 @@ +{{/* erigon.tmpl */}} +{{ define "execution" }} +# --- Execution Layer - Execution Node - configuration --- +EC_IMAGE_VERSION={{.ElImage}} +EC_DATA_DIR={{.ElDataDir}} +EC_JWT_SECRET_PATH={{.JWTSecretPath}} +{{ end }} diff --git a/templates/envs/holesky/execution/geth.tmpl b/templates/envs/holesky/execution/geth.tmpl new file mode 100644 index 000000000..84d69323e --- /dev/null +++ b/templates/envs/holesky/execution/geth.tmpl @@ -0,0 +1,9 @@ +{{/* geth.tmpl */}} +{{ define "execution" }} +# --- Execution Layer - Execution Node - configuration --- +EC_IMAGE_VERSION={{.ElImage}} +GETH_LOG_LEVEL=3 +EC_DATA_DIR={{.ElDataDir}} +EC_SYNC_MODE=snap +EC_JWT_SECRET_PATH={{.JWTSecretPath}} +{{ end }} \ No newline at end of file diff --git a/templates/envs/holesky/execution/nethermind.tmpl b/templates/envs/holesky/execution/nethermind.tmpl new file mode 100644 index 000000000..e6092b35f --- /dev/null +++ b/templates/envs/holesky/execution/nethermind.tmpl @@ -0,0 +1,8 @@ +{{/* nethermind.tmpl */}} +{{ define "execution" }} +# --- Execution Layer - Execution Node - configuration --- +EC_IMAGE_VERSION={{.ElImage}} +NETHERMIND_LOG_LEVEL=INFO +EC_DATA_DIR={{.ElDataDir}} +EC_JWT_SECRET_PATH={{.JWTSecretPath}} +{{ end }} \ No newline at end of file diff --git a/templates/envs/holesky/validator/lighthouse.tmpl b/templates/envs/holesky/validator/lighthouse.tmpl new file mode 100644 index 000000000..49b040fdd --- /dev/null +++ b/templates/envs/holesky/validator/lighthouse.tmpl @@ -0,0 +1,11 @@ +{{/* lighthouse.tmpl */}} +{{ define "validator" }} +# --- Consensus Layer - Validator Node - configuration --- +CC_API_URL={{.ConsensusApiURL}} +GRAFFITI={{.Graffiti}} +VL_LOG_LEVEL=info +VL_INSTANCE_NAME=LighthouseValidator +VL_IMAGE_VERSION={{.VlImage}} +KEYSTORE_DIR={{.KeystoreDir}} +VL_DATA_DIR={{.VlDataDir}} +{{ end }} \ No newline at end of file diff --git a/templates/envs/holesky/validator/lodestar.tmpl b/templates/envs/holesky/validator/lodestar.tmpl new file mode 100644 index 000000000..3b1ab5cba --- /dev/null +++ b/templates/envs/holesky/validator/lodestar.tmpl @@ -0,0 +1,12 @@ +{{/* lodestar.tmpl */}} +{{ define "validator" }} +# --- Consensus Layer - Validator Node - configuration --- +CC_API_URL={{.ConsensusApiURL}} +GRAFFITI={{.Graffiti}} +VL_LOG_LEVEL=info +VL_INSTANCE_NAME=LodestarValidator +VL_IMAGE_VERSION={{.VlImage}} +KEYSTORE_DIR={{.KeystoreDir}} +VL_DATA_DIR={{.VlDataDir}} +VL_LODESTAR_PRESET=mainnet +{{ end }} diff --git a/templates/envs/holesky/validator/prysm.tmpl b/templates/envs/holesky/validator/prysm.tmpl new file mode 100644 index 000000000..91122fbf1 --- /dev/null +++ b/templates/envs/holesky/validator/prysm.tmpl @@ -0,0 +1,13 @@ +{{/* prysm.tmpl */}} +{{ define "validator" }} +# --- Consensus Layer - Validator Node - configuration --- +CC_API_URL={{.ConsensusApiURL}} +CC_ADD_API_URL={{.ConsensusAdditionalApiURL}} +GRAFFITI={{.Graffiti}} +VL_LOG_LEVEL=info +VL_INSTANCE_NAME=PrysmValidator +VL_IMAGE_VERSION={{.VlImage}} +KEYSTORE_DIR={{.KeystoreDir}} +WALLET_DIR=./wallet +VL_DATA_DIR={{.VlDataDir}} +{{ end }} diff --git a/templates/envs/holesky/validator/teku.tmpl b/templates/envs/holesky/validator/teku.tmpl new file mode 100644 index 000000000..7ca5f6461 --- /dev/null +++ b/templates/envs/holesky/validator/teku.tmpl @@ -0,0 +1,11 @@ +{{/* teku.tmpl */}} +{{ define "validator" }} +# --- Consensus Layer - Validator Node - configuration --- +CC_API_URL={{.ConsensusApiURL}} +GRAFFITI={{.Graffiti}} +VL_LOG_LEVEL=info +VL_INSTANCE_NAME=TekuValidator +VL_IMAGE_VERSION={{.VlImage}} +KEYSTORE_DIR={{.KeystoreDir}} +VL_DATA_DIR={{.VlDataDir}} +{{ end }} \ No newline at end of file diff --git a/templates/services/merge/consensus/lighthouse.tmpl b/templates/services/merge/consensus/lighthouse.tmpl index eac17f87d..bef6e8eda 100644 --- a/templates/services/merge/consensus/lighthouse.tmpl +++ b/templates/services/merge/consensus/lighthouse.tmpl @@ -38,8 +38,7 @@ - --boot-nodes={{.CCBootnodes}}{{end}} - --execution-endpoints=${EC_AUTH_URL} - --execution-jwt=/tmp/jwt/jwtsecret - - --eth1-endpoints=${EC_API_URL}{{range $url := .FallbackELUrls}},{{$url}}{{end}}{{if .TTD}} - - --terminal-total-difficulty-override={{.TTD}}{{end}} + - --eth1-endpoints=${EC_API_URL}{{range $url := .FallbackELUrls}},{{$url}}{{end}} - --debug-level=${CC_LOG_LEVEL}{{with .FeeRecipient}} - --suggested-fee-recipient=${FEE_RECIPIENT}{{end}} - --validator-monitor-auto diff --git a/templates/services/merge/consensus/lodestar.tmpl b/templates/services/merge/consensus/lodestar.tmpl index 86a074abb..bf1750eca 100644 --- a/templates/services/merge/consensus/lodestar.tmpl +++ b/templates/services/merge/consensus/lodestar.tmpl @@ -31,8 +31,7 @@ - --network={{if .SplittedNetwork}}${CL_NETWORK}{{else}}${NETWORK}{{end}}{{end}} - --eth1=true - --eth1.providerUrls=${EC_API_URL}{{range $url := .FallbackELUrls}},{{$url}}{{end}} - - --execution.urls=${EC_AUTH_URL}{{if .TTD}} - - --terminal-total-difficulty-override={{.TTD}}{{end}} + - --execution.urls=${EC_AUTH_URL} - --logFile=/var/lib/lodestart/consensus/logs/beacon.log - --logFileLevel=${CC_LOG_LEVEL}{{with .FeeRecipient}} - --suggestedFeeRecipient=${FEE_RECIPIENT}{{end}} diff --git a/templates/services/merge/consensus/prysm.tmpl b/templates/services/merge/consensus/prysm.tmpl index c41a45545..3e5970cfc 100644 --- a/templates/services/merge/consensus/prysm.tmpl +++ b/templates/services/merge/consensus/prysm.tmpl @@ -26,8 +26,7 @@ - --contract-deployment-block={{.CustomDeployBlock}}{{end}}{{if .CustomGenesisPath}} - --genesis-state=/network_config/genesis.ssz{{end}}{{else}} - --{{if .SplittedNetwork}}${CL_NETWORK}{{else}}${NETWORK}{{end}}{{end}}{{range $enr := .CCBootnodesList}} - - --bootstrap-node={{$enr}}{{end}}{{if .TTD}} - - --terminal-total-difficulty-override={{.TTD}}{{end}} + - --bootstrap-node={{$enr}}{{end}} - --p2p-tcp-port={{.ClDiscoveryPort}} - --p2p-udp-port={{.ClDiscoveryPort}} - --jwt-secret=/tmp/jwt/jwtsecret diff --git a/templates/services/merge/consensus/teku.tmpl b/templates/services/merge/consensus/teku.tmpl index 52e8531f5..adfdaf20a 100644 --- a/templates/services/merge/consensus/teku.tmpl +++ b/templates/services/merge/consensus/teku.tmpl @@ -1,7 +1,7 @@ {{/* teku.tmpl */}} {{ define "consensus" }} - consensus:{{if and (ge .UID 0) (ge .GID 0)}} - user: "{{.UID}}:{{.GID}}"{{end}} + consensus: + user: "root:root" stop_grace_period: 30s container_name: sedge-consensus-client{{if .ContainerTag}}-{{.ContainerTag}}{{end}} restart: unless-stopped @@ -46,8 +46,7 @@ - --data-storage-non-canonical-blocks-enabled=false - --ee-endpoint=${EC_AUTH_URL}{{with .FeeRecipient}} - --validators-proposer-default-fee-recipient=${FEE_RECIPIENT}{{end}} - - --ee-jwt-secret-file=/tmp/jwt/jwtsecret{{if .TTD}} - - --Xnetwork-total-terminal-difficulty-override={{.TTD}}{{end}} + - --ee-jwt-secret-file=/tmp/jwt/jwtsecret - --metrics-enabled=true - --metrics-host-allowlist=* - --metrics-interface=0.0.0.0 diff --git a/templates/services/merge/execution/besu.tmpl b/templates/services/merge/execution/besu.tmpl index 4d7084927..90d15601e 100644 --- a/templates/services/merge/execution/besu.tmpl +++ b/templates/services/merge/execution/besu.tmpl @@ -21,8 +21,7 @@ expose: - {{.ElApiPort}} - {{.ElAuthPort}} - command:{{if .TTD}} - - --override-genesis-config=terminalTotalDifficulty={{.TTD}}{{end}} + command: - --sync-mode=X_SNAP - --data-storage-format=BONSAI{{if .CustomChainSpecPath}} - --genesis-file=/nethermind/custom_config/chainspec.json{{else}} diff --git a/templates/services/merge/execution/geth.tmpl b/templates/services/merge/execution/geth.tmpl index 4d0db7f60..49cf1a065 100644 --- a/templates/services/merge/execution/geth.tmpl +++ b/templates/services/merge/execution/geth.tmpl @@ -21,8 +21,7 @@ - {{.ElApiPort}} - {{.ElWsPort}} - {{.ElAuthPort}} - command:{{if .TTD}} - - --override.terminaltotaldifficulty={{.TTD}}{{end}}{{if .ECBootnodes}} + command:{{if .ECBootnodes}} - --bootnodes={{.ECBootnodes}}{{end}} - --syncmode=${EC_SYNC_MODE} - --http diff --git a/templates/services/merge/execution/nethermind.tmpl b/templates/services/merge/execution/nethermind.tmpl index 1440240c9..c661115f5 100644 --- a/templates/services/merge/execution/nethermind.tmpl +++ b/templates/services/merge/execution/nethermind.tmpl @@ -28,8 +28,7 @@ - --Init.ChainSpecPath=/nethermind/custom_config/chainspec.json{{end}} - --config={{if .CustomNetwork}}none{{else}}{{if .SplittedNetwork}}${EL_NETWORK}{{else}}${NETWORK}{{end}}{{end}} - --datadir=/nethermind/data - - --log=${NETHERMIND_LOG_LEVEL}{{if .TTD}} - - --Merge.TerminalTotalDifficulty={{.TTD}}{{end}} + - --log=${NETHERMIND_LOG_LEVEL} - --JsonRpc.Enabled=true - --JsonRpc.Host=0.0.0.0 - --JsonRpc.Port={{.ElApiPort}} diff --git a/templates/services/merge/validator/teku.tmpl b/templates/services/merge/validator/teku.tmpl index ad7b34703..5455ba496 100644 --- a/templates/services/merge/validator/teku.tmpl +++ b/templates/services/merge/validator/teku.tmpl @@ -1,7 +1,7 @@ {{/* teku.tmpl */}} {{ define "validator" }} - validator:{{if and (ge .UID 0) (ge .GID 0)}} - user: "{{.UID}}:{{.GID}}"{{end}} + validator: + user: "root:root" container_name: sedge-validator-client{{if .ContainerTag}}-{{.ContainerTag}}{{end}} image: ${VL_IMAGE_VERSION} depends_on: