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