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, gas-efficient smart contract pattern that delegates all calls to a fixed implementation contract.
Chainscore © 2026
definition
SMART CONTRACT PATTERN

What is a Minimal Proxy?

A minimal proxy is a lightweight smart contract pattern that forwards all calls to a fixed, immutable implementation contract, drastically reducing deployment costs and gas fees.

A minimal proxy (also known as an ERC-1167 proxy or clone) is a smart contract that contains just enough bytecode to delegate all function calls to a predetermined implementation contract, while storing its own unique state. This pattern is defined by the ERC-1167 standard, which specifies a tiny, gas-efficient bytecode template. The primary advantage is gas optimization; deploying a minimal proxy costs a fraction of the gas required to deploy a full contract, as it avoids duplicating the implementation's complex logic. This makes it ideal for systems that require many instances of the same contract logic, such as creating individual vaults for users or deploying identical NFT collections.

The mechanism is straightforward: when a function is called on the proxy, its minimal bytecode uses the DELEGATECALL opcode to execute the code from the implementation contract in the context of the proxy's own storage. This means each proxy can have its own independent state—like token balances or owner addresses—while sharing the same core logic. The implementation address is immutably hardcoded into the proxy's bytecode at deployment. Key related concepts include the proxy pattern, beacon proxies for upgradeable implementations, and UUPS (EIP-1822) proxies, which place upgrade logic in the implementation itself.

The most common use case is for factory contracts that need to spawn numerous contract instances efficiently. For example, a decentralized exchange might use a minimal proxy factory to create a unique trading pair contract for every new token listing, or a lending protocol might create a separate collateral vault for each user. This pattern is not inherently upgradeable in the traditional sense; to change logic, you typically deploy a new factory with a new implementation. However, patterns like beacon proxies can be layered on top to make all clones upgradeable from a single source. Developers must ensure the implementation contract is secure and thoroughly audited, as a bug affects all dependent proxies.

how-it-works
SMART CONTRACT PATTERN

How Does a Minimal Proxy Work?

A minimal proxy is an ultra-lightweight smart contract that delegates all calls to a single, immutable implementation contract, drastically reducing deployment costs and gas overhead.

A minimal proxy is a smart contract pattern, formalized in EIP-1167, that creates a tiny, gas-efficient contract whose sole purpose is to forward all calls via delegatecall to a fixed implementation contract. This delegation means the proxy contract has no logic of its own; it acts as a shell, executing code from the implementation while maintaining its own storage context. The core mechanism is a minimal bytecode sequence—often just 55 bytes—that is cloned repeatedly. This pattern is the foundation for factory contracts that need to deploy many identical contract instances, such as for individual user vaults or NFT collections, where deploying the full contract bytecode each time would be prohibitively expensive.

The primary technical advantage is gas efficiency. Deploying a full contract involves paying for the storage of all its bytecode on-chain. In contrast, deploying a minimal proxy only pays for its tiny, fixed bytecode template. The cost savings are substantial: deploying a proxy can be over 90% cheaper than deploying the full implementation. However, this efficiency comes with critical considerations. The proxy's target implementation address is immutable after deployment, meaning the logic cannot be upgraded. Furthermore, because the proxy uses delegatecall, the implementation contract's code executes in the proxy's storage context, so developers must ensure the implementation's storage layout is compatible and secure to prevent storage collisions.

A common application is within a factory contract. The factory stores the implementation contract address and uses the CREATE2 opcode to deterministically deploy minimal proxy clones. Each clone is a unique contract address with independent storage but shared logic. For example, a decentralized exchange might use this to create a separate liquidity pool contract for each trading pair, or a lending protocol might deploy a unique vault for each user. This pattern is distinct from upgradeable proxy patterns (like Transparent or UUPS proxies), which include complex logic for admin functions and upgradeability. The minimal proxy sacrifices upgradeability for maximal deployment efficiency and simplicity.

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, storing only the implementation address.

01

Gas-Efficient Deployment

The primary advantage of a Minimal Proxy is its extremely low deployment cost. A standard proxy like the Transparent Proxy can cost ~700k gas, while a Minimal Proxy (ERC-1167) costs ~55k gas. This makes it ideal for deploying large numbers of identical contract instances, such as for NFT collections or user-specific vaults.

  • Deployment Cost: ~55k gas vs. ~700k gas for a full proxy.
  • Use Case: Mass deployment of identical contract logic.
02

Fixed Implementation

A Minimal Proxy contains only the minimal bytecode required to delegatecall to a single, immutable implementation address. All logic and state definitions reside in the master implementation contract. The proxy itself cannot be upgraded to point to a new implementation; it is permanently fixed upon creation.

  • Core Mechanism: Uses a delegatecall to the stored address.
  • Immutability: The target implementation address is set at creation and cannot be changed.
