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/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", 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..68bac8d 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/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/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/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..8689efc 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/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