Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,21 @@ import { docker } from "@dappnode/dockerapi";
import { params } from "@dappnode/params";
import { logs } from "@dappnode/logger";
import { Execution, Consensus, Signer, MevBoost } from "@dappnode/stakers";
import { Network } from "@dappnode/types";
import { L1_NETWORKS } from "@dappnode/types";

/**
* Creates the staker network and connects the staker packages to it
* Note: Only L1 networks are handled here. L2 networks have their own setup.
* TODO: should L2 networks be handled here as well?
*/
export async function createStakerNetworkAndConnectStakerPkgs(
execution: Execution,
consensus: Consensus,
signer: Signer,
mevBoost: MevBoost
): Promise<void> {
for (const network of Object.values(Network)) {
await createDockerStakerNetwork(params.DOCKER_STAKER_NETWORKS[network]);
for (const network of L1_NETWORKS) {
await createDockerStakerNetwork(params.DOCKER_BLOCKCHAIN_NETWORKS[network]);
const results = await Promise.allSettled([
execution.persistSelectedExecutionIfInstalled(network),
consensus.persistSelectedConsensusIfInstalled(network),
Expand Down
4 changes: 2 additions & 2 deletions packages/dappmanager/src/api/routes/metrics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { wrapHandler } from "../utils.js";
import * as db from "@dappnode/db";
import { listPackageNoThrow } from "@dappnode/dockerapi";
import { isEmpty } from "lodash-es";
import { Network } from "@dappnode/types";
import { L1_NETWORKS } from "@dappnode/types";
import { getHostInfoMemoized } from "@dappnode/hostscriptsservices";
import si from "systeminformation";
import { mevBoost, execution, consensus } from "../../index.js";
Expand Down Expand Up @@ -69,7 +69,7 @@ register.registerMetric(
return 0;
}

for (const network of ["mainnet", "prater", "gnosis", "lukso", "holesky", "hoodi", "sepolia"] as Network[]) {
for (const network of L1_NETWORKS) {
const isMevBoostSelected = mevBoost.DbHandlers[network].get();
const executionClient = execution.DbHandlers[network].get();
const consensusClient = consensus.DbHandlers[network].get();
Expand Down
13 changes: 8 additions & 5 deletions packages/dappmanager/src/calls/consensusClientGet.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ import {
consensusClientPrater,
consensusClientSepolia
} from "@dappnode/db";
import { Network } from "@dappnode/types";
import { Network, L1Network, isL1Network } from "@dappnode/types";

// Mapping of each network to its corresponding consensus client getter
const consensusClientMap: { [key in Network]: () => string | null | undefined } = {
// Mapping of each L1 network to its corresponding consensus client getter
const consensusClientMap: { [key in L1Network]: () => string | null | undefined } = {
mainnet: () => consensusClientMainnet.get(),
gnosis: () => consensusClientGnosis.get(),
hoodi: () => consensusClientHoodi.get(),
Expand All @@ -28,8 +28,11 @@ export async function consensusClientsGetByNetworks({
const result: Partial<Record<Network, string | null | undefined>> = {};

for (const network of networks) {
const getter = consensusClientMap[network];
result[network] = getter ? getter() : undefined;
if (isL1Network(network)) {
const getter = consensusClientMap[network];
result[network] = getter ? getter() : undefined;
}
// L2 networks don't have separate consensus clients, skip them
}

return result;
Expand Down
4 changes: 2 additions & 2 deletions packages/dappmanager/src/calls/packageInstall.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Network, Routes } from "@dappnode/types";
import { Network, L1Network, Routes } from "@dappnode/types";
import { packageInstall as pkgInstall } from "@dappnode/installer";
import { dappnodeInstaller } from "../index.js";
import { Consensus } from "@dappnode/stakers";
Expand Down Expand Up @@ -53,7 +53,7 @@ async function ensureNimbusConnection(dnpName: string): Promise<void> {

const consensus: Consensus = new Consensus(dappnodeInstaller);

const nimbusNetwork: Record<string, Network> = {
const nimbusNetwork: Record<string, L1Network> = {
"nimbus.dnp.dappnode.eth": Network.Mainnet,
"nimbus-prater.dnp.dappnode.eth": Network.Prater,
"nimbus-gnosis.dnp.dappnode.eth": Network.Gnosis,
Expand Down
13 changes: 12 additions & 1 deletion packages/dappmanager/src/calls/stakerConfig.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
import { StakerConfigGet, StakerConfigSet, Network } from "@dappnode/types";
import { StakerConfigGet, StakerConfigSet, Network, isL1Network } from "@dappnode/types";
import { execution, consensus, mevBoost, signer } from "../index.js";

/**
* Sets the staker configuration: execution and consensus clients, remote signer,
* mev boost, graffiti, fee recipient address and checkpoint sync url
* Note: This only works for L1 networks
*/
export async function stakerConfigSet({ stakerConfig }: { stakerConfig: StakerConfigSet }): Promise<void> {
const { network, executionDnpName, consensusDnpName, mevBoostDnpName, relays, web3signerDnpName } = stakerConfig;

if (!isL1Network(network)) {
throw new Error(`stakerConfigSet is only supported for L1 networks. Got: ${network}`);
}

await Promise.all([
await execution.setNewExecution(network, executionDnpName),
await consensus.setNewConsensus(network, consensusDnpName),
Expand All @@ -22,8 +28,13 @@ export async function stakerConfigSet({ stakerConfig }: { stakerConfig: StakerCo
/**
* Returns the current staker configuration: execution and consensus clients,
* remote signer, mev boost, graffiti, fee recipient address and checkpoint sync url
* Note: This only works for L1 networks
*/
export async function stakerConfigGet({ network }: { network: Network }): Promise<StakerConfigGet> {
if (!isL1Network(network)) {
throw new Error(`stakerConfigGet is only supported for L1 networks. Got: ${network}`);
}

return await Promise.all([
await execution.getAllExecutions(network),
await consensus.getAllConsensus(network),
Expand Down
19 changes: 19 additions & 0 deletions packages/db/src/stakerConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -179,3 +179,22 @@ export const mevBoostLukso = interceptGlobalEnvOnSet(
dbMain.staticKey<boolean>(MEVBOOST_LUKSO, false),
Object.keys({ MEVBOOST_LUKSO })[0]
);

// Starknet (L2)

const STARKNET_NODE = "starknet-node";
const STARKNET_SIGNER = "starknet-signer";

// Null means not set
// Undefined means its set but the user has not selected any value
export const starknetNode = interceptGlobalEnvOnSet(
dbMain.staticKey<string | undefined | null>(STARKNET_NODE, null),
Object.keys({ STARKNET_NODE })[0]
);

// Null means not set
// Undefined means its set but the user has not selected any value
export const starknetSigner = interceptGlobalEnvOnSet(
dbMain.staticKey<string | undefined | null>(STARKNET_SIGNER, null),
Object.keys({ STARKNET_SIGNER })[0]
);
13 changes: 11 additions & 2 deletions packages/params/src/params.ts
Original file line number Diff line number Diff line change
Expand Up @@ -122,14 +122,23 @@ export const params = {
DOCKER_NETWORK_NEW_SUBNET: "10.20.0.0/24",
DOCKER_PRIVATE_NETWORK_NEW_NAME: "dnprivate_network",
DOCKER_EXTERNAL_NETWORK_NAME: "dnpublic_network",
DOCKER_STAKER_NETWORKS: {
// Blockchain-specific Docker networks (formerly DOCKER_STAKER_NETWORKS)
// Used by both L1 stakers and L2 nodes
DOCKER_BLOCKCHAIN_NETWORKS: {
// L1 Networks
[Network.Mainnet]: "mainnet_network",
[Network.Holesky]: "holesky_network",
[Network.Hoodi]: "hoodi_network",
[Network.Sepolia]: "sepolia_network",
[Network.Prater]: "prater_network",
[Network.Gnosis]: "gnosis_network",
[Network.Lukso]: "lukso_network"
[Network.Lukso]: "lukso_network",
// L2 Networks
[Network.Starknet]: "starknet_network"
},
/** @deprecated Use DOCKER_BLOCKCHAIN_NETWORKS instead */
get DOCKER_STAKER_NETWORKS() {
return this.DOCKER_BLOCKCHAIN_NETWORKS;
},
DOCKER_LEGACY_DNS: "172.33.1.2",
BIND_IP: "172.33.1.2",
Expand Down
Loading
Loading