Token Testnet Solidly
Overview ERC20
Price
$0.00 @ 0.000000 ETH
Fully Diluted Market Cap
Total Supply:
82,360,527.604858 fakeSOLID
Holders:
368 addresses
Contract:
Decimals:
18
Balance
296.192335945924804013 fakeSOLIDValue
$0.00
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SolidlyProxy
Compiler Version
v0.8.11+commit.d7f03943
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BUSL pragma solidity 0.8.11; /** * @title Solidly+ governance killable proxy * @author Solidly+ * @notice EIP-1967 upgradeable proxy with the ability to kill governance and render the contract immutable */ contract SolidlyProxy { bytes32 constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; // keccak256('eip1967.proxy.implementation'), actually used for interface so etherscan picks up the interface bytes32 constant LOGIC_SLOT = 0x5942be825425c77e56e4bce97986794ab0f100954e40fc1390ae0e003710a3ab; // keccak256('LOGIC') - 1, actual logic implementation bytes32 constant GOVERNANCE_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; // keccak256('eip1967.proxy.admin') bytes32 constant INITIALIZED_SLOT = 0x834ce84547018237034401a09067277cdcbe7bbf7d7d30f6b382b0a102b7b4a3; // keccak256('eip1967.proxy.initialized') /** * @notice Reverts if msg.sender is not governance */ modifier onlyGovernance() { require(msg.sender == governanceAddress(), "Only governance"); _; } /** * @notice Reverts if contract is already initialized * @dev U4sed by implementations to ensure initialize() is only called once */ modifier notInitialized() { bool initialized; assembly { initialized := sload(INITIALIZED_SLOT) if eq(initialized, 1) { revert(0, 0) } sstore(INITIALIZED_SLOT, 1) } _; } /** * @notice Sets up deployer as a proxy governance */ constructor() { address _governanceAddress = msg.sender; assembly { 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() public view returns (bool) { return governanceAddress() == address(0); } /** * @notice Kill governance, making this contract immutable * @dev Only governance can kil governance */ function killGovernance() external onlyGovernance { updateGovernanceAddress(address(0)); } /** * @notice Update implementation address * @param _interfaceAddress Address of the new interface * @dev Only governance can update implementation */ function updateInterfaceAddress(address _interfaceAddress) external onlyGovernance { assembly { sstore(IMPLEMENTATION_SLOT, _interfaceAddress) } } /** * @notice Actually updates interface, kept for etherscan pattern recognition * @param _implementationAddress Address of the new implementation * @dev Only governance can update implementation */ function updateImplementationAddress(address _implementationAddress) external onlyGovernance { assembly { sstore(IMPLEMENTATION_SLOT, _implementationAddress) } } /** * @notice Update implementation address * @param _logicAddress Address of the new implementation * @dev Only governance can update implementation */ function updateLogicAddress(address _logicAddress) external onlyGovernance { assembly { sstore(LOGIC_SLOT, _logicAddress) } } /** * @notice Update governance address * @param _governanceAddress New governance address * @dev Only governance can update governance */ function updateGovernanceAddress(address _governanceAddress) public onlyGovernance { assembly { sstore(GOVERNANCE_SLOT, _governanceAddress) } } /** * @notice Fetch the current implementation address * @return _implementationAddress Returns the current implementation address */ function implementationAddress() public view returns (address _implementationAddress) { assembly { _implementationAddress := sload(IMPLEMENTATION_SLOT) } } /** * @notice Fetch the current implementation address * @return _interfaceAddress Returns the current implementation address */ function interfaceAddress() public view virtual returns (address _interfaceAddress) { assembly { _interfaceAddress := sload(IMPLEMENTATION_SLOT) } } /** * @notice Fetch the current implementation address * @return _logicAddress Returns the current implementation address */ function logicAddress() public view virtual returns (address _logicAddress) { assembly { _logicAddress := sload(LOGIC_SLOT) } } /** * @notice Fetch current governance address * @return _governanceAddress Returns current governance address */ function governanceAddress() public view virtual returns (address _governanceAddress) { assembly { _governanceAddress := sload(GOVERNANCE_SLOT) } } /** * @notice Fallback function that delegatecalls the subimplementation instead of what's in the IMPLEMENTATION_SLOT */ function _delegateCallSubimplmentation() internal virtual { assembly { let contractLogic := sload(LOGIC_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) } } } /** * @notice Delegatecall fallback proxy */ fallback() external payable virtual { _delegateCallSubimplmentation(); } receive() external payable { revert(); } }
{ "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "bytecodeHash": "none" }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"stateMutability":"payable","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":[],"name":"interfaceAddress","outputs":[{"internalType":"address","name":"_interfaceAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"killGovernance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"logicAddress","outputs":[{"internalType":"address","name":"_logicAddress","type":"address"}],"stateMutability":"view","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"},{"inputs":[{"internalType":"address","name":"_interfaceAddress","type":"address"}],"name":"updateInterfaceAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_logicAddress","type":"address"}],"name":"updateLogicAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b50337fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035561044c806100436000396000f3fe6080604052600436106100955760003560e01c8063b56fbb9711610059578063b56fbb9714610186578063b90d8930146101a6578063b97a231914610152578063cf6126ed146101c6578063eb5ee83a146101c65761009f565b8063179781c4146100a9578063654ea5e7146100d3578063795053d3146100e85780639c1fcc4c1461011e578063aa8a6754146101525761009f565b3661009f57600080fd5b6100a76101e6565b005b3480156100b557600080fd5b506100be61022f565b60405190151581526020015b60405180910390f35b3480156100df57600080fd5b506100a7610257565b3480156100f457600080fd5b50600080516020610420833981519152545b6040516001600160a01b0390911681526020016100ca565b34801561012a57600080fd5b507f5942be825425c77e56e4bce97986794ab0f100954e40fc1390ae0e003710a3ab54610106565b34801561015e57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54610106565b34801561019257600080fd5b506100a76101a13660046103c6565b6102ac565b3480156101b257600080fd5b506100a76101c13660046103c6565b610310565b3480156101d257600080fd5b506100a76101e13660046103c6565b610362565b7f5942be825425c77e56e4bce97986794ab0f100954e40fc1390ae0e003710a3ab543660008037600080366000845af490503d806000803e81801561022a57816000f35b816000fd5b6000806102486000805160206104208339815191525490565b6001600160a01b031614905090565b600080516020610420833981519152546001600160a01b0316336001600160a01b0316146102a05760405162461bcd60e51b8152600401610297906103f6565b60405180910390fd5b6102aa6000610310565b565b600080516020610420833981519152546001600160a01b0316336001600160a01b0316146102ec5760405162461bcd60e51b8152600401610297906103f6565b7f5942be825425c77e56e4bce97986794ab0f100954e40fc1390ae0e003710a3ab55565b600080516020610420833981519152546001600160a01b0316336001600160a01b0316146103505760405162461bcd60e51b8152600401610297906103f6565b60008051602061042083398151915255565b600080516020610420833981519152546001600160a01b0316336001600160a01b0316146103a25760405162461bcd60e51b8152600401610297906103f6565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b6000602082840312156103d857600080fd5b81356001600160a01b03811681146103ef57600080fd5b9392505050565b6020808252600f908201526e4f6e6c7920676f7665726e616e636560881b60408201526060019056feb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a164736f6c634300080b000a
Deployed Bytecode
0x6080604052600436106100955760003560e01c8063b56fbb9711610059578063b56fbb9714610186578063b90d8930146101a6578063b97a231914610152578063cf6126ed146101c6578063eb5ee83a146101c65761009f565b8063179781c4146100a9578063654ea5e7146100d3578063795053d3146100e85780639c1fcc4c1461011e578063aa8a6754146101525761009f565b3661009f57600080fd5b6100a76101e6565b005b3480156100b557600080fd5b506100be61022f565b60405190151581526020015b60405180910390f35b3480156100df57600080fd5b506100a7610257565b3480156100f457600080fd5b50600080516020610420833981519152545b6040516001600160a01b0390911681526020016100ca565b34801561012a57600080fd5b507f5942be825425c77e56e4bce97986794ab0f100954e40fc1390ae0e003710a3ab54610106565b34801561015e57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc54610106565b34801561019257600080fd5b506100a76101a13660046103c6565b6102ac565b3480156101b257600080fd5b506100a76101c13660046103c6565b610310565b3480156101d257600080fd5b506100a76101e13660046103c6565b610362565b7f5942be825425c77e56e4bce97986794ab0f100954e40fc1390ae0e003710a3ab543660008037600080366000845af490503d806000803e81801561022a57816000f35b816000fd5b6000806102486000805160206104208339815191525490565b6001600160a01b031614905090565b600080516020610420833981519152546001600160a01b0316336001600160a01b0316146102a05760405162461bcd60e51b8152600401610297906103f6565b60405180910390fd5b6102aa6000610310565b565b600080516020610420833981519152546001600160a01b0316336001600160a01b0316146102ec5760405162461bcd60e51b8152600401610297906103f6565b7f5942be825425c77e56e4bce97986794ab0f100954e40fc1390ae0e003710a3ab55565b600080516020610420833981519152546001600160a01b0316336001600160a01b0316146103505760405162461bcd60e51b8152600401610297906103f6565b60008051602061042083398151915255565b600080516020610420833981519152546001600160a01b0316336001600160a01b0316146103a25760405162461bcd60e51b8152600401610297906103f6565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b6000602082840312156103d857600080fd5b81356001600160a01b03811681146103ef57600080fd5b9392505050565b6020808252600f908201526e4f6e6c7920676f7665726e616e636560881b60408201526060019056feb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103a164736f6c634300080b000a