Context
lib/rain.interpreter.interface is pinned at dab8e3d (2024-02-28) in foundry.lock. Upstream main is 0908a84 (2026-03-24) — roughly 2 years and 288 commits ahead. This repo's live Flow.sol / LibFlow.sol / IFlowV5.sol are written against the older V2 interpreter and V2 store.
Upstream now ships V4 caller, V4 interpreter, and V3 store:
src/interface/IInterpreterCallerV4.sol
src/interface/IInterpreterExternV4.sol
src/interface/IInterpreterStoreV3.sol
src/interface/IInterpreterV4.sol
V2 / V3 of the older interfaces are now under src/interface/deprecated/ upstream.
Known interface changes that affect this repo
IInterpreterStoreV2.set(StateNamespace, uint256[]) → IInterpreterStoreV3.set(StateNamespace, bytes32[]) (kvs type widened from uint256[] to bytes32[]).
IInterpreterV2.eval2 → likely IInterpreterV4.evalN or similar (signature change to be confirmed).
EvaluableV2, EvaluableConfigV3, SignedContextV1 consumers in Flow.sol / LibFlow.sol will likely need to swap to V4-era equivalents.
84 references across src/ to V2-era interface symbols.
Out of scope (filed for tracking, not scope of this issue)
Effort
Substantial. Likely a multi-PR migration:
- Bump submodule head in
foundry.lock, run forge update lib/rain.interpreter.interface.
- Migrate
LibFlow.sol set call site to bytes32[].
- Migrate
Flow.sol eval2 call to V4 equivalent; rename / restructure types as required.
- Roll the live-V5 interface forward:
IFlowV5 → IFlowV6 (new live interface) with V4-era types; demote IFlowV5 to deprecated/v5/.
- Update tests / mocks in
test/ to V4 caller/store mocks.
- Re-run audits.
Why now
Context
lib/rain.interpreter.interfaceis pinned atdab8e3d(2024-02-28) infoundry.lock. Upstreammainis0908a84(2026-03-24) — roughly 2 years and 288 commits ahead. This repo's liveFlow.sol/LibFlow.sol/IFlowV5.solare written against the older V2 interpreter and V2 store.Upstream now ships V4 caller, V4 interpreter, and V3 store:
V2 / V3 of the older interfaces are now under
src/interface/deprecated/upstream.Known interface changes that affect this repo
IInterpreterStoreV2.set(StateNamespace, uint256[])→IInterpreterStoreV3.set(StateNamespace, bytes32[])(kvs type widened fromuint256[]tobytes32[]).IInterpreterV2.eval2→ likelyIInterpreterV4.evalNor similar (signature change to be confirmed).EvaluableV2,EvaluableConfigV3,SignedContextV1consumers inFlow.sol/LibFlow.solwill likely need to swap to V4-era equivalents.84 references across
src/to V2-era interface symbols.Out of scope (filed for tracking, not scope of this issue)
set. Verified that V3 keeps the sameStateNamespace(unqualified) contract; the asymmetry is intentional upstream and is not addressed by this migration. Track separately.Effort
Substantial. Likely a multi-PR migration:
foundry.lock, runforge update lib/rain.interpreter.interface.LibFlow.solsetcall site tobytes32[].Flow.soleval2call to V4 equivalent; rename / restructure types as required.IFlowV5→IFlowV6(new live interface) with V4-era types; demoteIFlowV5todeprecated/v5/.test/to V4 caller/store mocks.Why now