Free 30-min Web3 Consultation
Book Now
Smart Contract Security Audits
Learn More
Custom DeFi Protocol Development
Explore
Full-Stack Web3 dApp Development
View Services
Free 30-min Web3 Consultation
Book Now
Smart Contract Security Audits
Learn More
Custom DeFi Protocol Development
Explore
Full-Stack Web3 dApp Development
View Services
Free 30-min Web3 Consultation
Book Now
Smart Contract Security Audits
Learn More
Custom DeFi Protocol Development
Explore
Full-Stack Web3 dApp Development
View Services
Free 30-min Web3 Consultation
Book Now
Smart Contract Security Audits
Learn More
Custom DeFi Protocol Development
Explore
Full-Stack Web3 dApp Development
View Services
LABS
Glossary

Minimal Proxy

A Minimal Proxy is a lightweight smart contract pattern that forwards all calls to a fixed implementation contract, drastically reducing deployment costs and gas fees.
Chainscore © 2026
definition
SMART CONTRACT PATTERN

What is a Minimal Proxy?

A highly gas-efficient smart contract pattern that creates lightweight, clone-like contracts pointing to a shared implementation.

A minimal proxy (also known as an ERC-1167 proxy) is a smart contract pattern that deploys a tiny, fixed-bytecode contract whose sole function is to delegate all calls to a pre-defined implementation contract. This creates a clone that shares the logic of the master contract but maintains its own independent storage and balance. The primary advantage is extreme gas efficiency; deploying a minimal proxy costs a fraction of deploying a full contract, as it reuses the immutable logic already on-chain. This pattern is foundational for systems requiring many identical contract instances, such as decentralized exchanges for user trading pairs or NFT projects for individual user vaults.

The technical specification, formalized as EIP-1167, defines a bytecode sequence of just 45 bytes. When a call is made to the proxy, its fallback function uses the DELEGATECALL opcode to execute the code from the implementation contract within the proxy's own context. This means the logic runs as if it were part of the proxy, allowing each clone to have unique state—like token balances or owner addresses—while the expensive logic code is deployed only once. Key considerations include ensuring the implementation contract is immutable and secure, as any upgrade or bug in the logic affects all linked proxies.

Common use cases extend beyond simple cloning. The minimal proxy factory pattern involves a master contract that deploys these proxies on-demand, enabling scalable systems like liquidity pools for each asset pair or multi-signature wallets for different teams. Developers must be aware of the trade-offs: while deployment and storage are cheap, each transaction incurs a small additional gas overhead for the delegate call. Furthermore, because the proxy's logic address is immutable, upgradeability requires more advanced patterns, like the proxy beacon (ERC-1538), which allows many minimal proxies to reference an upgradeable beacon contract holding the current logic address.

how-it-works
MECHANISM

How Does a Minimal Proxy Work?

A minimal proxy is a lightweight smart contract that delegates all calls to a fixed implementation contract, providing a gas-efficient method for deploying multiple contract instances.

A minimal proxy (also known as an ERC-1167 proxy) is a tiny, standardized smart contract whose bytecode contains a hardcoded address for a master implementation contract. Its core mechanism is simple: upon deployment, it uses the DELEGATECALL opcode to forward all incoming calls—including the function selector and calldata—to this implementation. The key is that the proxy's storage context is used, meaning any state changes from the delegated logic are written to the proxy's own storage slot. This creates a clone that shares logic but maintains independent state, all while minimizing deployment costs.

The efficiency stems from its extremely compact bytecode, which is typically around 45 bytes. This is achieved through a clever construction: the proxy's runtime code is just enough to read the implementation address from its own bytecode and perform the DELEGACALL. In contrast, deploying a full new instance of a complex contract can cost millions of gas. By deploying only this minimal stub, projects can create thousands of instances (like individual user wallets in a vault system or unique NFTs in a collection) for a fraction of the cost. The trade-off is a minor runtime gas overhead for each call due to the extra DELEGATECALL step.

