false
false
0
The new Blockscout UI is now open source! Learn how to deploy it here

Contract Address Details

0xc04A47344C362b6a4DD1E7b7Fd080ac6ABA36C95

Contract Name
Proxy
Creator
0xdacd42–0c1d1e at 0xe84d64–41af63
Implementation
0x07081772b40950916d9f82873d6abe0e44f48a46
Balance
0 ETH
Tokens
Fetching tokens...
Transactions
17,512 Transactions
Transfers
5,510 Transfers
Gas Used
6,503,431,294
Last Balance Update
4892660
Contract is not verified. However, we found a verified contract with the same bytecode in Blockscout DB 0x545d6818bf75735987c2c6673527e5c9f08a1aee.
All metadata displayed below is from that contract. In order to verify current contract, click Verify & Publish button
Verify & Publish
Contract name:
Proxy




Optimization enabled
true
Compiler version
v0.8.18+commit.87f61d96




Optimization runs
100
Verified at
2023-04-18T01:59:36.711658Z

cache/solpp-generated-contracts/zksync/Proxy.sol

pragma solidity ^0.8.0;

// SPDX-License-Identifier: MIT OR Apache-2.0



import "./Ownable.sol";
import "./Upgradeable.sol";
import "./UpgradeableMaster.sol";

/// @title Proxy Contract
/// @dev NOTICE: Proxy must implement UpgradeableMaster interface to prevent calling some function of it not by master of proxy
/// @author Matter Labs
contract Proxy is Upgradeable, Ownable {
    /// @dev Storage position of "target" (actual implementation address: keccak256('eip1967.proxy.implementation') - 1)
    bytes32 private constant TARGET_POSITION = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

    /// @notice Contract constructor
    /// @dev Calls Ownable contract constructor and initialize target
    /// @param target Initial implementation address
    /// @param targetInitializationParameters Target initialization parameters
    constructor(address target, bytes memory targetInitializationParameters) Ownable(msg.sender) {
        setTarget(target);
        // solhint-disable-next-line avoid-low-level-calls
        (bool initializationSuccess, ) = getTarget().delegatecall(abi.encodeWithSignature("initialize(bytes)", targetInitializationParameters));
        require(initializationSuccess, "uin11"); // uin11 - target initialization failed
    }

    /// @notice Intercepts initialization calls
    function initialize(bytes calldata) external pure {
        revert("ini11"); // ini11 - interception of initialization call
    }

    /// @notice Intercepts upgrade calls
    function upgrade(bytes calldata) external pure {
        revert("upg11"); // upg11 - interception of upgrade call
    }

    /// @notice Returns target of contract
    /// @return target Actual implementation address
    function getTarget() public view returns (address target) {
        bytes32 position = TARGET_POSITION;
        assembly {
            target := sload(position)
        }
    }

    /// @notice Sets new target of contract
    /// @param _newTarget New actual implementation address
    function setTarget(address _newTarget) internal {
        bytes32 position = TARGET_POSITION;
        assembly {
            sstore(position, _newTarget)
        }
    }

    /// @notice Upgrades target
    /// @param newTarget New target
    /// @param newTargetUpgradeParameters New target upgrade parameters
    function upgradeTarget(address newTarget, bytes calldata newTargetUpgradeParameters) external override {
        requireMaster(msg.sender);

        setTarget(newTarget);
        // solhint-disable-next-line avoid-low-level-calls
        (bool upgradeSuccess, ) = getTarget().delegatecall(abi.encodeWithSignature("upgrade(bytes)", newTargetUpgradeParameters));
        require(upgradeSuccess, "ufu11"); // ufu11 - target upgrade failed
    }

    /// @notice Performs a delegatecall to the contract implementation
    /// @dev Fallback function allowing to perform a delegatecall to the given implementation
    /// This function will return whatever the implementation call returns
    function _fallback() internal {
        address _target = getTarget();
        assembly {
            // The pointer to the free memory slot
            let ptr := mload(0x40)
            // Copy function signature and arguments from calldata at zero position into memory at pointer position
            calldatacopy(ptr, 0x0, calldatasize())
            // Delegatecall method of the implementation contract, returns 0 on error
            let result := delegatecall(gas(), _target, ptr, calldatasize(), 0x0, 0)
            // Get the size of the last return data
            let size := returndatasize()
            // Copy the size length of bytes from return data at zero position to pointer position
            returndatacopy(ptr, 0x0, size)
            // Depending on result value
            switch result
                case 0 {
                    // End execution and revert state changes
                    revert(ptr, size)
                }
                default {
                    // Return data with length of size at pointers position
                    return(ptr, size)
                }
        }
    }

    /// @notice Will run when no functions matches call data
    fallback() external payable {
        _fallback();
    }

    /// @notice Same as fallback but called when calldata is empty
    receive() external payable {
        _fallback();
    }
}
        

