Skip to content

feat: hildr proposer and hildr batcher add dockerfile and docker compose #164

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 10, 2024
Merged
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
28 changes: 26 additions & 2 deletions docker/.env.default
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,26 @@ L1_WS_RPC_URL=wss://eth-mainnet.g.alchemy.com/v2/<API_KEY>
# The beacon chain RPC endpoint
L1_BEACON_RPC_URL=

# The L1 signer private key
L1_SIGNER=

# The batch inbox contract address deployed on l1
BATCH_INBOX_ADDRESS=

# JWT secret for the engine API
JWT_SECRET=bf549f5188556ce0951048ef467ec93067bc4ea21acebe46ef675cd4e8e015ff

# Hildr's external rpc service port
RPC_PORT=9545
# Execution client chain ID
L2_CHAIN_ID=

# Execution client signer private key
L2_SIGNER=

# Deployed l2 output oracle contract address
L2OO_ADDRESS=

# Deployed l2 dispute game factory contract address
L2DGF_ADDRESS=

# Execution client: can be either `op-geth` or `op-erigon`
EXECUTION_CLIENT=op-geth
Expand All @@ -28,6 +43,15 @@ EXECUTION_CLIENT_RPC_PORT=8545
# The execution client WebSocket port.
EXECUTION_CLIENT_WS_PORT=8546

# The Roll up client.
ROLLUP_CLIENT=hildr-node

# The Roll up client RPC port.
ROLLUP_RPC_PORT=11545

# Hildr's external rpc service port
ROLLUP_RPC_PORT=9545

# Sync mode: can be either `full` or `checkpoint`
SYNC_MODE=full

Expand Down
14 changes: 14 additions & 0 deletions docker/batcher.dock
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
FROM ghcr.io/graalvm/graalvm-community:21 as builder

WORKDIR /root/hildr
COPY . .
RUN ./gradlew clean hildr-batcher:buildJarForDocker

FROM ghcr.io/graalvm/graalvm-community:21

WORKDIR /usr/local/bin
COPY --from=builder /root/hildr/hildr-batcher/build/docker/hildr-batcher.jar .
ENV HILDR_BATCHER_JAR /usr/local/bin/hildr-batcher.jar
ENV HILDR_BATCHER_MAIN_CLASS io.optimism.batcher.HildrBatcher

ENTRYPOINT ["java", "--enable-preview", "-cp" , "/usr/local/bin/hildr-batcher.jar", "io.optimism.batcher.HildrBatcher"]
44 changes: 42 additions & 2 deletions docker/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ services:
- .env
ports:
- "9200:9200"
- "${RPC_PORT}:${RPC_PORT}"
- "${ROLLUP_RPC_PORT}:${ROLLUP_RPC_PORT}"
volumes:
- ./:/scripts
- data:/data
Expand All @@ -49,13 +49,53 @@ services:
- .env
ports:
- "9200:9200"
- "${RPC_PORT}:${RPC_PORT}"
- "${ROLLUP_RPC_PORT}:${ROLLUP_RPC_PORT}"
volumes:
- ./:/scripts
- data:/data
- ${OP_ROLLUP_JSON_FILEPATH:-.}:/rollup.json
<<: *logging

hildr-batcher:
container_name: hildr-batcher
build:
dockerfile: ./docker/batcher.dock
context: ../
profiles:
- hildr-batcher
restart: unless-stopped
stop_grace_period: 3m
entrypoint: /scripts/start-hildr-batcher-java.sh
depends_on:
- op-geth
env_file:
- .env
ports:
- "9201:9201"
volumes:
- ./:/scripts
<<: *logging

hildr-proposer:
container_name: hildr-proposer
build:
dockerfile: ./docker/proposer.dock
context: ../
profiles:
- hildr-proposer
restart: unless-stopped
stop_grace_period: 3m
entrypoint: /scripts/start-hildr-batcher-java.sh
depends_on:
- op-geth
env_file:
- .env
ports:
- "9203:9203"
volumes:
- ./:/scripts
<<: *logging

