Contract Overview
My Name Tag:
Not Available
[ Download CSV Export ]
Latest 25 internal transaction
[ Download CSV Export ]
Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xA017B813652b93a0aF2887913EFCBB4ab250CE65
Contract Name:
TransparentUpgradeableProxy
Compiler Version
v0.7.4+commit.3f05b770
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan on 2021-08-31 */ pragma solidity >=0.6.0 <0.8.0; abstract contract Proxy { function _delegate(address implementation) internal virtual { assembly { calldatacopy(0, 0, calldatasize()) let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0) returndatacopy(0, 0, returndatasize()) switch result case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } function _implementation() internal view virtual returns (address); function _fallback() internal virtual { _beforeFallback(); _delegate(_implementation()); } fallback () external payable virtual { _fallback(); } receive () external payable virtual { _fallback(); } function _beforeFallback() internal virtual { } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract UpgradeableProxy is Proxy { constructor(address _logic, bytes memory _data) public payable { assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1)); _setImplementation(_logic); if(_data.length > 0) { Address.functionDelegateCall(_logic, _data); } } event Upgraded(address indexed implementation); bytes32 private constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; function _implementation() internal view virtual override returns (address impl) { bytes32 slot = _IMPLEMENTATION_SLOT; assembly { impl := sload(slot) } } function _upgradeTo(address newImplementation) internal virtual { _setImplementation(newImplementation); emit Upgraded(newImplementation); } function _setImplementation(address newImplementation) private { require(Address.isContract(newImplementation), "UpgradeableProxy: new implementation is not a contract"); bytes32 slot = _IMPLEMENTATION_SLOT; assembly { sstore(slot, newImplementation) } } } contract TransparentUpgradeableProxy is UpgradeableProxy { constructor(address _logic, address admin_, bytes memory _data) public payable UpgradeableProxy(_logic, _data) { assert(_ADMIN_SLOT == bytes32(uint256(keccak256("eip1967.proxy.admin")) - 1)); _setAdmin(admin_); } event AdminChanged(address previousAdmin, address newAdmin); bytes32 private constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; modifier ifAdmin() { if (msg.sender == _admin()) { _; } else { _fallback(); } } function admin() external ifAdmin returns (address admin_) { admin_ = _admin(); } function implementation() external ifAdmin returns (address implementation_) { implementation_ = _implementation(); } function changeAdmin(address newAdmin) external virtual ifAdmin { require(newAdmin != address(0), "TransparentUpgradeableProxy: new admin is the zero address"); emit AdminChanged(_admin(), newAdmin); _setAdmin(newAdmin); } function upgradeTo(address newImplementation) external virtual ifAdmin { _upgradeTo(newImplementation); } function upgradeToAndCall(address newImplementation, bytes calldata data) external payable virtual ifAdmin { _upgradeTo(newImplementation); Address.functionDelegateCall(newImplementation, data); } function _admin() internal view virtual returns (address adm) { bytes32 slot = _ADMIN_SLOT; assembly { adm := sload(slot) } } function _setAdmin(address newAdmin) private { bytes32 slot = _ADMIN_SLOT; assembly { sstore(slot, newAdmin) } } function _beforeFallback() internal virtual override { require(msg.sender != _admin(), "TransparentUpgradeableProxy: admin cannot fallback to proxy target"); super._beforeFallback(); } }
[{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"address","name":"admin_","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"admin_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"implementation_","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260405162000c8e38038062000c8e833981810160405260608110156200002957600080fd5b815160208301516040808501805191519395929483019291846401000000008211156200005557600080fd5b9083019060208201858111156200006b57600080fd5b82516401000000008111828201881017156200008657600080fd5b82525081516020918201929091019080838360005b83811015620000b55781810151838201526020016200009b565b50505050905090810190601f168015620000e35780820380516001836020036101000a031916815260200191505b5060405250849150829050620000f98262000137565b8051156200011a57620001188282620001ae60201b620003941760201c565b505b50620001239050565b6200012e82620001dd565b505050620003bf565b6200014d816200020160201b620003c01760201c565b6200018a5760405162461bcd60e51b815260040180806020018281038252603681526020018062000c326036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b6060620001d6838360405180606001604052806027815260200162000c0b6027913962000207565b9392505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b3b151590565b6060620002148462000201565b620002515760405162461bcd60e51b815260040180806020018281038252602681526020018062000c686026913960400191505060405180910390fd5b60006060856001600160a01b0316856040518082805190602001908083835b60208310620002915780518252601f19909201916020918201910162000270565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d8060008114620002f3576040519150601f19603f3d011682016040523d82523d6000602084013e620002f8565b606091505b5090925090506200030b82828662000315565b9695505050505050565b6060831562000326575081620001d6565b825115620003375782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200038357818101518382015260200162000369565b50505050905090810190601f168015620003b15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b61083c80620003cf6000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146101285780638f28397014610159578063f851a4401461018c5761006d565b80633659cfe6146100755780634f1ef286146100a85761006d565b3661006d5761006b6101a1565b005b61006b6101a1565b34801561008157600080fd5b5061006b6004803603602081101561009857600080fd5b50356001600160a01b03166101bb565b61006b600480360360408110156100be57600080fd5b6001600160a01b0382351691908101906040810160208201356401000000008111156100e957600080fd5b8201836020820111156100fb57600080fd5b8035906020019184600183028401116401000000008311171561011d57600080fd5b5090925090506101f5565b34801561013457600080fd5b5061013d610272565b604080516001600160a01b039092168252519081900360200190f35b34801561016557600080fd5b5061006b6004803603602081101561017c57600080fd5b50356001600160a01b03166102af565b34801561019857600080fd5b5061013d610369565b6101a96103c6565b6101b96101b4610426565b61044b565b565b6101c361046f565b6001600160a01b0316336001600160a01b031614156101ea576101e581610494565b6101f2565b6101f26101a1565b50565b6101fd61046f565b6001600160a01b0316336001600160a01b031614156102655761021f83610494565b61025f8383838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061039492505050565b5061026d565b61026d6101a1565b505050565b600061027c61046f565b6001600160a01b0316336001600160a01b031614156102a45761029d610426565b90506102ac565b6102ac6101a1565b90565b6102b761046f565b6001600160a01b0316336001600160a01b031614156101ea576001600160a01b0381166103155760405162461bcd60e51b815260040180806020018281038252603a815260200180610708603a913960400191505060405180910390fd5b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f61033e61046f565b604080516001600160a01b03928316815291841660208301528051918290030190a16101e5816104d4565b600061037361046f565b6001600160a01b0316336001600160a01b031614156102a45761029d61046f565b60606103b98383604051806060016040528060278152602001610742602791396104f8565b9392505050565b3b151590565b6103ce61046f565b6001600160a01b0316336001600160a01b0316141561041e5760405162461bcd60e51b81526004018080602001828103825260428152602001806107c56042913960600191505060405180910390fd5b6101b96101b9565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b3660008037600080366000845af43d6000803e80801561046a573d6000f35b3d6000fd5b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b61049d816105fb565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6060610503846103c0565b61053e5760405162461bcd60e51b815260040180806020018281038252602681526020018061079f6026913960400191505060405180910390fd5b60006060856001600160a01b0316856040518082805190602001908083835b6020831061057c5780518252601f19909201916020918201910161055d565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855af49150503d80600081146105dc576040519150601f19603f3d011682016040523d82523d6000602084013e6105e1565b606091505b50915091506105f1828286610663565b9695505050505050565b610604816103c0565b61063f5760405162461bcd60e51b81526004018080602001828103825260368152602001806107696036913960400191505060405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b606083156106725750816103b9565b8251156106825782518084602001fd5b8160405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156106cc5781810151838201526020016106b4565b50505050905090810190601f1680156106f95780820380516001836020036101000a031916815260200191505b509250505060405180910390fdfe5472616e73706172656e745570677261646561626c6550726f78793a206e65772061646d696e20697320746865207a65726f2061646472657373416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e74726163745472616e73706172656e745570677261646561626c6550726f78793a2061646d696e2063616e6e6f742066616c6c6261636b20746f2070726f787920746172676574a26469706673582212208abef82df4ccbbe5116d43e18645757954680a0f3e3b17a5ca661b652c75599664736f6c63430007040033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645570677261646561626c6550726f78793a206e657720696d706c656d656e746174696f6e206973206e6f74206120636f6e7472616374416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6e7472616374000000000000000000000000592c6a6419fb86bad15926c840a9f9306f69f59000000000000000000000000093a9182883c1019e1dbebb5d40c140e7680cd15100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000
Deployed ByteCode Sourcemap
5845:2139:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;957:11;:9;:11::i;:::-;5845:2139;;877:11;:9;:11::i;7031:119::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7031:119:0;-1:-1:-1;;;;;7031:119:0;;:::i;7164:219::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7164:219:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7164:219:0;;-1:-1:-1;7164:219:0;-1:-1:-1;7164:219:0;:::i;6618:131::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;6618:131:0;;;;;;;;;;;;;;6763:254;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6763:254:0;-1:-1:-1;;;;;6763:254:0;;:::i;6509:95::-;;;;;;;;;;;;;:::i;702:113::-;751:17;:15;:17::i;:::-;779:28;789:17;:15;:17::i;:::-;779:9;:28::i;:::-;702:113::o;7031:119::-;6406:8;:6;:8::i;:::-;-1:-1:-1;;;;;6392:22:0;:10;-1:-1:-1;;;;;6392:22:0;;6388:100;;;7113:29:::1;7124:17;7113:10;:29::i;:::-;6388:100:::0;;;6465:11;:9;:11::i;:::-;7031:119;:::o;7164:219::-;6406:8;:6;:8::i;:::-;-1:-1:-1;;;;;6392:22:0;:10;-1:-1:-1;;;;;6392:22:0;;6388:100;;;7282:29:::1;7293:17;7282:10;:29::i;:::-;7322:53;7351:17;7370:4;;7322:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;7322:28:0::1;::::0;-1:-1:-1;;;7322:53:0:i:1;:::-;;6388:100:::0;;;6465:11;:9;:11::i;:::-;7164:219;;;:::o;6618:131::-;6670:23;6406:8;:6;:8::i;:::-;-1:-1:-1;;;;;6392:22:0;:10;-1:-1:-1;;;;;6392:22:0;;6388:100;;;6724:17:::1;:15;:17::i;:::-;6706:35;;6388:100:::0;;;6465:11;:9;:11::i;:::-;6618:131;:::o;6763:254::-;6406:8;:6;:8::i;:::-;-1:-1:-1;;;;;6392:22:0;:10;-1:-1:-1;;;;;6392:22:0;;6388:100;;;-1:-1:-1;;;;;6846:22:0;::::1;6838:93;;;;-1:-1:-1::0;;;6838:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6947:32;6960:8;:6;:8::i;:::-;6947:32;::::0;;-1:-1:-1;;;;;6947:32:0;;::::1;::::0;;;;::::1;;::::0;::::1;::::0;;;;;;;;;::::1;6990:19;7000:8;6990:9;:19::i;6509:95::-:0;6552:14;6406:8;:6;:8::i;:::-;-1:-1:-1;;;;;6392:22:0;:10;-1:-1:-1;;;;;6392:22:0;;6388:100;;;6588:8:::1;:6;:8::i;3380:200::-:0;3463:12;3495:77;3516:6;3524:4;3495:77;;;;;;;;;;;;;;;;;:20;:77::i;:::-;3488:84;3380:200;-1:-1:-1;;;3380:200:0:o;1078:216::-;1239:20;1278:8;;;1078:216::o;7774:207::-;7860:8;:6;:8::i;:::-;-1:-1:-1;;;;;7846:22:0;:10;-1:-1:-1;;;;;7846:22:0;;;7838:101;;;;-1:-1:-1;;;7838:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7950:23;:21;:23::i;5116:209::-;5035:66;5296:11;;5273:45::o;74:533::-;240:14;237:1;234;221:34;371:1;368;352:14;349:1;333:14;326:5;313:60;424:16;421:1;418;403:38;464:6;498:38;;;;570:16;567:1;560:27;498:38;517:16;514:1;507:27;7397:180;6277:66;7548:11;;7526:44::o;5339:163::-;5414:37;5433:17;5414:18;:37::i;:::-;5467:27;;-1:-1:-1;;;;;5467:27:0;;;;;;;;5339:163;:::o;7591:169::-;6277:66;7720:22;7705:48::o;3594:373::-;3705:12;3738:18;3749:6;3738:10;:18::i;:::-;3730:69;;;;-1:-1:-1;;;3730:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3823:12;3837:23;3864:6;-1:-1:-1;;;;;3864:19:0;3884:4;3864:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3864:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3822:67;;;;3907:52;3925:7;3934:10;3946:12;3907:17;:52::i;:::-;3900:59;3594:373;-1:-1:-1;;;;;;3594:373:0:o;5516:322::-;5598:37;5617:17;5598:18;:37::i;:::-;5590:104;;;;-1:-1:-1;;;5590:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5035:66;5789:31;5774:57::o;3975:567::-;4090:12;4119:7;4115:420;;;-1:-1:-1;4150:10:0;4143:17;;4115:420;4211:17;;:21;4207:317;;4352:10;4346:17;4413:15;4400:10;4396:2;4392:19;4385:44;4300:148;4495:12;4488:20;;-1:-1:-1;;;4488:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Metadata Hash
8abef82df4ccbbe5116d43e18645757954680a0f3e3b17a5ca661b652c755996
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.