Transactions
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Read Proxy
Write Contract
Write Proxy
- Contract name:
- AccountManageProxy
- Optimization enabled
- true
- Compiler version
- v0.8.14+commit.80d49f37
- Optimization runs
- 200
- EVM Version
- default
- Verified at
- 2024-05-09T07:58:29.275777Z
Constructor Arguments
0x00000000000000000000000057c381e1bb813cc3b5a0b361eda0c1be2e03aa98
Arg [0] (address) : 0x57c381e1bb813cc3b5a0b361eda0c1be2e03aa98
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) { _setAdmin(newAdmin); emit AdminChanged(admin(), newAdmin); return true; } function upgrad(address newLogic) external onlyAmdin returns(bool) { _setLogic(newLogic); emit Upgraded(newLogic); return true; } } contract AccountManageProxy 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
0x6080604052600436106100435760003560e01c806331079f6e146100925780638f283970146100c7578063d7dfa0dd146100e7578063f851a440146101145761004a565b3661004a57005b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc543660008037600080366000845af490503d6000803e80801561008d573d6000f35b3d6000fd5b34801561009e57600080fd5b506100b26100ad36600461036c565b610129565b60405190151581526020015b60405180910390f35b3480156100d357600080fd5b506100b26100e236600461036c565b6101dd565b3480156100f357600080fd5b506100fc6102a3565b6040516001600160a01b0390911681526020016100be565b34801561012057600080fd5b506100fc6102d6565b60006101336102d6565b6001600160a01b0316336001600160a01b0316146101985760405162461bcd60e51b815260206004820152601b60248201527f4c756361506f7278793a2043616c6c6572206e6f742061646d696e000000000060448201526064015b60405180910390fd5b6101a182610301565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2506001919050565b60006101e76102d6565b6001600160a01b0316336001600160a01b0316146102475760405162461bcd60e51b815260206004820152601b60248201527f4c756361506f7278793a2043616c6c6572206e6f742061646d696e0000000000604482015260640161018f565b61025082610345565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6102796102d6565b604080516001600160a01b03928316815291851660208301520160405180910390a1506001919050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b546001600160a01b0316919050565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036102c7565b90565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103610324565b60006020828403121561037e57600080fd5b81356001600160a01b038116811461039557600080fd5b939250505056fea2646970667358221220aa3eac7d7f4c7976dfed195e9999871fd697b38a97a0cb7510b441bbc373e06764736f6c634300080e0033