diff --git a/cl/blockbuilder/blockbuilder.go b/cl/blockbuilder/blockbuilder.go index b2110e6fc..50d8254bc 100644 --- a/cl/blockbuilder/blockbuilder.go +++ b/cl/blockbuilder/blockbuilder.go @@ -120,18 +120,7 @@ func (bb *BlockBuilder) GetPayload(ctx context.Context) error { if bb.executionHead == nil { bb.logger.Info("executionHead is nil, it'll be set by RPC. CL is likely being restarted") - err = util.RetryWithBackoff(ctx, maxAttempts, bb.logger, func() error { - innerErr := bb.SetExecutionHeadFromRPC(ctx) - if innerErr != nil { - bb.logger.Warn( - "Failed to set execution head from rpc, retrying...", - "error", innerErr, - ) - return innerErr // Will retry - } - return nil // Success - }) - if err != nil { + if err := bb.SetExecutionHeadFromRPC(ctx); err != nil { return fmt.Errorf("failed to set execution head from rpc: %w", err) } } @@ -494,16 +483,19 @@ func (bb *BlockBuilder) updateForkChoice(ctx context.Context, fcs engine.Forkcho } func (bb *BlockBuilder) SetExecutionHeadFromRPC(ctx context.Context) error { - header, err := bb.engineCl.HeaderByNumber(ctx, nil) // nil for the latest block - if err != nil { - return fmt.Errorf("failed to get the latest block header: %w", err) - } - bb.executionHead = &types.ExecutionHead{ - BlockHeight: header.Number.Uint64(), - BlockHash: header.Hash().Bytes(), - BlockTime: header.Time, - } - return nil + return util.RetryWithBackoff(ctx, maxAttempts, bb.logger, func() error { + header, err := bb.engineCl.HeaderByNumber(ctx, nil) // nil for the latest block + if err != nil { + bb.logger.Warn("Failed to get the latest block header via RPC, retrying...", "error", err) + return err // Will retry + } + bb.executionHead = &types.ExecutionHead{ + BlockHeight: header.Number.Uint64(), + BlockHash: header.Hash().Bytes(), + BlockTime: header.Time, + } + return nil // Success + }) } func (bb *BlockBuilder) GetExecutionHead() *types.ExecutionHead { diff --git a/infrastructure/docker/Dockerfile.builder b/infrastructure/docker/Dockerfile.builder index d6bcf61c7..02c0928ba 100644 --- a/infrastructure/docker/Dockerfile.builder +++ b/infrastructure/docker/Dockerfile.builder @@ -38,7 +38,8 @@ ARG TARGETS="./oracle/cmd \ ./tools/relay-emulator \ ./tools/validators-monitor \ ./tools/points-service \ - ./p2p/integrationtest/provider" + ./p2p/integrationtest/provider \ + ./cl/cmd/singlenode" RUN --mount=type=cache,target=/root/.cache/go-build \ --mount=type=cache,target=/go/pkg/mod \ @@ -51,6 +52,10 @@ RUN --mount=type=cache,target=/root/.cache/go-build \ else \ name=$bn; \ fi; \ + # Special case for singlenode + if [ "$path" = "./cl/cmd/singlenode" ]; then \ + name="snode"; \ + fi; \ echo "→ building $path as /go/bin/$name"; \ CGO_ENABLED=0 go build -o "/go/bin/$name" "$path"; \ done diff --git a/infrastructure/docker/Dockerfile.snode b/infrastructure/docker/Dockerfile.snode new file mode 100644 index 000000000..862232387 --- /dev/null +++ b/infrastructure/docker/Dockerfile.snode @@ -0,0 +1,8 @@ +# syntax=docker/dockerfile:1.4 +FROM alpine:3.10 + +COPY --from=builder_ctx /go/bin/snode /usr/local/bin/snode + +EXPOSE 8080 9090 + +ENTRYPOINT ["snode"] diff --git a/infrastructure/docker/docker-bake.hcl b/infrastructure/docker/docker-bake.hcl index 01bb1c1d7..7a15467c5 100644 --- a/infrastructure/docker/docker-bake.hcl +++ b/infrastructure/docker/docker-bake.hcl @@ -129,6 +129,17 @@ target "relay-emulator" { labels = get_labels("relay-emulator") } +target "snode" { + inherits = ["_common"] + context = "./" + dockerfile = "Dockerfile.snode" + contexts = { + builder_ctx = "target:mev-commit-builder" + } + tags = [REPO_NAME != "" ? "${REGISTRY}/${REPO_NAME}:${TAG}-snode" : "${REGISTRY}/snode:${TAG}"] + labels = get_labels("snode") +} + group "all" { targets = [ "mev-commit-builder", @@ -139,7 +150,8 @@ group "all" { "preconf-rpc", "bidder-emulator", "provider-emulator", - "relay-emulator" + "relay-emulator", + "snode" ] }