Skip to content

Family Agnostic Standalone Executor#1038

Open
winder wants to merge 17 commits intomainfrom
will/accessor-exec-iface-2
Open

Family Agnostic Standalone Executor#1038
winder wants to merge 17 commits intomainfrom
will/accessor-exec-iface-2

Conversation

@winder
Copy link
Copy Markdown
Collaborator

@winder winder commented Apr 21, 2026

This PR supports a family agnostic executor by:

  1. Adding executor services to the Accessor.
  2. Updating GenericConfig with configs needed by the new services.
  3. Updating the EVM AccessorFactory to build the new services.
  4. Using the registry in cmd/executor/standalone/main.go instead of manually creating EVM objects.

@winder winder force-pushed the will/accessor-exec-iface-2 branch 3 times, most recently from dec42d8 to 4d76eff Compare April 22, 2026 20:07
@winder winder force-pushed the will/accessor-exec-iface-2 branch from 4d76eff to 56b427f Compare April 22, 2026 20:49
@winder winder marked this pull request as ready for review April 22, 2026 20:54
@winder winder requested a review from a team as a code owner April 22, 2026 20:54
Copilot AI review requested due to automatic review settings April 22, 2026 20:54
@winder winder requested a review from a team as a code owner April 22, 2026 20:54
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR extends pkg/chainaccess configuration overlays and accessor interfaces so the chainaccess.Registry can construct executor-oriented components (destination readers + contract transmitters) from the same TOML shape used by the executor service.

Changes:

  • Add ExecutorConfig + DestinationChainConfig overlay types to chainaccess.GenericConfig to read [chain_configuration.<selector>] and max_retry_duration.
  • Expand chainaccess.Accessor to optionally expose DestinationReader and ContractTransmitter (in addition to SourceReader).
  • Update the EVM accessor factory and the standalone executor to source destination readers / transmitters from the Registry instead of constructing them directly.

Reviewed changes

Copilot reviewed 11 out of 12 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
pkg/chainaccess/registry.go Adds executor config overlay types (ExecutorConfig, DestinationChainConfig) into GenericConfig.
pkg/chainaccess/interfaces.go Extends Accessor with optional DestinationReader + ContractTransmitter accessors and clarifies nil semantics.
pkg/chainaccess/registry_test.go Updates test accessor stub to satisfy the expanded Accessor interface.
integration/pkg/accessors/evm/factory_constructor.go Plumbs executor overlay config and env private key into EVM factory creation; collects RPC URLs.
integration/pkg/accessors/evm/factory.go Makes SourceReader optional and adds construction of DestinationReader + ContractTransmitter.
executor/config.go Embeds chainaccess.DestinationChainConfig into executor ChainConfiguration to preserve TOML field paths.
executor/config_test.go Updates config tests for the embedded DestinationChainConfig.
evm/executor_config.go Updates adapter to populate the embedded DestinationChainConfig.
deployment/changesets/apply_executor_config.go Updates job-spec generation to populate embedded DestinationChainConfig.
cmd/executor/standalone/main.go Switches standalone executor startup to build readers/transmitters via chainaccess.Registry.
build/devenv/go.mod Adds an indirect dependency entry.
build/devenv/go.sum Adds checksums for the new indirect dependency.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +141 to +145
OfframpAddress: destCfg.OffRampAddress,
RmnRemoteAddress: destCfg.RmnAddress,
ExecutionVisabilityWindow: f.executionVisibilityWindow,
Monitoring: monitoring.NewNoopExecutorMonitoring(),
})
Copy link

Copilot AI Apr 22, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Destination reader is always constructed with monitoring.NewNoopExecutorMonitoring(), which disables real executor metrics/tracing even when the executor is configured to use Beholder monitoring. Consider plumbing the Monitoring implementation into the EVM accessor factory (e.g., store it on factory and default to noop only when nil) so destination reader metrics are emitted correctly.

Copilot uses AI. Check for mistakes.
Comment thread integration/pkg/accessors/evm/factory_constructor.go
Comment thread cmd/executor/standalone/main.go Outdated
Comment thread cmd/executor/standalone/main.go Outdated
Comment thread pkg/chainaccess/registry_test.go Outdated

const (
configPathEnvVar = "EXECUTOR_CONFIG_PATH"
privateKeyEnvVar = "EXECUTOR_TRANSMITTER_PRIVATE_KEY"
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There should be a better way to inject this into the executor.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the bootstrap approach this would be provided by the keystore

Comment on lines +335 to +338
registry, err := chainaccess.NewRegistry(lggr, string(content))
if err != nil {
return nil, nil, err
}
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The main change. Create the registry, then use it in place of the other constructor calls that used to be in this file.

@winder winder changed the title chainaccess: introduce ExecutorConfig and DestinationChainConfig overlay types Family Agnostic Standalone Executor Apr 22, 2026
ChainConfig Infos[any] `toml:"blockchain_infos"`

CommitteeConfig
ExecutorConfig
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

New overlay config. This defines the offramp/rmn addresses and other config used by the new services.

@github-actions
Copy link
Copy Markdown

Code coverage report:

Package main will/accessor-exec-iface-2 diff
github.com/smartcontractkit/chainlink-ccv/aggregator 48.46% 48.46% +0.00%
github.com/smartcontractkit/chainlink-ccv/bootstrap 42.60% 42.60% +0.00%
github.com/smartcontractkit/chainlink-ccv/cli 65.13% 65.13% +0.00%
github.com/smartcontractkit/chainlink-ccv/cmd 0.00% 0.00% +0.00%
github.com/smartcontractkit/chainlink-ccv/common 50.74% 50.74% +0.00%
github.com/smartcontractkit/chainlink-ccv/executor 45.97% 45.97% +0.00%
github.com/smartcontractkit/chainlink-ccv/indexer 37.68% 37.72% +0.04%
github.com/smartcontractkit/chainlink-ccv/integration 46.93% 46.93% +0.00%
github.com/smartcontractkit/chainlink-ccv/pkg 76.92% 84.62% +7.70%
github.com/smartcontractkit/chainlink-ccv/pricer 0.00% 0.00% +0.00%
github.com/smartcontractkit/chainlink-ccv/protocol 65.19% 65.19% +0.00%
github.com/smartcontractkit/chainlink-ccv/verifier 32.74% 32.73% -0.01%


const (
configPathEnvVar = "EXECUTOR_CONFIG_PATH"
privateKeyEnvVar = "EXECUTOR_TRANSMITTER_PRIVATE_KEY"
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the bootstrap approach this would be provided by the keystore

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants