Overview
FTM Balance
0 FTM
FTM Value
$0.00More Info
Private Name Tags
ContractCreator:
Sponsored
Latest 1 internal transaction
Parent Txn Hash | Block | From | To | Value | ||
---|---|---|---|---|---|---|
31954650 | 762 days ago | Contract Creation | 0 FTM |
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x311a4926...65BefC4E6 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
OxDAOProxy
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-02-25 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.11; /** * @title 0xDAO governance killable proxy * @author 0xDAO * @notice EIP-1967 upgradeable proxy with the ability to kill governance and render the contract immutable */ contract OxDAOProxy { bytes32 constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; // keccak256('eip1967.proxy.implementation') bytes32 constant GOVERNANCE_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; // keccak256('eip1967.proxy.admin') bytes32 constant INITIALIZED_SLOT = 0x834ce84547018237034401a09067277cdcbe7bbf7d7d30f6b382b0a102b7b4a3; // keccak256('eip1967.proxy.initialized') /** * @notice Initialize governance (this can only be done once) * @param _governanceAddress New governance address */ function initialize(address _governanceAddress) public { bool initialized; assembly { initialized := sload(INITIALIZED_SLOT) if eq(initialized, 1) { revert(0, 0) } sstore(INITIALIZED_SLOT, 1) sstore(GOVERNANCE_SLOT, _governanceAddress) } } /** * @notice Detect whether or not governance is killed * @return Return true if governance is killed, false if not * @dev If governance is killed this contract becomes immutable */ function governanceIsKilled() external view returns (bool) { return governanceAddress() == address(0); } /** * @notice Kill governance, making this contract immutable * @dev Only governance can kil governance */ function killGovernance() external { require(msg.sender == governanceAddress(), "Only governance"); updateGovernanceAddress(address(0)); } /** * @notice Update implementation address * @param _implementationAddress Address of the new implementation * @dev Only governance can update implementation */ function updateImplementationAddress(address _implementationAddress) external { require(msg.sender == governanceAddress(), "Only governance"); assembly { sstore(IMPLEMENTATION_SLOT, _implementationAddress) } } /** * @notice Update governance address * @param _governanceAddress New governance address * @dev Only governance can update governance */ function updateGovernanceAddress(address _governanceAddress) public { require(msg.sender == governanceAddress(), "Only governance"); assembly { sstore(GOVERNANCE_SLOT, _governanceAddress) } } /** * @notice Fetch the current implementation address * @return _implementationAddress Returns the current implementation address */ function implementationAddress() external view returns (address _implementationAddress) { assembly { _implementationAddress := sload(IMPLEMENTATION_SLOT) } } /** * @notice Fetch current governance address * @return _governanceAddress Returns current governance address */ function governanceAddress() public view returns (address _governanceAddress) { assembly { _governanceAddress := sload(GOVERNANCE_SLOT) } } /** * @notice Delegatecall fallback proxy */ fallback() external { assembly { let contractLogic := sload(IMPLEMENTATION_SLOT) calldatacopy(0x0, 0x0, calldatasize()) let success := delegatecall( gas(), contractLogic, 0x0, calldatasize(), 0, 0 ) let returnDataSize := returndatasize() returndatacopy(0, 0, returnDataSize) switch success case 0 { revert(0, returnDataSize) } default { return(0, returnDataSize) } } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"stateMutability":"nonpayable","type":"fallback"},{"inputs":[],"name":"governanceAddress","outputs":[{"internalType":"address","name":"_governanceAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governanceIsKilled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"implementationAddress","outputs":[{"internalType":"address","name":"_implementationAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_governanceAddress","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"killGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governanceAddress","type":"address"}],"name":"updateGovernanceAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_implementationAddress","type":"address"}],"name":"updateImplementationAddress","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100815760003560e01c8063b90d89301161005b578063b90d893014610111578063b97a23191461012d578063c4d66de81461014b578063eb5ee83a1461016757610082565b8063179781c4146100cb578063654ea5e7146100e9578063795053d3146100f357610082565b5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc543660008037600080366000845af43d806000803e81600081146100c657816000f35b816000fd5b6100d3610183565b6040516100e09190610463565b60405180910390f35b6100f16101c0565b005b6100fb610241565b60405161010891906104bf565b60405180910390f35b61012b6004803603810190610126919061050b565b61026a565b005b610135610305565b60405161014291906104bf565b60405180910390f35b6101656004803603810190610160919061050b565b61032e565b005b610181600480360381019061017c919061050b565b6103ad565b005b60008073ffffffffffffffffffffffffffffffffffffffff166101a4610241565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b6101c8610241565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022c90610595565b60405180910390fd5b61023f600061026a565b565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610354905090565b610272610241565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146102df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d690610595565b60405180910390fd5b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54905090565b60007f834ce84547018237034401a09067277cdcbe7bbf7d7d30f6b382b0a102b7b4a3549050600181141561036257600080fd5b60017f834ce84547018237034401a09067277cdcbe7bbf7d7d30f6b382b0a102b7b4a355817fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103555050565b6103b5610241565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041990610595565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5550565b60008115159050919050565b61045d81610448565b82525050565b60006020820190506104786000830184610454565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006104a98261047e565b9050919050565b6104b98161049e565b82525050565b60006020820190506104d460008301846104b0565b92915050565b600080fd5b6104e88161049e565b81146104f357600080fd5b50565b600081359050610505816104df565b92915050565b600060208284031215610521576105206104da565b5b600061052f848285016104f6565b91505092915050565b600082825260208201905092915050565b7f4f6e6c7920676f7665726e616e63650000000000000000000000000000000000600082015250565b600061057f600f83610538565b915061058a82610549565b602082019050919050565b600060208201905081810360008301526105ae81610572565b905091905056fea264697066735822122052fad13411bf962a04da522d48167983e0231ab87b3c7219ab3da0a7582f376664736f6c634300080b0033
Deployed Bytecode Sourcemap
240:4004:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3653:19;3647:26;3710:14;3705:3;3700;3687:38;3916:1;3896;3863:14;3841:3;3809:13;3785:5;3754:178;3968:16;4019:14;4016:1;4013;3998:36;4055:7;4081:1;4076:66;;;;4193:14;4190:1;4183:25;4076:66;4112:14;4109:1;4102:25;1463:118;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1719:161;;;:::i;:::-;;3294:207;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2523:236;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2924:225;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;890:353;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2079:268;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1463:118;1516:4;1571:1;1540:33;;:19;:17;:19::i;:::-;:33;;;1533:40;;1463:118;:::o;1719:161::-;1787:19;:17;:19::i;:::-;1773:33;;:10;:33;;;1765:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;1837:35;1869:1;1837:23;:35::i;:::-;1719:161::o;3294:207::-;3371:26;3467:15;3461:22;3439:44;;3294:207;:::o;2523:236::-;2624:19;:17;:19::i;:::-;2610:33;;:10;:33;;;2602:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;2722:18;2705:15;2698:43;2523:236;:::o;2924:225::-;3007:30;3111:19;3105:26;3079:52;;2924:225;:::o;890:353::-;956:16;1028;1022:23;1007:38;;1078:1;1065:11;1062:18;1059:68;;;1110:1;1107;1100:12;1059:68;1166:1;1148:16;1141:27;1206:18;1189:15;1182:43;992:244;890:353;:::o;2079:268::-;2204:19;:17;:19::i;:::-;2190:33;;:10;:33;;;2182:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;2306:22;2285:19;2278:51;2079:268;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:126::-;471:7;511:42;504:5;500:54;489:65;;434:126;;;:::o;566:96::-;603:7;632:24;650:5;632:24;:::i;:::-;621:35;;566:96;;;:::o;668:118::-;755:24;773:5;755:24;:::i;:::-;750:3;743:37;668:118;;:::o;792:222::-;885:4;923:2;912:9;908:18;900:26;;936:71;1004:1;993:9;989:17;980:6;936:71;:::i;:::-;792:222;;;;:::o;1101:117::-;1210:1;1207;1200:12;1347:122;1420:24;1438:5;1420:24;:::i;:::-;1413:5;1410:35;1400:63;;1459:1;1456;1449:12;1400:63;1347:122;:::o;1475:139::-;1521:5;1559:6;1546:20;1537:29;;1575:33;1602:5;1575:33;:::i;:::-;1475:139;;;;:::o;1620:329::-;1679:6;1728:2;1716:9;1707:7;1703:23;1699:32;1696:119;;;1734:79;;:::i;:::-;1696:119;1854:1;1879:53;1924:7;1915:6;1904:9;1900:22;1879:53;:::i;:::-;1869:63;;1825:117;1620:329;;;;:::o;1955:169::-;2039:11;2073:6;2068:3;2061:19;2113:4;2108:3;2104:14;2089:29;;1955:169;;;;:::o;2130:165::-;2270:17;2266:1;2258:6;2254:14;2247:41;2130:165;:::o;2301:366::-;2443:3;2464:67;2528:2;2523:3;2464:67;:::i;:::-;2457:74;;2540:93;2629:3;2540:93;:::i;:::-;2658:2;2653:3;2649:12;2642:19;;2301:366;;;:::o;2673:419::-;2839:4;2877:2;2866:9;2862:18;2854:26;;2926:9;2920:4;2916:20;2912:1;2901:9;2897:17;2890:47;2954:131;3080:4;2954:131;:::i;:::-;2946:139;;2673:419;;;:::o
Swarm Source
ipfs://52fad13411bf962a04da522d48167983e0231ab87b3c7219ab3da0a7582f3766
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.