project
Crane Framework
version
1.0
created
2026-01-12
last_updated
2026-01-12
Crane Framework - Product Requirements Document
Crane is a Diamond-first (ERC2535) Solidity development framework for building modular, upgradeable smart contracts. It provides structured patterns, deterministic deployment infrastructure, and protocol integration utilities that enable DeFi developers to build complex, upgradeable systems with confidence.
DeFi protocol development faces several recurring challenges:
Fragmented Diamond tooling - Existing Diamond (ERC2535) implementations lack cohesive patterns for storage management, facet composition, and testing
Deployment determinism - Cross-chain deployments require predictable contract addresses, but existing solutions are ad-hoc
Upgrade complexity - Diamond upgrades are error-prone without structured patterns for selector management and initialization
Protocol integration boilerplate - DEX and protocol integrations require repeated scaffolding for each new project
Crane solves these by providing a cohesive framework with battle-tested patterns, CREATE3 deterministic deployment, and reusable protocol integrations.
User Type
Description
Primary Needs
DeFi Protocol Developers
Teams building vaults, DEX integrations, yield strategies
Reliable patterns, minimal boilerplate, cross-chain deployment
Provide a cohesive Diamond (ERC2535) development framework with clear patterns
Enable deterministic cross-chain deployment via CREATE3
Reduce protocol integration boilerplate with reusable DEX utilities
Support rigorous testing through structured TestBase and Behavior patterns
Serve as the foundation for IndexedEx vault infrastructure
Metric
Target
Measurement
IndexedEx Adoption
Full adoption
All IndexedEx contracts built on Crane patterns
Test Coverage
High coverage
All public APIs have unit tests, critical paths have fuzz tests
Developer Experience
Fast iteration
Clear patterns documented, minimal boilerplate required
Cross-Chain Determinism
Consistent addresses
Same deployment produces same addresses across all EVM chains
End-user applications - Crane is infrastructure, not end-user facing. UI, APIs, and user-facing features belong in consuming projects
Non-EVM chains - Crane focuses exclusively on EVM-compatible chains. Solana, Cosmos, etc. are out of scope
Vault/strategy business logic - Specific vault strategies and yield logic belong in IndexedEx, not Crane
Feature 1: Facet-Target-Repo Pattern
A three-tier architecture for Diamond facet development:
Layer
Purpose
Repo
Storage library with assembly-based slot binding. Defines Storage struct and dual _layout() functions
Target
Implementation contract with business logic. Uses Repo for storage access
Facet
Diamond facet. Extends Target and implements IFacet for metadata
Feature 2: Diamond Package System (DFPkg)
Bundles related facets into deployable packages with standardized interfaces:
IDiamondFactoryPackage interface for consistent deployment
Constructor args (PkgInit) and deployment args (PkgArgs) separation
Automatic facet cut generation and initialization
Feature 3: CREATE3 Deterministic Deployment
Cross-chain deployment infrastructure ensuring identical addresses:
Create3Factory for any contract deployment
DiamondPackageCallBackFactory for Diamond proxy deployment
Salt derivation from type names for reproducibility
Facet and package registry for deployment tracking
Feature 4: Protocol Integrations
Reusable utilities for major DeFi protocols:
Protocol
Version
Components
Uniswap
V2, V3, V4
Router wrappers, quote utilities
Camelot
V2
Router integration, fee handling
Aerodrome
V1 (Slipstream)
Concentrated liquidity support
Balancer
V3
Vault integration, batch swaps
Feature 5: Testing Framework
Structured testing patterns for Diamond development:
TestBase contracts for protocol setup and behavior validation
Behavior libraries for interface compliance checking
Handler pattern for invariant/fuzz testing
Fork testing support for mainnet protocol integrations
contracts/
├── access/ # Access control (operable/, reentrancy/, ERC8023/)
├── factories/ # Diamond and Create3 factories
├── interfaces/ # All contract interfaces
├── introspection/ # ERC165, ERC2535 (Diamond), ERC8109
├── protocols/dexes/ # Protocol integrations
├── test/ # Test utilities, stubs, comparators
├── tokens/ # Token implementations
└── utils/ # Math, collections, cryptography utilities
System
Purpose
Type
Uniswap V2/V3/V4
DEX quotes and swaps
Read/Write
Camelot V2
DEX quotes and swaps
Read/Write
Aerodrome/Slipstream
Concentrated liquidity DEX
Read/Write
Balancer V3
Pool operations, batch swaps
Read/Write
Network
Purpose
Priority
All EVM-compatible
Chain-agnostic framework
P0
Ethereum Mainnet
Primary testing and integration
P0
Arbitrum
L2 deployment target
P1
Base
L2 deployment target
P1
Optimism
L2 deployment target
P1
Reentrancy guards - Prevent reentrancy attacks in all state-modifying functions
Access control - Operator-based permissions via OperableRepo pattern
Safe math - Overflow/underflow protection (Solidity 0.8+)
Slippage protection - Quote validation for all swap operations
Audit-ready patterns - Well-documented, testable patterns that simplify security audits
Solidity 0.8.30 - Minimum compiler version
No viaIR - IR compilation is forbidden; use struct refactoring for stack-too-deep
EVM Prague - Target EVM version
Optimizer runs: 1 - Optimized for contract size limits
crane/
├── contracts/ # All Solidity source code
│ ├── access/ # Access control patterns
│ ├── factories/ # Deployment factories
│ ├── protocols/dexes/ # Protocol integrations
│ └── ...
├── test/foundry/spec/ # Test specifications
├── docs/ # Architecture documentation
└── tasks/ # Task management
Layer
Location
Purpose
Core
contracts/access/, contracts/introspection/
Fundamental Diamond patterns
Factories
contracts/factories/
Deployment infrastructure
Protocols
contracts/protocols/dexes/
Protocol integrations
Utils
contracts/utils/
Math, collections, crypto utilities
Test
contracts/test/, test/foundry/
Testing infrastructure
Dependency
Purpose
Foundry
Build, test, and deployment tooling
Solady
Gas-optimized Solidity utilities
OpenZeppelin
Standard contract implementations
forge-std
Foundry testing utilities
Foundry unit tests - All public APIs must have unit test coverage
Invariant/fuzz testing - Critical math and state transitions must have property-based tests
Fork testing - Protocol integrations must be tested against mainnet forks
Behavior-based testing - Use TestBase + Behavior library pattern for interface compliance
NatSpec + AsciiDoc tags - All public functions must have NatSpec; include-tags for doc extraction
Custom NatSpec tags - @custom:signature, @custom:selector, @custom:interfaceid
Inline code comments - Self-documenting code with explanatory comments where logic is non-obvious
Architecture docs - High-level documentation in docs/ directory
Milestone
Description
Status
M1: Review & Stabilization
Review existing code, add tests, document patterns
In Progress
M2: IndexedEx Integration
Validate Crane patterns through IndexedEx usage
Pending
M3: Documentation Complete
Full NatSpec coverage, architecture docs
Pending
M4: Production Ready
Audit-ready, comprehensive test coverage
Pending
Current Focus: Review & Stabilization
The current development phase focuses on reviewing and stabilizing existing Crane components:
Task
Description
Status
C-1
CREATE3 Factory and Deterministic Deployment Review
Ready
C-2
Diamond Package and Proxy Architecture Review
Ready
C-3
Test Framework and IFacet Pattern Audit
Ready
C-4
DEX Utilities Review (Slipstream + Uniswap)
Ready
C-5
Token Standards Review (ERC20, Permit, EIP-712)
Ready
C-6
Constant Product & Bonding Math Review
Ready
See UNIFIED_PLAN.md for detailed task specifications.
Term
Definition
Facet
A contract containing logic that can be added to a Diamond proxy
Target
Implementation layer that contains business logic, used by Facets
Repo
Storage library using Diamond storage pattern with dual _layout() functions
DFPkg
Diamond Factory Package - bundles facets into deployable units
CREATE3
Deployment method providing deterministic addresses independent of deployer nonce