Discover more of Etherscan's tools and services in one place.
Sponsored
Contract Source Code:
File 1 of 1 : Proxy.sol<i class='far fa-question-circle text-muted ms-2' data-bs-trigger='hover' data-bs-toggle='tooltip' data-bs-html='true' data-bs-title='Click on the check box to select individual contract to compare. Only 1 contract can be selected from each side.'></i>
// SPDX-License-Identifier: LGPL-3.0-only pragma solidity 0.8.25; // This code was borrowed from Safe's v1.4.1-build.0: // https://github.com/safe-global/safe-smart-account/blob/8b9023d9a2627ecbb5c40592e762857980f8e880/contracts/proxies/SafeProxy.sol // // The only changes applied were the rename of the interface and the contract. /** * @title IProxyWithMasterCopy - Helper interface to access the singleton address of the Proxy on-chain. * @author Richard Meissner - @rmeissner */ interface IProxyWithMasterCopy { function masterCopy() external view returns (address); } /** * @title Proxy - Generic proxy contract allows to execute all transactions applying the code of a master contract. * @author Stefan George - <stefan@gnosis.io> * @author Richard Meissner - <richard@gnosis.io> */ // slither-disable-next-line locked-ether contract Proxy { // Singleton always needs to be first declared variable, to ensure that it is at the same location in the contracts to which calls are delegated. // To reduce deployment costs this variable is internal and needs to be retrieved via `getStorageAt` // slither-disable-next-line immutable-states address internal singleton; /** * @notice Constructor function sets address of singleton contract. * @param _singleton Singleton address. */ constructor(address _singleton) { require(_singleton != address(0), "Invalid singleton address provided"); singleton = _singleton; } /// @dev Fallback function forwards all transactions and returns all received return data. fallback() external payable { // solhint-disable-next-line no-inline-assembly assembly { let _singleton := and( sload(0), 0xffffffffffffffffffffffffffffffffffffffff ) // 0xa619486e == keccak("masterCopy()"). The value is right padded to 32-bytes with 0s if eq( calldataload(0), 0xa619486e00000000000000000000000000000000000000000000000000000000 ) { mstore(0, _singleton) return(0, 0x20) } calldatacopy(0, 0, calldatasize()) let success := delegatecall( gas(), _singleton, 0, calldatasize(), 0, 0 ) returndatacopy(0, 0, returndatasize()) if eq(success, 0) { revert(0, returndatasize()) } return(0, returndatasize()) } } }
Please enter a contract address above to load the contract details and source code.
Please DO NOT store any passwords or private keys here. A private note (up to 100 characters) can be saved and is useful for transaction tracking.
My Name Tag:
Private Note:
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.