Skip to content

feat: support multiple signers per oracle instance - #46

Open
Maikol wants to merge 2 commits into
mainfrom
feat/multiple-signers
Open

Maikol wants to merge 2 commits into
mainfrom
feat/multiple-signers

Conversation

@Maikol

@Maikol Maikol commented Oct 5, 2026 •

Copy link
Copy Markdown
Member

Summary

Allows a single oracle instance to vote on the SubgraphAvailabilityManager with multiple signers, each registered at its own oracle index.

  • ORACLE_SIGNING_KEY / --signing-key and ORACLE_INDEX / --oracle-index accept comma separated lists, paired by position. Existing single key / single index configs work unchanged.
  • Each signer posts its own config to DataEdge (the monitoring subgraph only accepts a config from the address registered for its index). A posting failure aborts startup.
  • New MultiStateManager submits the same votes through every signer. A failing signer doesn't stop the others; the run returns an error after all have run so the next run retries.
  • RewardsManager mode rejects more than one signing key.
  • Startup fails on mismatched key/index counts; invalid key errors report the position, never the key.
  • Bumps the version to 1.6.0. Since the version is part of the posted config, every signer posts a new config to DataEdge on its first 1.6.0 startup.
ORACLE_SIGNING_KEY=<key-a>,<key-b>
ORACLE_INDEX=<index-a>,<index-b>

Testing

  • Unit tests for signer parsing (single signer, pairing, mismatched counts, no key leak in errors), RewardsManager rejecting multiple keys, and MultiStateManager (all signers called, partial failure).
  • Arbitrum Sepolia with indexes 0,3:
    • Unfunded index 3: index 0 config unchanged, index 3 DataEdge post failed with insufficient funds and startup aborted.
    • Funded: index 3 posted its first config (tx 0x69eb1769dc8f71bf0a0f0b5b829d0ef06a70f721625af1c881ca667c4cf4d00e), both indexes voted on two deployments with unavailable files, and together with index 2 reached the execution threshold, flipping isDenied on the RewardsManager. Ran 55 passes with no errors.

🤖 Generated with Claude Code

Maikol added 2 commits October 6, 2026 10:12
ORACLE_SIGNING_KEY and ORACLE_INDEX now accept comma separated lists,
paired by position, so a single instance can vote on the
SubgraphAvailabilityManager with several registered oracle addresses.
A single key and index behave as before.

- Static config errors (unparsable keys or indexes, count mismatch,
  duplicates, invalid contract mode) fail at startup before any
  transaction
- Each signer posts its own config to DataEdge; a failing signer is
  logged and doesn't stop the others
- Signers vote concurrently; a run fails only if every signer fails
- A voteMany revert during gas estimation is reported as an error
  instead of being counted as success
- Signers share one RPC provider and their logs carry oracle_index
- New signer_votes_total and signer_vote_failures_total metrics labeled
  by oracle_index; denied_subgraphs_total still counts each change once
- RewardsManager mode rejects more than one signing key
@Maikol
Maikol force-pushed the feat/multiple-signers branch from 3d74ec4 to 15cb7a6 Compare October 6, 2026 13:12

This branch has not been deployed

No deployments
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.

1 participant