04

State & Storage Model

While the logic is delegated, the storage is unique to each proxy instance. The delegatecall context means the proxy's storage is used, allowing each cloned contract to maintain its own independent state (e.g., user balances, NFT ownership). This separates logic (shared) from data (unique).

  • Storage: Each proxy has its own independent storage layout.
  • Separation: Logic is shared; state is per-instance.
05

Limitations & Security

The minimalism comes with trade-offs. Key limitations include:

  • No Upgradability: The implementation address is immutable.
  • Constructor Issues: Cannot handle constructor arguments in the standard bytecode (requires a factory pattern).
  • Initialization: Requires a separate initialize function to set up initial state, creating reentrancy and front-running risks if not protected.

Security depends entirely on the integrity of the fixed implementation contract.

06

Common Use Cases

Minimal Proxies are the foundation for scalable, gas-efficient patterns:

  • NFT Drops: Deploying a unique contract for each NFT collection or edition.
  • DeFi Vaults: Creating individual vault contracts for each user or strategy.
  • Factory Patterns: Used by Uniswap V3 to create individual Pool contracts and by Gnosis Safe to create individual Safe wallets.
  • Gas-Optimized DAOs: Deploying identical governance or treasury modules.
code-example
IMPLEMENTATION PATTERN

Code Example & Standard (ERC-1167)

A practical examination of the Minimal Proxy pattern as defined by the ERC-1167 standard, detailing its bytecode structure and deployment mechanics.

A Minimal Proxy is a smart contract that delegates all calls to a pre-defined implementation contract using the DELEGATECALL opcode, storing only a 20-byte address in its runtime code. The canonical bytecode for this pattern is defined by Ethereum Improvement Proposal 1167 (ERC-1167) and is extremely gas-efficient to deploy, costing a small fraction of a full contract deployment. Its compact, predictable structure begins with the byte sequence 0x363d3d373d3d3d363d73 followed by the 20-byte implementation address and ends with the tail sequence 0x5af43d82803e903d91602b57fd5bf3. This standardization ensures interoperability and allows tools to easily identify proxy contracts.

The core mechanism is the delegatecall operation, which executes the logic of the implementation contract in the context of the proxy's storage. This means the proxy's state (variables, balances) is used and modified, not the implementation contract's. The primary use case is for deploying numerous instances of the same contract logic where each instance must maintain its own independent state—common in systems for user wallets, NFT collections, or token vesting schedules. By deploying only one expensive implementation contract and many cheap proxies, projects achieve massive gas savings and consistent upgradeability if the implementation follows a proxy-friendly pattern.

Deploying a Minimal Proxy is straightforward. In Solidity, you can use the new keyword with a salt to create a CREATE2 deterministic address, or deploy raw bytecode. A typical factory function looks like: function clone(address implementation) external returns (address instance) { assembly { ... } }. Critical considerations include ensuring the implementation contract's initializer function is called to set up the proxy's initial state, as constructors do not work with proxies. Furthermore, developers must be aware of storage collision risks in upgradeable patterns and should use established libraries like OpenZeppelin's Clones to handle deployment safely and correctly.

ecosystem-usage
MINIMAL PROXY

Ecosystem Usage

The Minimal Proxy, or EIP-1167, is a standardized, gas-efficient contract cloning pattern. Its primary use is to deploy multiple instances of a contract logic with minimal overhead, enabling scalable and cost-effective contract systems.

01

Gas-Efficient Deployment

The core advantage is drastically reduced gas costs for deploying new contract instances. A minimal proxy is only about 550 bytes of bytecode, compared to thousands for a full contract. This enables patterns where thousands of instances (like user wallets or NFT items) can be created affordably.

  • Key Mechanism: The proxy contains only the necessary code to delegate all calls to a single, immutable implementation address.
  • Example: Deploying 1000 ERC-721 items as minimal proxies can cost ~90% less gas than deploying 1000 full contracts.
02

Factory Pattern & Cloning

Minimal proxies are almost exclusively deployed via a Factory Contract. This pattern separates the system into:

  • Implementation Contract: The single source of logic (e.g., a lending vault, a vesting schedule).
  • Factory: A contract that uses CREATE or CREATE2 to deploy proxy clones pointing to the implementation.
  • Proxies: The lightweight, user-owned instances.

This creates scalable systems like multi-user vaults in DeFi or cloneable NFT contracts where each user's asset is a separate, upgradeable instance.

03

Upgradeability & Immutability Trade-off

A standard EIP-1167 proxy points to a fixed, immutable implementation address. This creates a key trade-off:

  • Pros: No upgrade complexity or admin keys; behavior is guaranteed forever.
  • Cons: The logic can never be patched if a bug is found.