op-geth:
image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:v1.101304.2
container_name: op-geth
Expand Down
14 changes: 14 additions & 0 deletions docker/proposer.dock
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
FROM ghcr.io/graalvm/graalvm-community:21 as builder

WORKDIR /root/hildr
COPY . .
RUN ./gradlew clean hildr-batcher:buildJarForDocker

FROM ghcr.io/graalvm/graalvm-community:21

WORKDIR /usr/local/bin
COPY --from=builder /root/hildr/hildr-batcher/build/docker/hildr-proposer.jar .
ENV HILDR_PROPOSER_JAR /usr/local/bin/hildr-proposer.jar
ENV HILDR_PROPOSER_MAIN_CLASS io.optimism.proposer.HildrProposer

ENTRYPOINT ["java", "--enable-preview", "-cp" , "/usr/local/bin/hildr-proposer.jar", "io.optimism.proposer.HildrProposer"]
11 changes: 11 additions & 0 deletions docker/start-hildr-batcher-java.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/bin/sh
set -e

exec java --enable-preview \
-cp $HILDR_BATCHER_JAR $HILDR_BATCHER_MAIN_CLASS \
--l1-rpc-url $L1_RPC_URL \
--l1-signer $L1_SIGNER \
--batch-inbox-address $BATCH_INBOX_ADDRESS \
--l2-rpc-url http://${EXECUTION_CLIENT}:${EXECUTION_CLIENT_RPC_PORT} \
--rollup-rpc-url http://${ROLLUP_CLIENT}:${ROLLUP_RPC_PORT} \
--log-level $LOG_LEVEL
13 changes: 13 additions & 0 deletions docker/start-hildr-proposer-java.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/bin/sh
set -e

exec java --enable-preview \
-cp $HILDR_PROPOSER_JAR $HILDR_PROPOSER_MAIN_CLASS \
--l1-rpc-url $L1_RPC_URL \
--l2-rpc-url http://${EXECUTION_CLIENT}:${EXECUTION_CLIENT_RPC_PORT} \
--l2-chain-id $L2_CHAIN_ID \
--l2-signer $L2_SIGNER \
--l2oo-address $L2OO_ADDRESS \
--l2dgf-address $L2DGF_ADDRESS \
--rollup-rpc-url http://${ROLLUP_CLIENT}:${ROLLUP_RPC_PORT} \
--log-level $LOG_LEVEL
15 changes: 15 additions & 0 deletions hildr-batcher/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,21 @@ shadowJar {
archiveFileName = "${project.name}-${project.version}.jar"
}

task buildJarForDocker {
dependsOn jar
def buildImageDir = "build/docker"
def out = new ByteArrayOutputStream()
doFirst {
new File(buildImageDir).mkdirs()
copy {
from "build/libs/${project.name}-${project.version}.jar"
into buildImageDir
rename "${project.name}-${project.version}.jar", "${project.name}.jar"
}
}
println(out.toString())
}

nativeCompile {
enabled = false
}
22 changes: 16 additions & 6 deletions hildr-batcher/src/main/java/io/optimism/batcher/cli/Cli.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package io.optimism.batcher.cli;

