Transactions
Internal Transactions
Coin Balance History
Logs
Code
Read Contract
Read Proxy
Write Contract
Write Proxy
- Contract name:
- LongTermPledgeProxy
- Optimization enabled
- true
- Compiler version
- v0.8.18+commit.87f61d96
- Optimization runs
- 200
- EVM Version
- default
- Verified at
- 2024-05-09T06:53:15.883845Z
Constructor Arguments
0x0000000000000000000000008d18254d5395c52569869ffe9e5e143fb6e5173e
Arg [0] (address) : 0x8d18254d5395c52569869ffe9e5e143fb6e5173e
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 LongTermPledgeProxy 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
0x6080604052600436106100435760003560e01c806331079f6e146100925780638f283970146100c7578063d7dfa0dd146100e7578063f851a440146101145761004a565b3661004a57005b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc543660008037600080366000845af490503d6000803e80801561008d573d6000f35b3d6000fd5b34801561009e57600080fd5b506100b26100ad366004610371565b610129565b60405190151581526020015b60405180910390f35b3480156100d357600080fd5b506100b26100e2366004610371565b6101dd565b3480156100f357600080fd5b506100fc6102a8565b6040516001600160a01b0390911681526020016100be565b34801561012057600080fd5b506100fc6102db565b60006101336102db565b6001600160a01b0316336001600160a01b0316146101985760405162461bcd60e51b815260206004820152601b60248201527f6261736550726f78793a2043616c6c6572206e6f742061646d696e000000000060448201526064015b60405180910390fd5b6101a182610306565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2506001919050565b60006101e76102db565b6001600160a01b0316336001600160a01b0316146102475760405162461bcd60e51b815260206004820152601b60248201527f6261736550726f78793a2043616c6c6572206e6f742061646d696e0000000000604482015260640161018f565b60006102516102db565b905061025c8361034a565b604080516001600160a01b038084168252851660208201527f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a150600192915050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b546001600160a01b0316919050565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61036102cc565b90565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103610329565b60006020828403121561038357600080fd5b81356001600160a01b038116811461039a57600080fd5b939250505056fea264697066735822122039a8d965f1723e360a04b7b5d2a87cd2ef547d845fe71ed7a54cebf56d580ea864736f6c63430008120033