MinimalProxy

Description:

Proxy contract enabling upgradeable smart contract patterns. Delegates calls to an implementation contract.

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

{{
  "language": "Solidity",
  "sources": {
    "src/MinimalProxy.sol": {
      "content": "// SPDX-License-Identifier: MIT
pragma solidity ^0.8.29;

contract MinimalProxy {
    address public immutable implementation;

    address private immutable sender0;
    address private immutable sender1;
    address private immutable sender2;
    address private immutable sender3;
    address private immutable sender4;
    address private immutable sender5;
    address private immutable sender6;
    address private immutable sender7;

    constructor(address _implementation, address[8] memory senders) {
        implementation = _implementation;
        sender0 = senders[0];
        sender1 = senders[1];
        sender2 = senders[2];
        sender3 = senders[3];
        sender4 = senders[4];
        sender5 = senders[5];
        sender6 = senders[6];
        sender7 = senders[7];
    }

    receive() external payable {
        revert("Should not receive ETH");
    }

    // forgefmt: disable-next-item
    fallback() external payable {
        if (
               msg.sender != sender0 
            && msg.sender != sender1 
            && msg.sender != sender2 
            && msg.sender != sender3 
            && msg.sender != sender4 
            && msg.sender != sender5 
            && msg.sender != sender6
            && msg.sender != sender7
        ) {
            revert("Unauthorized");
        }

        address _implementation = implementation;
        assembly {
            calldatacopy(0, 0, calldatasize())
            let result := call(gas(), _implementation, callvalue(), 0, calldatasize(), 0, 0)
            returndatacopy(0, 0, returndatasize())
            switch result
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
    }
}
"
    }
  },
  "settings": {
    "remappings": [
      "@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/",
      "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
      "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
      "forge-std/=lib/forge-std/src/",
      "halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/",
      "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
      "openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/",
      "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/"
    ],
    "optimizer": {
      "enabled": true,
      "runs": 1000000
    },
    "metadata": {
      "useLiteralContent": false,
      "bytecodeHash": "ipfs",
      "appendCBOR": true
    },
    "outputSelection": {
      "*": {
        "*": [
          "evm.bytecode",
          "evm.deployedBytecode",
          "devdoc",
          "userdoc",
          "metadata",
          "abi"
        ]
      }
    },
    "evmVersion": "cancun",
    "viaIR": false
  }
}}

Tags:
Proxy, Upgradeable, Factory|addr:0x1921e0ff550c09066edd4df05d304151c45e77de|verified:true|block:23433777|tx:0xc5b4e15bb54770aeb77126cf438b6c9f7e6b5d340460496b20fd970828cedab6|first_check:1758737958

Submitted on: 2025-09-24 20:19:18

Comments

Log in to comment.

No comments yet.