Skip to content

chore: remote-signer feature in arc-node-execution gates build-deps with no build.rs to consume them #253

Description

@teyrebaz33

Summary

crates/node/Cargo.toml (the arc-node-execution binary — the Execution Layer) declares a remote-signer feature gating protox and tonic-build as optional build-dependencies:

remote-signer = ["dep:protox", "dep:tonic-build"]
integration = ["remote-signer"]

[build-dependencies]
protox = { workspace = true, optional = true }
tonic-build = { workspace = true, optional = true }

crates/node has no build.rs, so nothing in this crate ever invokes either dependency:

$ find crates/node -iname build.rs
(no output)
$ grep -rn 'remote-signer' crates/node/src/
(no output)

Both dependencies still get pulled and compiled — they're resolved in Cargo.lock under arc-node-execution — for no observable effect.

Why this looks like leftover wiring, not intentional

arc-node-execution doesn't depend on arc-remote-signer at all, directly or transitively (confirmed against Cargo.lock). That tracks: remote signing is a validator/consensus-layer concern, and arc-node-execution is the execution layer — it has no reason to talk to a remote signer in the first place.

The crate that does need this is wired correctly and shows the intended pattern: crates/malachite-app depends on arc-signer, whose remote feature optionally pulls in arc-remote-signer — which has its own build.rs that compiles the proto definitions once. Every consumer downstream of that just links the already-built crate. No consumer needs protox/tonic-build as its own build-dependency except arc-remote-signer itself.

So crates/node's copy of this wiring isn't gating anything real — it's a feature name and two build-deps that do nothing, most likely left over from before proto compilation was consolidated into crates/remote-signer.

This is an isolated case, not a class

Checked every crate in the workspace with a [build-dependencies] section: crates/remote-signer, crates/types, and crates/version each have their own build.rs and genuinely consume their build-deps. crates/node is the only one that doesn't — so this is a single leftover, not a pattern worth a broader sweep.

Also worth noting for anyone re-verifying: arc-node-execution isn't published (publish = false at the workspace root), so there's no external consumer who could be depending on the remote-signer feature name by spelling it out — removing it breaks nothing outside this repo either.

Impact

cargo clippy --all-targets --all-features (CI) and any local --features integration build compile protox + tonic-build for arc-node-execution on every run, with zero effect — wasted build time, and a remote-signer feature name on the EL binary that misleadingly suggests it does something signing-related.

Worth noting this is invisible to the cargo hack --each-feature job proposed in #240 — it wouldn't fail a build either way, since the deps compile fine unused. It's a correctness-of-intent gap, not a build failure.

Suggested fix

Remove protox, tonic-build, the remote-signer feature, and its listing inside integration = [...] from crates/node/Cargo.toml. Nothing in the crate references any of them. Happy to send the PR.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions