Transactions
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Read Proxy
Write Contract
Write Proxy
- Contract name:
- FixedLockProxy
- Optimization enabled
- false
- Compiler version
- v0.8.18+commit.87f61d96
- EVM Version
- default
- Verified at
- 2024-05-09T07:42:00.497647Z
Constructor Arguments
0x000000000000000000000000265661f2a3c16f07345b6494565b05dca43b6825
Arg [0] (address) : 0x265661f2a3c16f07345b6494565b05dca43b6825
Contract source code
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; library StorageSlot { struct AddressSlot { address value; } struct BooleanSlot { bool value; } struct Bytes32Slot { bytes32 value; } struct Uint256Slot { uint256 value; } function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) { assembly { r.slot := slot } } function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) { assembly { r.slot := slot } } function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) { assembly { r.slot := slot } } function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) { assembly { r.slot := slot } } } contract Proxy { //EIP1967 Impl_solt: keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1 bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; //EIP1967 Admin_solt: keccak-256 hash of "eip1967.proxy.admin" subtracted by 1 bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; function _setAdmin(address admin_) internal { StorageSlot.getAddressSlot(_ADMIN_SLOT).value = admin_; } function _setLogic(address logic_) internal { StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = logic_; } function logic() public view returns (address) { return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value; } function admin() public view returns (address) { return StorageSlot.getAddressSlot(_ADMIN_SLOT).value; } fallback () external payable { assembly { let impl := sload(_IMPLEMENTATION_SLOT) 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()) } } } receive () external payable virtual {} } contract baseProxy is Proxy { event Upgraded(address indexed impl); event AdminChanged(address preAdmin, address newAdmin); modifier onlyAmdin(){ require(msg.sender == admin(), "baseProxy: Caller not admin"); _; } function changeAdmin(address newAdmin) external onlyAmdin returns(bool) { address preAdmin = admin(); _setAdmin(newAdmin); emit AdminChanged(preAdmin, newAdmin); return true; } function upgrad(address newLogic) external onlyAmdin returns(bool) { _setLogic(newLogic); emit Upgraded(newLogic); return true; } } contract FixedLockProxy is baseProxy{ constructor(address impl) { _setAdmin(msg.sender); _setLogic(impl); } }
Contract ABI
[{"type":"constructor","inputs":[{"type":"address","name":"impl","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"admin","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"changeAdmin","inputs":[{"type":"address","name":"newAdmin","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"logic","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"upgrad","inputs":[{"type":"address","name":"newLogic","internalType":"address"}]},{"type":"event","name":"AdminChanged","inputs":[{"type":"address","name":"preAdmin","indexed":false},{"type":"address","name":"newAdmin","indexed":false}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"type":"address","name":"impl","indexed":true}],"anonymous":false},{"type":"receive"},{"type":"fallback"}]
Deployed ByteCode
0x6080604052600436106100435760003560e01c806331079f6e146100925780638f283970146100cf578063d7dfa0dd1461010c578063f851a440146101375761004a565b3661004a57005b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc543660008037600080366000845af43d6000803e806000811461008d573d6000f35b3d6000fd5b34801561009e57600080fd5b506100b960048036038101906100b491906104fa565b610162565b6040516100c69190610542565b60405180910390f35b3480156100db57600080fd5b506100f660048036038101906100f191906104fa565b61022e565b6040516101039190610542565b60405180910390f35b34801561011857600080fd5b506101216102fd565b60405161012e919061056c565b60405180910390f35b34801561014357600080fd5b5061014c610354565b604051610159919061056c565b60405180910390f35b600061016c610354565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101d0906105e4565b60405180910390fd5b6101e2826103b5565b8173ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a260019050919050565b6000610238610354565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161029c906105e4565b60405180910390fd5b60006102af610354565b90506102ba83610426565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f81846040516102eb929190610604565b60405180910390a16001915050919050565b600061032b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6103ab565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006103827fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b6103ab565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000819050919050565b806103e27f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6103ab565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b806104537fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610360001b6103ab565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006104c78261049c565b9050919050565b6104d7816104bc565b81146104e257600080fd5b50565b6000813590506104f4816104ce565b92915050565b6000602082840312156105105761050f610497565b5b600061051e848285016104e5565b91505092915050565b60008115159050919050565b61053c81610527565b82525050565b60006020820190506105576000830184610533565b92915050565b610566816104bc565b82525050565b6000602082019050610581600083018461055d565b92915050565b600082825260208201905092915050565b7f6261736550726f78793a2043616c6c6572206e6f742061646d696e0000000000600082015250565b60006105ce601b83610587565b91506105d982610598565b602082019050919050565b600060208201905081810360008301526105fd816105c1565b9050919050565b6000604082019050610619600083018561055d565b610626602083018461055d565b939250505056fea2646970667358221220ba97bdac0054f11cc04e8f6fea00818b02de01c3f1e2e551ec4d11fe84ec993c64736f6c63430008120033