From 00c21c0c50991920b5e7a7683e95bb3a26c9dc98 Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Fri, 6 Mar 2026 17:52:22 +0400 Subject: [PATCH 1/3] stabilise IOrderBookV6 Move IOrderBookV6 from unstable/ to src/interface/ as the current stable interface. Deprecate IOrderBookV5 to deprecated/v5/. Update import paths and document the interface lifecycle convention in CLAUDE.md. Co-Authored-By: Claude Opus 4.6 --- CLAUDE.md | 13 ++++++++----- src/interface/{unstable => }/IOrderBookV6.sol | 6 +++--- .../{unstable => }/IOrderBookV6ArbOrderTaker.sol | 0 .../{unstable => }/IOrderBookV6OrderTaker.sol | 0 src/interface/{ => deprecated/v5}/IOrderBookV5.sol | 6 +++--- .../v5}/IOrderBookV5ArbOrderTaker.sol | 0 .../{ => deprecated/v5}/IOrderBookV5OrderTaker.sol | 0 7 files changed, 14 insertions(+), 11 deletions(-) rename src/interface/{unstable => }/IOrderBookV6.sol (99%) rename src/interface/{unstable => }/IOrderBookV6ArbOrderTaker.sol (100%) rename src/interface/{unstable => }/IOrderBookV6OrderTaker.sol (100%) rename src/interface/{ => deprecated/v5}/IOrderBookV5.sol (99%) rename src/interface/{ => deprecated/v5}/IOrderBookV5ArbOrderTaker.sol (100%) rename src/interface/{ => deprecated/v5}/IOrderBookV5OrderTaker.sol (100%) diff --git a/CLAUDE.md b/CLAUDE.md index 7d33d38..a0cc247 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -30,11 +30,14 @@ Compiler: Solidity 0.8.25, EVM target: cancun, optimizer enabled (1M runs). Fuzz ### Interfaces (`src/interface/`) -- **IOrderBookV5** — Current stable interface. Vault-based order book with deposit/withdraw, add/remove orders, take orders (market buy), and clear (match two orders with bounty). IERC3156 flash loan compliant. -- **IOrderBookV6** (`unstable/`) — Next version. Adds vaultless orders (vault ID `0` means tokens move directly from wallet) and output-based take order limits. -- **IOrderBookV5OrderTaker / IOrderBookV5ArbOrderTaker** — Callback interfaces for takers receiving tokens during `takeOrders`. +- **IOrderBookV6** — Current stable interface. Vault-based order book with deposit/withdraw, add/remove orders, take orders (market buy), and clear (match two orders with bounty). IERC3156 flash loan compliant. Supports vaultless orders (vault ID `0` means tokens move directly from wallet) and input/output-based take order limits via `IOIsInput` flag. +- **IOrderBookV6OrderTaker / IOrderBookV6ArbOrderTaker** — Callback interfaces for takers receiving tokens during `takeOrders`. - **ierc3156/** — Flash loan interfaces (IERC3156FlashLender, IERC3156FlashBorrower). -- **deprecated/** (v1-v4) — Old interface versions. Do not modify unless undeprecating. +- **deprecated/** (v1-v5) — Old interface versions. Do not modify unless undeprecating. + +### Interface Lifecycle + +Stable interfaces live directly in `src/interface/`. New unstable interfaces go in `src/interface/unstable/` until stabilised. When stabilising, move from `unstable/` to `src/interface/` and move the previous stable version to `deprecated/v/`. ### Key Types @@ -58,7 +61,7 @@ rain.math.float/=lib/rain.interpreter.interface/lib/rain.math.float/src/ - All reverts use custom errors — no `revert("string")` or `require()` with string messages. - Interfaces use `pragma solidity ^0.8.18` (note: differs from interpreter interface which uses `^0.8.25`). -- Versioned naming: interfaces (`IOrderBookV5`), structs (`OrderV4`, `ClearConfigV2`), events (`AddOrderV3`), functions (`deposit3`, `withdraw3`). +- Versioned naming: interfaces (`IOrderBookV6`), structs (`OrderV4`, `ClearConfigV2`), events (`AddOrderV3`), functions (`deposit4`, `withdraw4`). - Use `//forge-lint: disable-next-line(...)` comments for lint suppressions: `unused-import`, `mixed-case-variable`, `pascal-case-struct`. - Use `//forge-lint: disable-start(...)`/`disable-end(...)` for multi-line suppressions. - Branch naming: `YYYY-MM-DD-description`. diff --git a/src/interface/unstable/IOrderBookV6.sol b/src/interface/IOrderBookV6.sol similarity index 99% rename from src/interface/unstable/IOrderBookV6.sol rename to src/interface/IOrderBookV6.sol index b2f8662..fb9da29 100644 --- a/src/interface/unstable/IOrderBookV6.sol +++ b/src/interface/IOrderBookV6.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 thedavidmeister pragma solidity ^0.8.18; -import {IERC3156FlashLender} from "../ierc3156/IERC3156FlashLender.sol"; +import {IERC3156FlashLender} from "./ierc3156/IERC3156FlashLender.sol"; import { IInterpreterCallerV4, SignedContextV1, @@ -12,7 +12,7 @@ import { IInterpreterV4, //forge-lint: disable-next-line(unused-import) IInterpreterStoreV3 -} from "../../../lib/rain.interpreter.interface/src/interface/unstable/IInterpreterCallerV4.sol"; +} from "../../lib/rain.interpreter.interface/src/interface/unstable/IInterpreterCallerV4.sol"; /// Import unmodified structures from older versions of `IOrderBook`. import { @@ -25,7 +25,7 @@ import { OrderV4, TakeOrderConfigV4, QuoteV2 -} from "../IOrderBookV5.sol"; +} from "./deprecated/v5/IOrderBookV5.sol"; import {Float} from "rain.math.float/lib/LibDecimalFloat.sol"; diff --git a/src/interface/unstable/IOrderBookV6ArbOrderTaker.sol b/src/interface/IOrderBookV6ArbOrderTaker.sol similarity index 100% rename from src/interface/unstable/IOrderBookV6ArbOrderTaker.sol rename to src/interface/IOrderBookV6ArbOrderTaker.sol diff --git a/src/interface/unstable/IOrderBookV6OrderTaker.sol b/src/interface/IOrderBookV6OrderTaker.sol similarity index 100% rename from src/interface/unstable/IOrderBookV6OrderTaker.sol rename to src/interface/IOrderBookV6OrderTaker.sol diff --git a/src/interface/IOrderBookV5.sol b/src/interface/deprecated/v5/IOrderBookV5.sol similarity index 99% rename from src/interface/IOrderBookV5.sol rename to src/interface/deprecated/v5/IOrderBookV5.sol index 9fa6d60..7a14291 100644 --- a/src/interface/IOrderBookV5.sol +++ b/src/interface/deprecated/v5/IOrderBookV5.sol @@ -2,7 +2,7 @@ // SPDX-FileCopyrightText: Copyright (c) 2020 thedavidmeister pragma solidity ^0.8.18; -import {IERC3156FlashLender} from "./ierc3156/IERC3156FlashLender.sol"; +import {IERC3156FlashLender} from "../../ierc3156/IERC3156FlashLender.sol"; import { EvaluableV4, IInterpreterCallerV4, @@ -11,11 +11,11 @@ import { IInterpreterV4, //forge-lint: disable-next-line(unused-import) IInterpreterStoreV3 -} from "../../lib/rain.interpreter.interface/src/interface/unstable/IInterpreterCallerV4.sol"; +} from "../../../../lib/rain.interpreter.interface/src/interface/unstable/IInterpreterCallerV4.sol"; /// Import unmodified structures from older versions of `IOrderBook`. //forge-lint: disable-start(unused-import) -import {NoOrders, ZeroMaximumInput} from "./deprecated/v4/IOrderBookV4.sol"; +import {NoOrders, ZeroMaximumInput} from "../v4/IOrderBookV4.sol"; //forge-lint: disable-end(unused-import) import {Float} from "rain.math.float/lib/LibDecimalFloat.sol"; diff --git a/src/interface/IOrderBookV5ArbOrderTaker.sol b/src/interface/deprecated/v5/IOrderBookV5ArbOrderTaker.sol similarity index 100% rename from src/interface/IOrderBookV5ArbOrderTaker.sol rename to src/interface/deprecated/v5/IOrderBookV5ArbOrderTaker.sol diff --git a/src/interface/IOrderBookV5OrderTaker.sol b/src/interface/deprecated/v5/IOrderBookV5OrderTaker.sol similarity index 100% rename from src/interface/IOrderBookV5OrderTaker.sol rename to src/interface/deprecated/v5/IOrderBookV5OrderTaker.sol From 5214b26815bfbfc906d57af15543529c0a645e9e Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Fri, 6 Mar 2026 17:59:29 +0400 Subject: [PATCH 2/3] add CLAUDE.md and audit to REUSE.toml annotations Co-Authored-By: Claude Opus 4.6 --- REUSE.toml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/REUSE.toml b/REUSE.toml index ed16e52..59cd08c 100644 --- a/REUSE.toml +++ b/REUSE.toml @@ -6,7 +6,9 @@ path = [ ".github/workflows/**/", ".gitignore", ".gitmodules", + "CLAUDE.md", "README.md", + "audit/**/", "flake.lock", "flake.nix", "foundry.toml", From 0478f839b2c2555619aef902ef565ed2c1feab23 Mon Sep 17 00:00:00 2001 From: thedavidmeister Date: Fri, 6 Mar 2026 18:10:43 +0400 Subject: [PATCH 3/3] fix import paths for submodule reorganisation The rain.interpreter.interface submodule reorganised deprecated interfaces into versioned subdirectories (deprecated/v1/, deprecated/v2/) and stabilised IInterpreterCallerV4. Update all import paths in V1-V6 to match. Co-Authored-By: Claude Opus 4.6 --- src/interface/IOrderBookV6.sol | 2 +- src/interface/deprecated/v1/IOrderBookV1.sol | 4 ++-- src/interface/deprecated/v2/IOrderBookV2.sol | 6 +++--- src/interface/deprecated/v3/IOrderBookV3.sol | 6 +++--- src/interface/deprecated/v4/IOrderBookV4.sol | 2 +- src/interface/deprecated/v5/IOrderBookV5.sol | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/interface/IOrderBookV6.sol b/src/interface/IOrderBookV6.sol index fb9da29..68bac8d 100644 --- a/src/interface/IOrderBookV6.sol +++ b/src/interface/IOrderBookV6.sol @@ -12,7 +12,7 @@ import { IInterpreterV4, //forge-lint: disable-next-line(unused-import) IInterpreterStoreV3 -} from "../../lib/rain.interpreter.interface/src/interface/unstable/IInterpreterCallerV4.sol"; +} from "../../lib/rain.interpreter.interface/src/interface/IInterpreterCallerV4.sol"; /// Import unmodified structures from older versions of `IOrderBook`. import { diff --git a/src/interface/deprecated/v1/IOrderBookV1.sol b/src/interface/deprecated/v1/IOrderBookV1.sol index cf88c22..d86efb1 100644 --- a/src/interface/deprecated/v1/IOrderBookV1.sol +++ b/src/interface/deprecated/v1/IOrderBookV1.sol @@ -10,8 +10,8 @@ import { Evaluable, SignedContext, IInterpreterCallerV1 -} from "rain.interpreter.interface/interface/deprecated/IInterpreterCallerV1.sol"; -import {IExpressionDeployerV3} from "rain.interpreter.interface/interface/deprecated/IExpressionDeployerV3.sol"; +} from "rain.interpreter.interface/interface/deprecated/v1/IInterpreterCallerV1.sol"; +import {IExpressionDeployerV3} from "rain.interpreter.interface/interface/deprecated/v1/IExpressionDeployerV3.sol"; /// Configuration for a deposit. All deposits are processed by and for /// `msg.sender` so the vaults are unambiguous here. diff --git a/src/interface/deprecated/v2/IOrderBookV2.sol b/src/interface/deprecated/v2/IOrderBookV2.sol index 520e455..cdd246a 100644 --- a/src/interface/deprecated/v2/IOrderBookV2.sol +++ b/src/interface/deprecated/v2/IOrderBookV2.sol @@ -3,12 +3,12 @@ pragma solidity ^0.8.18; import {IERC3156FlashLender} from "../../ierc3156/IERC3156FlashLender.sol"; -import {EvaluableConfig, Evaluable} from "rain.interpreter.interface/interface/deprecated/IInterpreterCallerV1.sol"; +import {EvaluableConfig, Evaluable} from "rain.interpreter.interface/interface/deprecated/v1/IInterpreterCallerV1.sol"; import { SignedContextV1, IInterpreterCallerV2 -} from "rain.interpreter.interface/interface/deprecated/IInterpreterCallerV2.sol"; -import {IExpressionDeployerV2} from "rain.interpreter.interface/interface/deprecated/IExpressionDeployerV2.sol"; +} from "rain.interpreter.interface/interface/deprecated/v1/IInterpreterCallerV2.sol"; +import {IExpressionDeployerV2} from "rain.interpreter.interface/interface/deprecated/v1/IExpressionDeployerV2.sol"; /// Configuration for a deposit. All deposits are processed by and for /// `msg.sender` so the vaults are unambiguous here. diff --git a/src/interface/deprecated/v3/IOrderBookV3.sol b/src/interface/deprecated/v3/IOrderBookV3.sol index 958e761..30c7ec1 100644 --- a/src/interface/deprecated/v3/IOrderBookV3.sol +++ b/src/interface/deprecated/v3/IOrderBookV3.sol @@ -3,13 +3,13 @@ pragma solidity ^0.8.18; import {IERC3156FlashLender} from "../../ierc3156/IERC3156FlashLender.sol"; -import {EvaluableV2} from "rain.interpreter.interface/lib/caller/LibEvaluable.sol"; import { + EvaluableV2, EvaluableConfigV3, IInterpreterCallerV2, SignedContextV1 -} from "rain.interpreter.interface/interface/deprecated/IInterpreterCallerV2.sol"; -import {IExpressionDeployerV3} from "rain.interpreter.interface/interface/deprecated/IExpressionDeployerV3.sol"; +} from "rain.interpreter.interface/interface/deprecated/v1/IInterpreterCallerV2.sol"; +import {IExpressionDeployerV3} from "rain.interpreter.interface/interface/deprecated/v1/IExpressionDeployerV3.sol"; /// Import unmodified structures from older versions of `IOrderBook`. import {IO, ClearConfig, ClearStateChange} from "../v2/IOrderBookV2.sol"; diff --git a/src/interface/deprecated/v4/IOrderBookV4.sol b/src/interface/deprecated/v4/IOrderBookV4.sol index 7cdcbf7..8d3b49d 100644 --- a/src/interface/deprecated/v4/IOrderBookV4.sol +++ b/src/interface/deprecated/v4/IOrderBookV4.sol @@ -11,7 +11,7 @@ import { IInterpreterV3, //forge-lint: disable-next-line(unused-import) IInterpreterStoreV2 -} from "../../../../lib/rain.interpreter.interface/src/interface/IInterpreterCallerV3.sol"; +} from "../../../../lib/rain.interpreter.interface/src/interface/deprecated/v2/IInterpreterCallerV3.sol"; /// Import unmodified structures from older versions of `IOrderBook`. import {ClearStateChange, ClearConfig, IO} from "../v3/IOrderBookV3.sol"; diff --git a/src/interface/deprecated/v5/IOrderBookV5.sol b/src/interface/deprecated/v5/IOrderBookV5.sol index 7a14291..8689efc 100644 --- a/src/interface/deprecated/v5/IOrderBookV5.sol +++ b/src/interface/deprecated/v5/IOrderBookV5.sol @@ -11,7 +11,7 @@ import { IInterpreterV4, //forge-lint: disable-next-line(unused-import) IInterpreterStoreV3 -} from "../../../../lib/rain.interpreter.interface/src/interface/unstable/IInterpreterCallerV4.sol"; +} from "../../../../lib/rain.interpreter.interface/src/interface/IInterpreterCallerV4.sol"; /// Import unmodified structures from older versions of `IOrderBook`. //forge-lint: disable-start(unused-import)