A critical security consideration for minimal proxies is ensuring the implementation contract is stable and secure, as an upgrade requires deploying a new proxy. The pattern is inherently non-upgradeable for the individual proxy instance; the code it points to is immutable. However, systems can be designed where new proxies point to a newer implementation. Developers must also be cautious of storage collisions; because the proxy delegates logic but uses its own storage layout, the implementation contract must use unstructured storage patterns or inherit from specific base contracts (like those in OpenZeppelin's library) to avoid clashes between the proxy and implementation storage variables.

key-features
MINIMAL PROXY

Key Features

A minimal proxy is a lightweight, gas-optimized smart contract that delegates all logic calls to a fixed implementation contract, enabling cheap, efficient contract cloning.

01

Gas-Efficient Deployment

The primary advantage is drastically reduced deployment costs. A minimal proxy is a tiny contract (e.g., ~55 bytes of runtime bytecode for the EIP-1167 standard) that only contains the logic to delegatecall to a pre-deployed master implementation. This is orders of magnitude cheaper than deploying a full duplicate contract.

02

Delegation via `delegatecall`

At its core, a minimal proxy uses the delegatecall opcode. When called, it forwards all logic and context (like msg.sender and msg.value) to the immutable implementation contract. The storage of the proxy is used, but the code execution happens from the implementation, creating the illusion that the proxy is the logic contract.

03

Fixed, Immutable Implementation

The address of the master implementation contract is hardcoded into the proxy's bytecode at creation. This makes the proxy's behavior immutable after deployment; it cannot be upgraded or point to a new logic contract. This design favors predictability and security over flexibility.

05

Use Case: Clone Factories

This pattern is ideal for systems requiring many identical contract instances, such as:

  • NFT Drops: Creating individual sale contracts for each collection.
  • DeFi Vaults: Spawning identical yield strategies for different users.
  • Multi-Token Contracts: Deploying separate ERC-20 tokens with shared logic. A factory contract deploys hundreds of proxies, all sharing one logic contract.
06

Limitations & Considerations

  • No Upgradability: The proxy is permanently locked to its initial implementation.
  • Constructor Logic: The implementation's constructor runs only once. Proxy initialization often requires a separate initialize function, requiring careful attention to prevent reinitialization attacks.
  • Transparent Proxies vs. UUPS: For upgradeable systems, more complex proxy patterns (like Transparent or UUPS) are used instead.
code-example
SMART CONTRACT PATTERN

Minimal Proxy

A highly gas-efficient smart contract pattern that creates lightweight, clone-like contracts pointing to a single, shared implementation.

A Minimal Proxy (also known as an ERC-1167 proxy) is a smart contract pattern that deploys a tiny, fixed-bytecode contract whose sole function is to delegate all calls to a predetermined implementation contract. This creates a highly gas-efficient way to deploy multiple instances of similar logic, as each proxy requires only a fraction of the gas needed to deploy a full contract. The proxy contains just enough code to read its target implementation address from storage and forward any call via delegatecall, making it a cornerstone for scalable, low-cost contract factory systems.

The core mechanism relies on EIP-1167, which standardized a minimal bytecode sequence for these proxies. When a user interacts with a minimal proxy, the call is transparently routed to the master implementation contract using delegatecall. This means the proxy executes the logic in the context of its own storage, allowing each clone to maintain independent state—such as unique token balances or owner addresses—while sharing the same executable code. This separation of logic and storage is key to the pattern's efficiency and flexibility.

Common use cases include token drop campaigns, where thousands of unique reward contracts are needed, and proxy factories for DeFi pools or NFT collections. For example, a project might deploy a single sophisticated staking contract as the implementation, then use a factory to create thousands of minimal proxies, each representing a separate user's staking vault. This drastically reduces deployment costs compared to deploying the full contract bytecode for each user, making complex systems economically viable on-chain.

While extremely efficient, developers must consider important security implications. Since all proxies share the same logic, a bug or upgrade in the implementation contract affects every clone instantly. The pattern typically uses an immutable implementation address, meaning proxies are not upgradeable by design—a feature for simplicity and trust minimization. For upgradeable systems, more complex proxy patterns like Transparent or UUPS are used, which incorporate admin functions and storage slots for a mutable implementation address.

In practice, the minimal proxy bytecode is so compact (45 bytes) that it is often deployed using the CREATE2 opcode, which allows for the deterministic prediction of a proxy's address before it is deployed. This enables advanced patterns like counterfactual deployment, where systems can interact with or reference a contract address that may not yet exist on-chain, further optimizing gas usage and enabling novel application architectures.

ecosystem-usage
MINIMAL PROXY

Ecosystem Usage

The ERC-1167 Minimal Proxy standard is a foundational infrastructure pattern enabling efficient, low-cost contract deployment across the DeFi and NFT landscape.

02

NFT Collection Deployment

Used by NFT marketplaces and launchpads (e.g., OpenSea's Seaport, Manifold) to allow creators to deploy their own ERC-721 or ERC-1155 collections from a shared, optimized implementation.

  • Creator Empowerment: Lowers the technical and financial barrier for launching a custom contract.
  • Standard Compliance: All deployed collections inherit standard interfaces for compatibility with major marketplaces.
  • Royalty Enforcement: The proxy delegates calls to an implementation that can enforce creator fees on-chain.
03

Gas-Optimized Airdrops & Distributions

Projects use minimal proxies to deploy individualized vesting contracts or claim contracts for token distributions. Each user receives a unique contract address for their allocation, enabling complex release schedules without bloating the main token contract.

  • Scalability: Can deploy tens of thousands of claim contracts for a large community airdrop.
  • Custom Logic: Each proxy can have initialization parameters for unique vesting cliffs and durations.
  • Reduced Overhead: Avoids the gas cost of deploying a full Solidity contract for each user.
04

Modular Smart Account Systems

Account Abstraction (AA) and smart wallet infrastructures (like Safe{Wallet} modules) use minimal proxies to deploy plugin modules or session keys. Each user's account can have a lightweight proxy that delegates to a shared, audited module contract for specific functionalities.

  • Security: Core module logic is immutable and shared; only the proxy is user-specific.
  • Composability: Users can attach multiple functional modules (recovery, spending limits) as needed.
  • Low-Cost Onboarding: Drastically reduces the cost of deploying a new smart contract wallet.
05

The Clone Factory Pattern

This is the underlying design pattern that minimal proxies enable. A factory contract stores the bytecode template and uses the CREATE2 opcode to deterministically deploy proxies.

  • Deterministic Addresses: Using CREATE2 allows pre-computation of a proxy's address before it's deployed, enabling counterfactual interactions.
  • Template Registry: The factory becomes a single source of truth for a protocol's contract logic.
  • Integration Point: Other contracts can interact with the factory to spawn new instances programmatically.
06

Limitations & Security Considerations

While powerful, minimal proxies have specific constraints that developers must account for.

  • Initialization: Requires a separate initializer function instead of a constructor, which must be protected from re-execution.
  • Storage Layout: The proxy and implementation share the same storage slots; upgrading an implementation requires strict storage layout preservation.
  • Fallback Function: All logic runs via the proxy's fallback() function, which can have subtle implications for gas and traceability.
  • Transparent vs. UUPS: The upgrade mechanism can follow the Transparent Proxy or UUPS (EIP-1822) pattern, each with different trade-offs for upgradeability and gas cost.
security-considerations
MINIMAL PROXY

Security Considerations

While minimal proxies are a gas-efficient standard for deploying contract clones, their simplified bytecode introduces specific security risks that developers must account for.

02

Implementation Upgrade Risks

The proxy's target address is stored in its bytecode and is immutable after deployment. This prevents upgrades but also means:

  • A bug in the implementation contract permanently affects all clones.
  • There is no built-in mechanism for a proxy admin or timelock to migrate logic.
  • Mitigation requires using more complex proxy patterns (e.g., UUPS, Transparent) or deploying a new proxy factory system.
03

Initialization Function Attacks

Since constructors don't run, state setup relies on an initialize function. Critical risks include:

  • Lack of Initializer Guard: Without a modifier to prevent re-initialization, state can be reset by anyone.
  • Front-running: A malicious actor can call the initialize function after deployment but before the legitimate owner.
  • Best Practice: Use OpenZeppelin's Initializable contract with an initializer modifier and consider deploying clones atomically within a factory.
04

Delegatecall Context & Storage

The proxy uses delegatecall, executing logic in the implementation's context but using the proxy's storage. This creates two primary risks:

  • Storage Collisions: The implementation and proxy storage layouts must be perfectly aligned. Appending state variables to the implementation can corrupt the proxy's storage map.
  • selfdestruct Vulnerability: If the implementation contract contains a selfdestruct opcode and is callable, an attacker could destroy the implementation, bricking all dependent proxy clones.
05

Factory Contract Trust

Minimal proxies are typically deployed by a factory contract. The security of the entire clone ecosystem depends on this factory:

  • A compromised factory could deploy proxies pointing to a malicious implementation.
  • The factory must securely manage initialization, often acting as the initial owner.
  • Audit the factory's deployment and access control logic as critically as the implementation itself.
06

Verification & Transparency

The extreme brevity of the proxy bytecode (45 bytes) makes verification on block explorers straightforward, but it obfuscates the linked implementation.

  • Users and integrators must always verify the implementation address and audit its code.
  • Relying solely on the proxy address without checking its delegate target is a critical oversight.
  • Tools must be designed to trace and display the active implementation for any proxy.
IMPLEMENTATION ARCHITECTURE

Comparison: Proxy Patterns

A technical comparison of common smart contract proxy patterns, focusing on deployment cost, runtime overhead, and upgradeability mechanisms.

FeatureTransparent ProxyUUPS ProxyMinimal Proxy (ERC-1167)

Deployment Gas Cost

~750k gas

~450k gas

~55k gas

Runtime Call Overhead

Moderate

Low

Low

Upgrade Logic Location

Proxy Admin contract

Implementation contract

Not upgradeable

Initialization Method

Constructor or initializer function

Initializer function

Constructor only

Storage Layout Flexibility

Requires inheritance slots

Requires inheritance slots

Inherits storage from template

Primary Use Case

General-purpose upgrades

Gas-optimized upgrades

Mass deployment of identical logic

MINIMAL PROXY

Common Misconceptions

Clarifying frequent misunderstandings about the minimal proxy pattern, a fundamental but often misinterpreted smart contract optimization technique.

No, a minimal proxy is a specific, highly optimized type of proxy designed for gas-efficient contract cloning, distinct from the more complex upgradeable proxies like Transparent or UUPS. A regular upgradeable proxy stores a logic contract address in a dedicated storage slot and uses delegatecall for all functions. A minimal proxy, defined by ERC-1167, contains only the minimal bytecode required to forward all calls via delegatecall to a single, immutable implementation address. Its primary purpose is cheap deployment of multiple identical contract instances, not runtime upgrades. It lacks the storage, admin functions, and upgrade logic found in full-featured proxy patterns.

MINIMAL PROXY

Frequently Asked Questions

A minimal proxy, or EIP-1167 clone, is a lightweight, gas-efficient smart contract pattern for deploying multiple instances of a base contract. This section answers common technical questions about its implementation, use cases, and trade-offs.

A minimal proxy is a tiny, standardized smart contract that delegates all calls to a fixed implementation contract, using only a few opcodes. It works by storing the implementation address in its bytecode and using a DELEGATECALL opcode to forward all logic execution. This means the proxy contract's storage and execution context are used, but the logic is borrowed from the separate, immutable implementation. The primary benefit is massive gas savings on deployment, as only the small proxy (approx. 45 bytes) needs to be deployed for each new instance, not the full logic contract. This pattern is formally defined by EIP-1167.

ENQUIRY

Get In Touch
today.

Our experts will offer a free quote and a 30min call to discuss your project.

NDA Protected
24h Response
Directly to Engineering Team
10+
Protocols Shipped
$20M+
TVL Overall
NDA Protected direct pipeline
Minimal Proxy: Definition & Gas Optimization Pattern | ChainScore Glossary