UUPSProxy

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:

// SPDX-License-Identifier: X
pragma solidity ^0.8.20;

contract UUPSProxy {
    bytes32 private constant IMPLEMENTATION_SLOT =
        0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

    error InvalidImplementation();

    constructor(address impl) {
        require(impl != address(0), InvalidImplementation());
        require(impl.code.length > 0, InvalidImplementation());

        assembly {
            sstore(IMPLEMENTATION_SLOT, impl)
        }
    }

    fallback() external payable {
        _fallback();
    }

    receive() external payable {
        _fallback();
    }

    function _fallback() internal {
        address impl = _implementation();

        assembly {
            calldatacopy(0, 0, calldatasize())
            let result := delegatecall(gas(), impl, 0, calldatasize(), 0, 0)
            returndatacopy(0, 0, returndatasize())

            switch result
            case 0 {
                revert(0, returndatasize())
            }
            default {
                return(0, returndatasize())
            }
        }
    }

    function _implementation() private view returns (address impl) {
        assembly {
            impl := sload(IMPLEMENTATION_SLOT)
        }
    }
}

Tags:
Proxy, Upgradeable|addr:0x326efff46f80ce2eb7a1f3b45e39e4c504a975b4|verified:true|block:23580180|tx:0xbe0a7d3699c15ce79828a69e5d6777227b705262f2f9305eca69735f9054f54e|first_check:1760517776

Submitted on: 2025-10-15 10:42:58

Comments

Log in to comment.

No comments yet.