Variants like UUPS (EIP-1822) modify this pattern by storing the implementation address in a contract storage slot defined by the proxy, allowing the logic contract itself to contain upgrade logic. This is a common evolution for systems needing post-deployment fixes.

04

Common Use Cases

DeFi Vaults & Strategies: Protocols like Yearn Finance use clones to deploy individual user vaults, isolating risk and accounting.

NFT Collections & Items: Projects deploy a master NFT contract, then create proxy instances for each series or even each token, enabling unique properties.

Vesting & Token Distribution: Services create a unique vesting contract clone for each employee or investor, all running the same logic.

Multi-Signature Wallets: Factory contracts deploy lightweight Gnosis Safe-like clones for each team or DAO.

05

Technical Implementation (EIP-1167)

The bytecode is a compact, standardized runtime sequence. When called, it:

  1. Extracts the implementation address from its own bytecode.
  2. Delegates the call via DELEGATECALL, executing the logic in the proxy's own storage context.
  3. Returns any data or reverts.

The canonical bytecode begins with 0x3d602d80600a3d3981f3363d3d373d3d3d363d73 followed by the 20-byte implementation address and footer 5af43d82803e903d91602b57fd5bf3.

Libraries like OpenZeppelin's Clones provide safe, audited wrappers for deployment.

06

Security Considerations

While the pattern is robust, it introduces specific risks:

  • Immutable Bugs: A bug in the fixed implementation affects all proxies forever.
  • Implementation Contract Security: The master contract must be impeccably audited and possibly self-destruct protected.
  • Initialization Vulnerabilities: Proxies must be initialized post-creation to set up storage. Missing access controls on initialization can lead to takeover (see UUPS for a pattern where initialization is handled in the implementation).
  • Front-running: Using CREATE2 in factories can expose deployment to address front-running.
examples
MINIMAL PROXY

Use Cases & Examples

The Minimal Proxy (EIP-1167) is a standard for deploying lightweight, gas-efficient contract clones. These are not full contracts but pointers that delegate all logic to a pre-deployed implementation contract.

01

Gas-Efficient Token Deployment

A primary use case is deploying multiple instances of the same token or NFT contract with minimal gas overhead. Instead of deploying the full contract bytecode each time, a minimal proxy is deployed, which delegates all calls to a single, shared implementation. This is ideal for liquidity pool tokens, vesting contracts, or NFT collections where the logic is identical but state is separate.

  • Key Benefit: Reduces deployment gas costs by over 90% compared to deploying a full contract.
  • Example: A platform creating a unique LP token for each new pool.
02

Factory & Clone Patterns

Minimal proxies are the core mechanism behind factory contracts and the clone pattern. A factory contract stores the address of a master implementation and uses CREATE2 or CREATE to deploy a new proxy for each user or product.

  • How it works: The factory's createClone function deploys the tiny proxy bytecode, setting its implementation address.
  • Result: Creates a predictable, low-cost way to spawn countless independent contract instances from a single codebase.
03

Upgradeable Proxy Pattern

While not upgradeable itself, the minimal proxy is a foundational component in more complex upgradeable proxy patterns. Systems like the ERC-1167 Diamond Pattern use a minimal proxy as a "diamond" that delegates calls to multiple implementation contracts (facets) stored in its storage. This allows for modular, upgradeable logic.

  • Contrast with Transparent/UUPS: Minimal proxies are static; upgradeability is managed by the external diamond architecture, not within the proxy itself.
04

Deterministic Addresses with CREATE2

Combining minimal proxies with CREATE2 allows for the pre-computation of a clone's address before it is deployed. This is crucial for counterfactual interactions and layer-2 scaling solutions.

  • Use Case: A user can interact with a contract address that doesn't exist yet, with the guarantee it can be deployed later with known code and state.
  • Example: Optimistic Rollup systems pre-compute addresses for fraud proof contracts.
05

Gas Cost & Bytecode Anatomy

The efficiency stems from its tiny, fixed bytecode sequence (45 bytes for the core runtime). When called, it uses DELEGATECALL to execute the logic in the implementation contract's context, but stores its own state.

  • Core Opcodes: CALLDATACOPY, DELEGATECALL, RETURNDATACOPY, RETURN.
  • Gas Savings: Deployment costs ~50k-70k gas vs. 200k-2M+ for a full contract.
  • Limitation: The implementation address is immutable after deployment.
06

Security Considerations

Using minimal proxies introduces specific security considerations. The security of all clones depends entirely on the implementation contract. A bug or malicious update in the implementation affects all proxies.

  • Trust Model: Users must trust the implementation owner not to upgrade to malicious code (if upgradeable) and that the base implementation is secure.
  • Audit Focus: Security audits must scrutinize the single implementation contract, as its flaws are systemic.
