diff --git a/docker/compose/movement-full-node/docker-compose.bardock-follower.yml b/docker/compose/movement-full-node/docker-compose.bardock-follower.yml new file mode 100644 index 000000000..3a2ed64b2 --- /dev/null +++ b/docker/compose/movement-full-node/docker-compose.bardock-follower.yml @@ -0,0 +1,87 @@ +services: + setup: + image: ghcr.io/movementlabsxyz/movement-full-node-setup:${CONTAINER_REV} + container_name: setup + environment: + DOT_MOVEMENT_PATH: /.movement + # needs to have a connection to the movement-celestia-da-light-node + MOVEMENT_DA_LIGHT_NODE_CONNECTION_PROTOCOL: https + MOVEMENT_DA_LIGHT_NODE_CONNECTION_HOSTNAME: m1-da-light-node.testnet.bardock.movementlabs.xyz + MOVEMENT_DA_LIGHT_NODE_CONNECTION_PORT: 443 + INDEXER_PROCESSOR_POSTGRES_CONNECTION_STRING: postgres://postgres:password@postgres:5432/postgres + AWS_REGION: ${AWS_REGION:?AWS_REGION is not set} + AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID} + AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY} + MOVEMENT_SYNC: follower::follower-test-$MOVEMENT_SHARED_RANDOM_1<=>{maptos,maptos-storage,movement-da-db}/** + MAYBE_RUN_LOCAL: "false" + volumes: + - ${DOT_MOVEMENT_PATH}:/.movement + # mount if exists + - ~/.aws/:/root/.aws:ro + + healthcheck: + test: [ "CMD-SHELL", "echo 'health check'" ] + retries: 10 + interval: 10s + timeout: 5s + + # turn off underlying da light nodes + celestia-light-node: + image: busybox + container_name: celestia-light-node + command: sleep infinity + environment: + - DOT_MOVEMENT_PATH=/.movement + - CELESTIA_RPC_ADDRESS=celestia-light-node:26657 + volumes: + - ${DOT_MOVEMENT_PATH}:/.movement + depends_on: + setup: + condition: service_healthy + healthcheck: + test: [ "CMD-SHELL", "echo 'health check'" ] + retries: 3 + start_period: 3s + restart: on-failure:3 + + # turn off celestia-light-node-synced + celestia-light-node-synced: + image: busybox + container_name: celestia-light-node-synced + command: echo "No sync check when following." + environment: + - DOT_MOVEMENT_PATH=/.movement + volumes: + - ${DOT_MOVEMENT_PATH}:/.movement + depends_on: + celestia-light-node: + condition: service_healthy + + # turn off movement-celestia-da-light-node + movement-celestia-da-light-node: + image: busybox + container_name: movement-celestia-da-light-node + command: sleep infinity + healthcheck: + test: [ "CMD-SHELL", "echo 'health check'" ] + retries: 3 + start_period: 3s + + # turn off movement-faucet-service + movement-faucet-service: + image: busybox + container_name: movement-faucet-service + command: sleep infinity + healthcheck: + test: [ "CMD-SHELL", "echo 'health check'" ] + retries: 3 + start_period: 3s + + movement-full-node: + environment: + ETH_RPC_CONNECTION_PROTOCOL: https + ETH_RPC_CONNECTION_HOSTNAME: ethereum-holesky-rpc.publicnode.com + ETH_RPC_CONNECTION_PORT: 443 + ETH_WS_CONNECTION_PROTOCOL: wss + ETH_WS_CONNECTION_HOSTNAME: ethereum-holesky-rpc.publicnode.com + ETH_WS_CONNECTION_PORT: 443 \ No newline at end of file diff --git a/docker/compose/movement-full-node/docker-compose.mainnet-follower.yml b/docker/compose/movement-full-node/docker-compose.mainnet-follower.yml new file mode 100644 index 000000000..e69de29bb diff --git a/networks/movement/movement-full-node/src/node/partial.rs b/networks/movement/movement-full-node/src/node/partial.rs index feb005721..c9570c7c3 100644 --- a/networks/movement/movement-full-node/src/node/partial.rs +++ b/networks/movement/movement-full-node/src/node/partial.rs @@ -16,7 +16,7 @@ use tracing::debug; pub struct MovementPartialNode { executor: T, light_node_client: MovementDaLightNodeClient, - settlement_manager: McrSettlementManager, + settlement_manager: Option, commitment_events: Option, movement_rest: MovementRest, config: Config, @@ -27,7 +27,7 @@ impl MovementPartialNode where T: DynOptFinExecutor + Send + 'static, { - pub fn settlement_manager(&self) -> &McrSettlementManager { + pub fn settlement_manager(&self) -> &Option { &self.settlement_manager } @@ -142,14 +142,17 @@ impl MovementPartialNode { let executor = Executor::try_from_config(config.execution_config.maptos_config.clone()) .context("Failed to create the inner executor")?; - debug!("Creating the settlement client"); - let settlement_client = McrSettlementClient::build_with_config(&config.mcr) - .await - .context("Failed to build MCR settlement client with config")?; - let (settlement_manager, commitment_events) = - McrSettlementManager::new(settlement_client, &config.mcr); - let commitment_events = - if config.mcr.should_settle() { Some(commitment_events) } else { None }; + let (settlement_manager, commitment_events) = if config.mcr.should_settle() { + debug!("Creating the settlement client"); + let settlement_client = McrSettlementClient::build_with_config(&config.mcr) + .await + .context("Failed to build MCR settlement client with config")?; + let (settlement_manager, commitment_events) = + McrSettlementManager::new(settlement_client, &config.mcr); + (Some(settlement_manager), Some(commitment_events)) + } else { + (None, None) + }; debug!("Creating the movement rest service"); let movement_rest = diff --git a/networks/movement/movement-full-node/src/node/tasks/execute_settle.rs b/networks/movement/movement-full-node/src/node/tasks/execute_settle.rs index 9277282af..372ea3f77 100644 --- a/networks/movement/movement-full-node/src/node/tasks/execute_settle.rs +++ b/networks/movement/movement-full-node/src/node/tasks/execute_settle.rs @@ -22,7 +22,7 @@ use tracing::{debug, error, info, info_span, Instrument}; pub struct Task { executor: E, - settlement_manager: S, + settlement_manager: Option, da_db: DaDB, da_light_node_client: MovementDaLightNodeClient, // Stream receiving commitment events, conditionally enabled @@ -35,7 +35,7 @@ pub struct Task { impl Task { pub(crate) fn new( executor: E, - settlement_manager: S, + settlement_manager: Option, da_db: DaDB, da_light_node_client: MovementDaLightNodeClient, commitment_events: Option, @@ -152,10 +152,17 @@ where && da_height % self.settlement_config.settle.settlement_super_block_size == 0 { info!("Posting block commitment via settlement manager"); - match self.settlement_manager.post_block_commitment(commitment).await { - Ok(_) => {} - Err(e) => { - error!("Failed to post block commitment: {:?}", e); + match &self.settlement_manager { + Some(settlement_manager) => { + match settlement_manager.post_block_commitment(commitment).await { + Ok(_) => {} + Err(e) => { + error!("Failed to post block commitment: {:?}", e); + } + } + } + None => { + error!("Settlement manager not initialized"); } } } else { diff --git a/process-compose/movement-full-node/process-compose.test-followers.yml b/process-compose/movement-full-node/process-compose.test-followers.yml index d45f6b1db..f42a3a1b1 100644 --- a/process-compose/movement-full-node/process-compose.test-followers.yml +++ b/process-compose/movement-full-node/process-compose.test-followers.yml @@ -65,12 +65,7 @@ processes: setup-follower-2: environment: - - "ETH_RPC_CONNECTION_PROTOCOL=http" - - "ETH_RPC_CONNECTION_HOSTNAME=0.0.0.0" - - "ETH_RPC_CONNECTION_PORT=8090" - - "ETH_WS_CONNECTION_PROTOCOL=ws" - - "ETH_WS_CONNECTION_HOSTNAME=0.0.0.0" - - "ETH_WS_CONNECTION_PORT=8090" + # use invalid eth hostnames to check that non-settling follower doesn't have build issues. - "MAYBE_RUN_LOCAL=true" - "MOVEMENT_DA_LIGHT_NODE_HTTP1=false" command: |