import ch.qos.logback.classic.Level;
import io.micrometer.tracing.Tracer;
import io.optimism.batcher.BatcherSubmitter;
import io.optimism.batcher.config.Config;
import io.optimism.batcher.exception.BatcherExecutionException;
import io.optimism.batcher.telemetry.BatcherMetricsServer;
import io.optimism.batcher.telemetry.BatcherPrometheusMetrics;
import io.optimism.cli.typeconverter.LogLevelConverter;
import io.optimism.utilities.telemetry.Logging;
import io.optimism.utilities.telemetry.TracerTaskWrapper;
import org.slf4j.Logger;
Expand Down Expand Up @@ -43,7 +45,7 @@ public class Cli implements Runnable {
@Option(names = "--sub-safety-margin", required = true, description = "")
Long subSafetyMargin;

@Option(names = "--pull-interval", required = true, description = "")
@Option(names = "--poll-interval", required = true, description = "")
Long pollInterval;

@Option(names = "--max-l1-tx-size", required = true, description = "")
Expand All @@ -61,18 +63,26 @@ public class Cli implements Runnable {
@Option(names = "--enable-metrics", description = "If not contains this option, will not open metrics server")
boolean enableMetrics;

@Option(
names = "--metrics-port",
defaultValue = "9200",
required = true,
description = "The port of metrics server ")
@Option(names = "--metrics-port", defaultValue = "9200", description = "The port of metrics server ")
Integer metricsPort;

@Option(
names = "--log-level",
defaultValue = "DEBUG",
converter = LogLevelConverter.class,
description = "Log level")
Level logLevel;

/** the Cli constructor. */
public Cli() {}

@Override
public void run() {
var logger = LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
if (logger instanceof ch.qos.logback.classic.Logger) {
var logbackLogger = (ch.qos.logback.classic.Logger) logger;
logbackLogger.setLevel(logLevel);
}
TracerTaskWrapper.setTracerSupplier(Logging.INSTANCE::getTracer);

// listen close signal
Expand Down
15 changes: 13 additions & 2 deletions hildr-node/src/main/java/io/optimism/cli/Cli.java
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,13 @@ public class Cli implements Runnable {
@Option(names = "--devnet", description = "Dev net flag")
Boolean devnet;

@Option(
names = "--sequencer-enable",
defaultValue = "false",
description =
"Enable sequencing of new L2 blocks. A separate batch submitter has to be deployed to publish the data for verifiers.")
Boolean sequencerEnable;

@Option(
names = "--log-level",
defaultValue = "DEBUG",
Expand All @@ -118,8 +125,11 @@ public Cli() {}

@Override
public void run() {
var logger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
logger.setLevel(logLevel);
var logger = LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
if (logger instanceof ch.qos.logback.classic.Logger) {
var logbackLogger = (ch.qos.logback.classic.Logger) logger;
logbackLogger.setLevel(logLevel);
}
TracerTaskWrapper.setTracerSupplier(Logging.INSTANCE::getTracer);
if (Boolean.TRUE.equals(metricsEnable)) {
var metricsPort = this.metricsPort;
Expand Down Expand Up @@ -211,6 +221,7 @@ private Config.CliConfig from(Cli cli) {
cli.checkpointSyncUrl,
cli.rpcPort,
cli.syncMode,
cli.sequencerEnable,
cli.devnet);
}
}

This file was deleted.

7 changes: 6 additions & 1 deletion hildr-node/src/main/java/io/optimism/config/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
* @param checkpointSyncUrl The checkpoint sync url.
* @param rpcPort The rpc port.
* @param devnet The flag of devnet.
* @param sequencerEnable The flag of sequencerEnable.
* @param syncMode The sync mode
* @param chainConfig The chain config.
* @author grapebaba
Expand All @@ -59,6 +60,7 @@ public record Config(
String checkpointSyncUrl,
Integer rpcPort,
Boolean devnet,
Boolean sequencerEnable,
SyncMode syncMode,
ChainConfig chainConfig) {

Expand Down Expand Up @@ -144,7 +146,8 @@ private static MapConfigSource getMapConfigSource() {
* @param jwtSecret L2 engine API jwt secret.
* @param checkpointSyncUrl The checkpoint sync url.
* @param rpcPort The rpc port.
* @param syncMode The sync mode.
* @param syncMode The sync mode.
* @param sequencerEnable The sequencer enable flag.
* @param devnet The devnet flag.
*/
public record CliConfig(
Expand All @@ -158,6 +161,7 @@ public record CliConfig(
String checkpointSyncUrl,
Integer rpcPort,
SyncMode syncMode,
Boolean sequencerEnable,
Boolean devnet) {

/**
Expand Down Expand Up @@ -197,6 +201,7 @@ public Map<String, String> toConfigMap() {
if (syncMode != null) {
map.put("config.syncMode", syncMode.toString());
}
map.put("config.sequencerEnable", String.valueOf(sequencerEnable != null && sequencerEnable));
map.put("config.devnet", String.valueOf(devnet != null && devnet));
return map;
}
Expand Down
Loading