cache/solpp-generated-contracts/zksync/Ownable.sol

pragma solidity ^0.8.0;

// SPDX-License-Identifier: MIT OR Apache-2.0



/// @title Ownable Contract
/// @author Matter Labs
contract Ownable {
    /// @dev Storage position of the masters address (keccak256('eip1967.proxy.admin') - 1)
    bytes32 private constant MASTER_POSITION = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;

    /// @notice Contract constructor
    /// @dev Sets msg sender address as masters address
    /// @param masterAddress Master address
    constructor(address masterAddress) {
        setMaster(masterAddress);
    }

    /// @notice Check if specified address is master
    /// @param _address Address to check
    function requireMaster(address _address) internal view {
        require(_address == getMaster(), "1c"); // oro11 - only by master
    }

    /// @notice Returns contract masters address
    /// @return master Master's address
    function getMaster() public view returns (address master) {
        bytes32 position = MASTER_POSITION;
        assembly {
            master := sload(position)
        }
    }

    /// @dev Sets new masters address
    /// @param _newMaster New master's address
    function setMaster(address _newMaster) internal {
        bytes32 position = MASTER_POSITION;
        assembly {
            sstore(position, _newMaster)
        }
    }

    /// @notice Transfer mastership of the contract to new master
    /// @param _newMaster New masters address
    function transferMastership(address _newMaster) external {
        requireMaster(msg.sender);
        require(_newMaster != address(0), "1d"); // otp11 - new masters address can't be zero address
        setMaster(_newMaster);
    }
}
          

cache/solpp-generated-contracts/zksync/Upgradeable.sol

pragma solidity ^0.8.0;

// SPDX-License-Identifier: MIT OR Apache-2.0



/// @title Interface of the upgradeable contract
/// @author Matter Labs
interface Upgradeable {
    /// @notice Upgrades target of upgradeable contract
    /// @param newTarget New target
    /// @param newTargetInitializationParameters New target initialization parameters
    function upgradeTarget(address newTarget, bytes calldata newTargetInitializationParameters) external;
}
          

cache/solpp-generated-contracts/zksync/UpgradeableMaster.sol

pragma solidity ^0.8.0;

// SPDX-License-Identifier: MIT OR Apache-2.0



/// @title Interface of the upgradeable master contract (defines notice period duration and allows finish upgrade during preparation of it)
/// @author Matter Labs
interface UpgradeableMaster {
    /// @notice Notice period before activation preparation status of upgrade mode
    function getNoticePeriod() external returns (uint256);

    /// @notice Checks that contract is ready for upgrade
    /// @return bool flag indicating that contract is ready for upgrade
    function isReadyForUpgrade() external returns (bool);
}
          

Compiler Settings

