diff --git a/launcher/src/backend/ServiceManager.js b/launcher/src/backend/ServiceManager.js index 909edc4e8..35c93144a 100644 --- a/launcher/src/backend/ServiceManager.js +++ b/launcher/src/backend/ServiceManager.js @@ -1214,12 +1214,12 @@ export class ServiceManager { } if (service.service === "FlashbotsMevBoostService") { command = service.entrypoint; - let index = command.findIndex((c) => /^-(mainnet|prater|goerli$)/.test(c)); + let index = command.findIndex((c) => /^-(mainnet|prater|goerli|sepolia|holesky$)/.test(c)); command[index] = "-" + newNetwork; index = command.findIndex((c) => c === "-relays") + 1; command[index] = '""'; } else if (service.service === "PrysmBeaconService") { - let index = command.findIndex((c) => /--(mainnet|prater|goerli)/.test(c)); + let index = command.findIndex((c) => /--(mainnet|prater|goerli|sepolia|holesky)/.test(c)); command[index] = "--" + newNetwork; if (newNetwork === "mainnet" && command.includes("--genesis-state=/opt/app/genesis/prysm-prater-genesis.ssz")) { command.splice(command.indexOf("--genesis-state=/opt/app/genesis/prysm-prater-genesis.ssz"), 1); @@ -1231,8 +1231,8 @@ export class ServiceManager { } } else { command = command.map((c) => { - if (/mainnet|prater|goerli/.test(c)) { - c = c.replace(/mainnet|prater|goerli/, newNetwork); + if (/mainnet|prater|goerli|sepolia|holesky/.test(c)) { + c = c.replace(/mainnet|prater|goerli|sepolia|holesky/, newNetwork); } return c; }); diff --git a/launcher/src/backend/ValidatorAccountManager.js b/launcher/src/backend/ValidatorAccountManager.js index d3a7a0fd7..8a03ccf8e 100644 --- a/launcher/src/backend/ValidatorAccountManager.js +++ b/launcher/src/backend/ValidatorAccountManager.js @@ -649,7 +649,7 @@ export class ValidatorAccountManager { await this.nodeConnection.sshService.exec( `chown 2000:2000 ${validatorsDir}/${pubkey}/exit_password.txt && chmod 700 ${validatorsDir}/${pubkey}/exit_password.txt` ); - const exitNimbusCmd = `docker run -v ${validatorsDir}:/validators --network=stereum sigp/lighthouse:latest lighthouse account validator exit --keystore=/validators/${pubkey}/keystore.json --password-file=/validators/${pubkey}/exit_password.txt --network=goerli --beacon-node=${client.dependencies.consensusClients[0] ? client.dependencies.consensusClients[0].buildConsensusClientHttpEndpointUrl() : "http:stereum-" + client.id + ":5052"} --no-confirmation`; + const exitNimbusCmd = `docker run -v ${validatorsDir}:/validators --network=stereum sigp/lighthouse:latest lighthouse account validator exit --keystore=/validators/${pubkey}/keystore.json --password-file=/validators/${pubkey}/exit_password.txt --network=${client.network} --beacon-node=${client.dependencies.consensusClients[0] ? client.dependencies.consensusClients[0].buildConsensusClientHttpEndpointUrl() : "http:stereum-" + client.id + ":5052"} --no-confirmation`; result = await this.nodeConnection.sshService.exec(exitNimbusCmd); await this.nodeConnection.sshService.exec( `rm ${validatorsDir}/${pubkey}/exit_password.txt` diff --git a/launcher/src/backend/ethereum-services/NodeService.js b/launcher/src/backend/ethereum-services/NodeService.js index b786253b1..233a884fd 100644 --- a/launcher/src/backend/ethereum-services/NodeService.js +++ b/launcher/src/backend/ethereum-services/NodeService.js @@ -19,6 +19,10 @@ export const networks = { sepolia: { name: "sepolia", dataEndpoint: "https://sepolia.beaconcha.in/api/v1", + }, + holesky: { + name: "holesky", + dataEndpoint: "https://holesky.beaconcha.in/api/v1", } }; diff --git a/launcher/src/components/UI/node-manage/SidebarManage.vue b/launcher/src/components/UI/node-manage/SidebarManage.vue index 6e655ab3f..453c9b097 100644 --- a/launcher/src/components/UI/node-manage/SidebarManage.vue +++ b/launcher/src/components/UI/node-manage/SidebarManage.vue @@ -110,6 +110,7 @@ export default { case "goerli": return (item) => this.archFilter(item.service); case "sepolia": + case "holesky": return (item) => item.service != "SSVNetworkService" && this.archFilter(item.service); case "gnosis": return (item) => diff --git a/launcher/src/components/UI/the-node/NodeTutorial.vue b/launcher/src/components/UI/the-node/NodeTutorial.vue index e437192f7..ed1d602f4 100644 --- a/launcher/src/components/UI/the-node/NodeTutorial.vue +++ b/launcher/src/components/UI/the-node/NodeTutorial.vue @@ -117,6 +117,15 @@ export default { icon: "/img/icon/click-installation/testnet-icon.png", }, ], + holesky: [ + { + title: this.$t("nodeSidebarVideo.stake"), + guide: "", + video: "https://www.youtube.com/embed/Cbu58ee_Wj4", + written: "https://stereum.net/ethereum-node-setup/eth-solo-staking-step-by-step-guide/", + icon: "/img/icon/click-installation/testnet-icon.png", + }, + ], gnosis: [ { title: this.$t("nodeSidebarVideo.gnoStake"), diff --git a/launcher/src/store/clickInstallation.js b/launcher/src/store/clickInstallation.js index dbec512f8..91d1868db 100644 --- a/launcher/src/store/clickInstallation.js +++ b/launcher/src/store/clickInstallation.js @@ -251,6 +251,7 @@ export const useClickInstall = defineStore("clickInstallation", { url: "https://checkpoint.gnosischain.com/", }, ], + holesky: [], }; }, actions: {}, diff --git a/launcher/src/store/nodeManage.js b/launcher/src/store/nodeManage.js index 5b826cd3f..f9f9c2db9 100644 --- a/launcher/src/store/nodeManage.js +++ b/launcher/src/store/nodeManage.js @@ -205,6 +205,15 @@ export const useNodeManage = defineStore("nodeManage", { dataEndpoint: "https://beacon.gnosischain.com/api/v1", support: ["staking", "stereum on arm"], }, + { + id: 5, + name: "Holesky Testnet", + network: "holesky", + icon: "/img/icon/click-installation/testnet-icon.png", + currencyIcon: "/img/icon/control/goETH_Currency_Symbol.png", + dataEndpoint: "https://holesky.beaconcha.in/api/v1", + support: ["staking", "stereum on arm", "mev boost"], + }, ], currentNetwork: {}, configNetwork: {},