Transactions
Token Transfers
Tokens
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Read Proxy
Write Contract
Write Proxy
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
All metadata displayed below is from that contract. In order to verify current contract, click Verify & Publish button
- 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
0x608060405234801561001057600080fd5b5060405161086838038061086883398101604081905261002f91610195565b33610058817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b5061006f8260008051602061084883398151915255565b60006100876000805160206108488339815191525490565b6001600160a01b0316826040516024016100a19190610263565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b179052516100d69190610296565b600060405180830381855af49150503d8060008114610111576040519150601f19603f3d011682016040523d82523d6000602084013e610116565b606091505b50509050806101535760405162461bcd60e51b815260206004820152600560248201526475696e313160d81b604482015260640160405180910390fd5b5050506102b2565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561018c578181015183820152602001610174565b50506000910152565b600080604083850312156101a857600080fd5b82516001600160a01b03811681146101bf57600080fd5b60208401519092506001600160401b03808211156101dc57600080fd5b818501915085601f8301126101f057600080fd5b8151818111156102025761020261015b565b604051601f8201601f19908116603f0116810190838211818310171561022a5761022a61015b565b8160405282815288602084870101111561024357600080fd5b610254836020830160208801610171565b80955050505050509250929050565b6020815260008251806020840152610282816040850160208701610171565b601f01601f19169190910160400192915050565b600082516102a8818460208701610171565b9190910192915050565b610587806102c16000396000f3fe6080604052600436106100595760003560e01c80632539464514610070578063439fab91146100905780635a99719e146100b05780636fc49140146100ea578063c3f596871461010a578063f00e6a2a1461012a57610068565b366100685761006661013f565b005b61006661013f565b34801561007c57600080fd5b5061006661008b366004610400565b610170565b34801561009c57600080fd5b506100666100ab366004610400565b6101a5565b3480156100bc57600080fd5b50600080516020610532833981519152545b6040516001600160a01b03909116815260200160405180910390f35b3480156100f657600080fd5b5061006661010536600461045e565b6101d5565b34801561011657600080fd5b506100666101253660046104b1565b6102e0565b34801561013657600080fd5b506100ce61033d565b600061014961033d565b905060405136600082376000803683855af43d806000843e81801561016c578184f35b8184fd5b60405162461bcd60e51b8152602060048201526005602482015264757067313160d81b60448201526064015b60405180910390fd5b60405162461bcd60e51b8152602060048201526005602482015264696e69313160d81b604482015260640161019c565b6101de33610362565b610206837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b600061021061033d565b6001600160a01b0316838360405160240161022c9291906104d3565b60408051601f198184030181529181526020820180516001600160e01b0316632539464560e01b179052516102619190610502565b600060405180830381855af49150503d806000811461029c576040519150601f19603f3d011682016040523d82523d6000602084013e6102a1565b606091505b50509050806102da5760405162461bcd60e51b8152602060048201526005602482015264756675313160d81b604482015260640161019c565b50505050565b6102e933610362565b6001600160a01b0381166103245760405162461bcd60e51b81526020600482015260026024820152610c5960f21b604482015260640161019c565b61033a8160008051602061053283398151915255565b50565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b600080516020610532833981519152546001600160a01b0316816001600160a01b03161461033a5760405162461bcd60e51b8152602060048201526002602482015261316360f01b604482015260640161019c565b60008083601f8401126103c957600080fd5b50813567ffffffffffffffff8111156103e157600080fd5b6020830191508360208285010111156103f957600080fd5b9250929050565b6000806020838503121561041357600080fd5b823567ffffffffffffffff81111561042a57600080fd5b610436858286016103b7565b90969095509350505050565b80356001600160a01b038116811461045957600080fd5b919050565b60008060006040848603121561047357600080fd5b61047c84610442565b9250602084013567ffffffffffffffff81111561049857600080fd5b6104a4868287016103b7565b9497909650939450505050565b6000602082840312156104c357600080fd5b6104cc82610442565b9392505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000825160005b818110156105235760208186018101518583015201610509565b50600092019182525091905056feb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a2646970667358221220d1a64f6f339a0a53c36ef8a69790340fabb17c59fb5e78208ad574467a3d9f2364736f6c63430008120033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc00000000000000000000000063e059bdedea829c22efa31cbadb9bea5e86c3cd000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000001000000000000000000000000003932aa1bbcc88d2790b63f362614c3329ae0eca200000000000000000000000004f447074bea8de0eada511863f78a5a402d2b89000000000000000000000000d64c60b5cac9243aee3ad20f220b91193691ffb1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001550c646aac6563ebfa6c75cd41892c6dbc4ea7f6de7ae88caa60e00b5901ec40000000000000000000000000000000000000000000000000000000000000000c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470
Deployed ByteCode
0x6080604052600436106100595760003560e01c80632539464514610070578063439fab91146100905780635a99719e146100b05780636fc49140146100ea578063c3f596871461010a578063f00e6a2a1461012a57610068565b366100685761006661013f565b005b61006661013f565b34801561007c57600080fd5b5061006661008b366004610400565b610170565b34801561009c57600080fd5b506100666100ab366004610400565b6101a5565b3480156100bc57600080fd5b50600080516020610532833981519152545b6040516001600160a01b03909116815260200160405180910390f35b3480156100f657600080fd5b5061006661010536600461045e565b6101d5565b34801561011657600080fd5b506100666101253660046104b1565b6102e0565b34801561013657600080fd5b506100ce61033d565b600061014961033d565b905060405136600082376000803683855af43d806000843e81801561016c578184f35b8184fd5b60405162461bcd60e51b8152602060048201526005602482015264757067313160d81b60448201526064015b60405180910390fd5b60405162461bcd60e51b8152602060048201526005602482015264696e69313160d81b604482015260640161019c565b6101de33610362565b610206837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b600061021061033d565b6001600160a01b0316838360405160240161022c9291906104d3565b60408051601f198184030181529181526020820180516001600160e01b0316632539464560e01b179052516102619190610502565b600060405180830381855af49150503d806000811461029c576040519150601f19603f3d011682016040523d82523d6000602084013e6102a1565b606091505b50509050806102da5760405162461bcd60e51b8152602060048201526005602482015264756675313160d81b604482015260640161019c565b50505050565b6102e933610362565b6001600160a01b0381166103245760405162461bcd60e51b81526020600482015260026024820152610c5960f21b604482015260640161019c565b61033a8160008051602061053283398151915255565b50565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b600080516020610532833981519152546001600160a01b0316816001600160a01b03161461033a5760405162461bcd60e51b8152602060048201526002602482015261316360f01b604482015260640161019c565b60008083601f8401126103c957600080fd5b50813567ffffffffffffffff8111156103e157600080fd5b6020830191508360208285010111156103f957600080fd5b9250929050565b6000806020838503121561041357600080fd5b823567ffffffffffffffff81111561042a57600080fd5b610436858286016103b7565b90969095509350505050565b80356001600160a01b038116811461045957600080fd5b919050565b60008060006040848603121561047357600080fd5b61047c84610442565b9250602084013567ffffffffffffffff81111561049857600080fd5b6104a4868287016103b7565b9497909650939450505050565b6000602082840312156104c357600080fd5b6104cc82610442565b9392505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000825160005b818110156105235760208186018101518583015201610509565b50600092019182525091905056feb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a2646970667358221220d1a64f6f339a0a53c36ef8a69790340fabb17c59fb5e78208ad574467a3d9f2364736f6c63430008120033