{"outputSelection":{"*":{"*":["abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata"],"":["ast"]}},"optimizer":{"runs":100,"enabled":true},"libraries":{}}
              

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"address","name":"target","internalType":"address"},{"type":"bytes","name":"targetInitializationParameters","internalType":"bytes"}]},{"type":"fallback","stateMutability":"payable"},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"master","internalType":"address"}],"name":"getMaster","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"target","internalType":"address"}],"name":"getTarget","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[],"name":"initialize","inputs":[{"type":"bytes","name":"","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferMastership","inputs":[{"type":"address","name":"_newMaster","internalType":"address"}]},{"type":"function","stateMutability":"pure","outputs":[],"name":"upgrade","inputs":[{"type":"bytes","name":"","internalType":"bytes"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"upgradeTarget","inputs":[{"type":"address","name":"newTarget","internalType":"address"},{"type":"bytes","name":"newTargetUpgradeParameters","internalType":"bytes"}]},{"type":"receive","stateMutability":"payable"}]
              

Contract Creation Code

Verify & Publish
0x608060405234801561001057600080fd5b5060405161086838038061086883398101604081905261002f91610195565b33610058817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b5061006f8260008051602061084883398151915255565b60006100876000805160206108488339815191525490565b6001600160a01b0316826040516024016100a19190610263565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b179052516100d69190610296565b600060405180830381855af49150503d8060008114610111576040519150601f19603f3d011682016040523d82523d6000602084013e610116565b606091505b50509050806101535760405162461bcd60e51b815260206004820152600560248201526475696e313160d81b604482015260640160405180910390fd5b5050506102b2565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561018c578181015183820152602001610174565b50506000910152565b600080604083850312156101a857600080fd5b82516001600160a01b03811681146101bf57600080fd5b60208401519092506001600160401b03808211156101dc57600080fd5b818501915085601f8301126101f057600080fd5b8151818111156102025761020261015b565b604051601f8201601f19908116603f0116810190838211818310171561022a5761022a61015b565b8160405282815288602084870101111561024357600080fd5b610254836020830160208801610171565b80955050505050509250929050565b6020815260008251806020840152610282816040850160208701610171565b601f01601f19169190910160400192915050565b600082516102a8818460208701610171565b9190910192915050565b610587806102c16000396000f3fe6080604052600436106100595760003560e01c80632539464514610070578063439fab91146100905780635a99719e146100b05780636fc49140146100ea578063c3f596871461010a578063f00e6a2a1461012a57610068565b366100685761006661013f565b005b61006661013f565b34801561007c57600080fd5b5061006661008b366004610400565b610170565b34801561009c57600080fd5b506100666100ab366004610400565b6101a5565b3480156100bc57600080fd5b50600080516020610532833981519152545b6040516001600160a01b03909116815260200160405180910390f35b3480156100f657600080fd5b5061006661010536600461045e565b6101d5565b34801561011657600080fd5b506100666101253660046104b1565b6102e0565b34801561013657600080fd5b506100ce61033d565b600061014961033d565b905060405136600082376000803683855af43d806000843e81801561016c578184f35b8184fd5b60405162461bcd60e51b8152602060048201526005602482015264757067313160d81b60448201526064015b60405180910390fd5b60405162461bcd60e51b8152602060048201526005602482015264696e69313160d81b604482015260640161019c565b6101de33610362565b610206837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b600061021061033d565b6001600160a01b0316838360405160240161022c9291906104d3565b60408051601f198184030181529181526020820180516001600160e01b0316632539464560e01b179052516102619190610502565b600060405180830381855af49150503d806000811461029c576040519150601f19603f3d011682016040523d82523d6000602084013e6102a1565b606091505b50509050806102da5760405162461bcd60e51b8152602060048201526005602482015264756675313160d81b604482015260640161019c565b50505050565b6102e933610362565b6001600160a01b0381166103245760405162461bcd60e51b81526020600482015260026024820152610c5960f21b604482015260640161019c565b61033a8160008051602061053283398151915255565b50565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b600080516020610532833981519152546001600160a01b0316816001600160a01b03161461033a5760405162461bcd60e51b8152602060048201526002602482015261316360f01b604482015260640161019c565b60008083601f8401126103c957600080fd5b50813567ffffffffffffffff8111156103e157600080fd5b6020830191508360208285010111156103f957600080fd5b9250929050565b6000806020838503121561041357600080fd5b823567ffffffffffffffff81111561042a57600080fd5b610436858286016103b7565b90969095509350505050565b80356001600160a01b038116811461045957600080fd5b919050565b60008060006040848603121561047357600080fd5b61047c84610442565b9250602084013567ffffffffffffffff81111561049857600080fd5b6104a4868287016103b7565b9497909650939450505050565b6000602082840312156104c357600080fd5b6104cc82610442565b9392505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000825160005b818110156105235760208186018101518583015201610509565b50600092019182525091905056feb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a2646970667358221220d1a64f6f339a0a53c36ef8a69790340fabb17c59fb5e78208ad574467a3d9f2364736f6c63430008120033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc00000000000000000000000007081772b40950916d9f82873d6abe0e44f48a4600000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000100000000000000000000000000f97cf562cfffa2e0041146da262b7e058dece191000000000000000000000000d4e2b83d2696ed0e05818db08f95416aac8d7e2f000000000000000000000000dacd424a952de87955d32912baf94fb3020c1d1e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001550c646aac6563ebfa6c75cd41892c6dbc4ea7f6de7ae88caa60e00b5901ec40000000000000000000000000000000000000000000000000000000000000000c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470

Deployed ByteCode

0x6080604052600436106100595760003560e01c80632539464514610070578063439fab91146100905780635a99719e146100b05780636fc49140146100ea578063c3f596871461010a578063f00e6a2a1461012a57610068565b366100685761006661013f565b005b61006661013f565b34801561007c57600080fd5b5061006661008b366004610400565b610170565b34801561009c57600080fd5b506100666100ab366004610400565b6101a5565b3480156100bc57600080fd5b50600080516020610532833981519152545b6040516001600160a01b03909116815260200160405180910390f35b3480156100f657600080fd5b5061006661010536600461045e565b6101d5565b34801561011657600080fd5b506100666101253660046104b1565b6102e0565b34801561013657600080fd5b506100ce61033d565b600061014961033d565b905060405136600082376000803683855af43d806000843e81801561016c578184f35b8184fd5b60405162461bcd60e51b8152602060048201526005602482015264757067313160d81b60448201526064015b60405180910390fd5b60405162461bcd60e51b8152602060048201526005602482015264696e69313160d81b604482015260640161019c565b6101de33610362565b610206837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b600061021061033d565b6001600160a01b0316838360405160240161022c9291906104d3565b60408051601f198184030181529181526020820180516001600160e01b0316632539464560e01b179052516102619190610502565b600060405180830381855af49150503d806000811461029c576040519150601f19603f3d011682016040523d82523d6000602084013e6102a1565b606091505b50509050806102da5760405162461bcd60e51b8152602060048201526005602482015264756675313160d81b604482015260640161019c565b50505050565b6102e933610362565b6001600160a01b0381166103245760405162461bcd60e51b81526020600482015260026024820152610c5960f21b604482015260640161019c565b61033a8160008051602061053283398151915255565b50565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b600080516020610532833981519152546001600160a01b0316816001600160a01b03161461033a5760405162461bcd60e51b8152602060048201526002602482015261316360f01b604482015260640161019c565b60008083601f8401126103c957600080fd5b50813567ffffffffffffffff8111156103e157600080fd5b6020830191508360208285010111156103f957600080fd5b9250929050565b6000806020838503121561041357600080fd5b823567ffffffffffffffff81111561042a57600080fd5b610436858286016103b7565b90969095509350505050565b80356001600160a01b038116811461045957600080fd5b919050565b60008060006040848603121561047357600080fd5b61047c84610442565b9250602084013567ffffffffffffffff81111561049857600080fd5b6104a4868287016103b7565b9497909650939450505050565b6000602082840312156104c357600080fd5b6104cc82610442565b9392505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000825160005b818110156105235760208186018101518583015201610509565b50600092019182525091905056feb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a2646970667358221220d1a64f6f339a0a53c36ef8a69790340fabb17c59fb5e78208ad574467a3d9f2364736f6c63430008120033