Skip to content

Shed Flare: move the Flare oracles to rain.vats.flare - #329

Merged
thedavidmeister merged 1 commit into
mainfrom
chore/shed-flare
Jul 16, 2026
Merged

Shed Flare: move the Flare oracles to rain.vats.flare#329
thedavidmeister merged 1 commit into
mainfrom
chore/shed-flare

Conversation

@thedavidmeister

Copy link
Copy Markdown
Collaborator

The other half of the split. rain.vats is chain-agnostic, but two price oracles read Flare feeds — and that was the only reason rain.vats depended on rain-flare, and transitively on rainlang. Those oracles now live in rain.vats.flare (PR #1 there, merged). This removes them here.

Removed

  • FtsoV2LTSFeedOracle, SceptreStakedFlrOracle + IFtsoV2LTSFeedOracleV1/V2.
  • Their fork tests, and OracleTest (the Flare fork base — verified only those two tests used it; PythOracleTest/TwoPriceOracleTest are is Test with mocks, they just share the substring).
  • LibERC20PriceOracleReceiptVaultFork and the testRedeemFlareFork / testWithdrawFlareFork cases from the ERC20PriceOracleReceiptVault suite. The vault stays here; those integration tests (vault priced by real Flare oracles) move to rain.vats.flare so this repo's tests carry no Flare.
  • rain-flare from foundry.toml, remappings.txt, and soldeer.lock.

Result: zero Flare / rainlang

$ grep -rn 'rain-flare|rain.flare|Ftso|Sceptre|SFLR|LibFtso|LibSceptreStakedFlare' src test foundry.toml remappings.txt soldeer.lock
(no matches)

The dependency that dragged rainlang into rain.vats's closure is gone.

Verified locally

  • forge build clean.
  • forge test371/372 pass. The one failure is testPythGetPriceNoOlderThan, which forks Arbitrum via ARBITRUM_RPC_URL (not set locally); it's a pre-existing prod fork test, imports nothing removed here, and passes in CI. All 39 vault-suite tests pass with the flare cases gone.
  • forge fmt --check clean.

Version

Bumped to 0.2.0 — removing exported contracts is breaking by semver. In practice nothing breaks: rain.vats has no org consumers, and rain.vats.flare pins rain-vats 0.1.7 (which still carries the oracles), so it's unaffected. Say the word if you'd rather a different version.

rain.vats is chain-agnostic, but two of its price oracles read Flare feeds, and
that was the only thing pulling rain-flare — and transitively rainlang — into
the repo. They now live in rain.vats.flare, which depends back on rain-vats for
the base contracts.

Removed: FtsoV2LTSFeedOracle, SceptreStakedFlrOracle and their V1/V2 interfaces;
their fork tests; the OracleTest Flare fork base (only those two tests used it);
LibERC20PriceOracleReceiptVaultFork; and the two testRedeem/WithdrawFlareFork
cases from the ERC20PriceOracleReceiptVault suite. Those vault-vs-real-Flare
integration tests move to rain.vats.flare so this repo's tests need no Flare.

rain-flare is dropped from foundry.toml, remappings.txt and soldeer.lock. No
Flare or rainlang reference remains anywhere in the repo.

Version 0.2.0: removing exported contracts is a breaking change. In practice
nothing is broken — rain.vats has no org consumers, and rain.vats.flare pins
rain-vats 0.1.7, which still carries the oracles.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@thedavidmeister thedavidmeister self-assigned this Jul 16, 2026
@coderabbitai

coderabbitai Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

@thedavidmeister, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 42 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 5e36dec8-830e-4a1f-bc18-e1ce2a2c33b4

📥 Commits

Reviewing files that changed from the base of the PR and between 8a892b8 and 8c122ea.

⛔ Files ignored due to path filters (1)
  • soldeer.lock is excluded by !**/*.lock
📒 Files selected for processing (12)
  • foundry.toml
  • remappings.txt
  • src/concrete/oracle/FtsoV2LTSFeedOracle.sol
  • src/concrete/oracle/SceptreStakedFlrOracle.sol
  • src/interface/IFtsoV2LTSFeedOracleV1.sol
  • src/interface/IFtsoV2LTSFeedOracleV2.sol
  • test/abstract/OracleTest.sol
  • test/lib/LibERC20PriceOracleReceiptVaultFork.sol
  • test/src/concrete/oracle/FtsoV2LTSFeedOracle.t.sol
  • test/src/concrete/oracle/SceptreStakedFlrOracle.t.sol
  • test/src/concrete/vault/ERC20PriceOracleReceiptVault.redeem.t.sol
  • test/src/concrete/vault/ERC20PriceOracleReceiptVault.withdraw.t.sol
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/shed-flare

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@thedavidmeister

Copy link
Copy Markdown
Collaborator Author

Reviewed 8c122ea: approve

Read the diff myself and reconciled it line-by-line against the destination repo rather than trusting the move. Every file this PR deletes is preserved exactly in rain.vats.flare: the two oracles and LibERC20PriceOracleReceiptVaultFork differ only by the import paths that MUST change (base contracts now come from the rain-vats package, not relative paths); the two interfaces, OracleTest, and both oracle test files are byte-identical. The two removed test cases — testRedeemFlareFork / testWithdrawFlareFork — I extracted the exact deleted bodies and diffed them against the ported integration test: verbatim, and both pass against a Flare fork.

This PR adds zero lines to the vault test files — pure removal — so the 13 surrounding vault tests are untouched. rain-flare is gone from foundry.toml, remappings.txt and soldeer.lock, and a full grep for rain-flare / Ftso / Sceptre / SFLR / rainlang across src, test and config returns nothing. The dependency that pulled rainlang into rain.vats's closure is removed.

Verified: forge build clean, forge test 371/372 (the one failure is the pre-existing Arbitrum prod fork test needing ARBITRUM_RPC_URL — it imports nothing removed here and passes in CI, where all four checks are green), forge fmt clean, no unresolved threads.

Version 0.2.0 — removing exported contracts is breaking by semver; in practice nothing breaks (rain.vats has no org consumers; rain.vats.flare pins rain-vats 0.1.7, which still carries the oracles).

OracleTest is used only by the two moving oracle tests — PythOracleTest/TwoPriceOracleTest merely share the substring and are 'is Test' with mocks.

@thedavidmeister
thedavidmeister merged commit e866fe8 into main Jul 16, 2026
4 checks passed
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.

2 participants