IMPLEMENTATION ARCHITECTURES

Comparison: Proxy Patterns

A comparison of common smart contract proxy patterns, highlighting trade-offs in deployment cost, upgradeability, and security.

FeatureMinimal Proxy (ERC-1167)Transparent ProxyUUPS Proxy

Deployment Gas Cost

< 100k gas

~700k-1M gas

~500k-800k gas

Runtime Gas Overhead

Minimal

~2.7k gas per call

~2.2k gas per call

Upgrade Logic Location

External contract

Proxy admin contract

Implementation contract itself

Admin Function Clashing Risk

Implementation Contract Upgradable

Implementation Can Self-Destruct

Standardization

ERC-1167 Standard

De facto standard

EIP-1822 Standard

security-considerations
MINIMAL PROXY

Security Considerations

While minimal proxies are efficient, their unique bytecode and initialization patterns introduce specific security vectors that developers must audit.

01

Initialization Vector

A minimal proxy's logic is initialized via a single CREATE or CREATE2 call. The initialization code is ephemeral and executes only once during deployment, making any logic errors or access control flaws in this phase permanent and unchangeable. This contrasts with traditional proxies where upgradeability logic can be patched.

  • Critical: Ensure the initialization call correctly sets the immutable implementation address and performs any necessary setup.
  • Vulnerability: A flawed init function can lead to an unusable or incorrectly pointed proxy.
02

Bytecode Uniqueness & Verification

The deterministic bytecode of a minimal proxy (e.g., EIP-1167) is its security anchor. However, verifying that a deployed contract uses the correct canonical bytecode is crucial.

  • Risk: A malicious deployer could use subtly modified bytecode that appears identical but contains a backdoor.
  • Mitigation: Always verify the runtime bytecode of a deployed proxy against the official standard. Tools like Etherscan's contract verification and on-chain bytecode comparisons are essential.
03

Implementation Contract Immutability

The implementation contract address is stored immutably in the proxy's bytecode. This is a core security feature but also a rigidity.

  • No Upgrades: Any bug or vulnerability in the implementation is permanently inherited by all its proxies. There is no admin key or timelock to facilitate an upgrade.
  • Design Implication: This pattern is only suitable for immutable, thoroughly audited logic. Use upgradeable proxy patterns (e.g., Transparent, UUPS) for contracts that may need future fixes or enhancements.
04

Constructor & Initializer Conflicts

Because the proxy delegates all calls, the constructor of the implementation contract does not run in the proxy's context. Initialization must be handled by a separate initializer function.

  • Common Pitfall: Assuming constructor logic (like setting an owner) applies to the proxy.
  • Reentrancy in Initialization: The initializer function is called via DELEGATECALL. If it makes external calls, it must be protected against reentrancy in the same way as the implementation's regular functions, as it shares the proxy's storage context.
05

Frontrunning Proxy Deployment

When using CREATE2 to deploy minimal proxies to predictable addresses, there is a risk of frontrunning.

  • Attack Vector: An attacker can monitor the mempool for a CREATE2 transaction, compute the future address, and send a small amount of ETH to it. This can cause the deployment to fail if the init code performs a balance check.
  • Mitigation: Use a sufficient salt with enough entropy or ensure initialization logic is resilient to pre-existing balance.
06

Storage Collision Risk

Minimal proxies use DELEGACALL, meaning the implementation code operates on the proxy's storage layout. This is generally safe if the implementation is designed for proxies.

  • Critical Hazard: If a non-proxy-safe contract (e.g., a regular standalone contract) is used as the implementation, its storage variables will collide with the proxy's reserved slots, leading to catastrophic data corruption.
  • Best Practice: Only use implementation contracts explicitly written for a proxy pattern, often indicated by inheriting from initializable or UUPS upgradeable contracts.
MINIMAL PROXY

Frequently Asked Questions

A minimal proxy (EIP-1167) is a lightweight, gas-efficient contract that delegates all calls to a fixed implementation contract. These FAQs address its core mechanics, use cases, and security considerations.

A minimal proxy is a smart contract pattern defined by EIP-1167 that creates a tiny, gas-efficient contract acting as a forwarding layer to a fixed implementation contract. It works by containing only the minimal bytecode required to delegate all calls via DELEGATECALL to the master implementation. When a user interacts with the proxy, the call is forwarded, executed in the proxy's context (meaning it uses the proxy's storage), and the result is returned. This allows for the cheap deployment of multiple contract instances that share the same logic but maintain independent state.

Key Mechanism:

  • Deployment Bytecode: Typically ~55 bytes, drastically cheaper than a full contract.
  • DELEGATECALL: Forwards logic execution, preserving the proxy's address and storage.
  • Fixed Target: The implementation address is hardcoded at proxy creation.
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 | ChainScore Glossary