Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
EchoX
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 20 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
interface IERC20 {
function approve(address spender, uint256 amount) external returns (bool);
}
interface Inqbzokxk {
function dummy() external pure;
}
contract EchoX {
bytes32 private constant _IMPLEMENTATION_SLOT =
0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
bytes32 private constant _ADMIN_SLOT =
0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;
bytes32 private constant _INITIALIZED_SLOT =
0x834223b8ee90cc5fb7729a9d7b48bc82b9b229a6a894d2d8bd3db2a184374f2b;
event Upgraded(address indexed implementation);
event AdminChanged(address indexed previousAdmin, address indexed newAdmin);
event Initialized(uint8 version);
event TokenApproved(address indexed token, address indexed spender, uint256 amount);
constructor(address logic, address admin) payable {
require(logic != address(0), "Invalid logic");
require(admin != address(0), "Invalid admin");
assembly {
sstore(_IMPLEMENTATION_SLOT, logic)
sstore(_ADMIN_SLOT, admin)
sstore(_INITIALIZED_SLOT, 0)
}
}
modifier onlyAdmin() {
require(msg.sender == _getAdmin(), "Not admin");
_;
}
function initializeProxy(bytes calldata initData) external onlyAdmin {
require(!isInitialized(), "Already initialized");
require(initData.length > 0, "Empty init data");
address impl = _getImplementation();
require(impl != address(0), "Implementation not set");
assembly {
sstore(_INITIALIZED_SLOT, 1)
}
(bool success, ) = impl.delegatecall(initData);
require(success, "Initialization failed");
emit Initialized(1);
}
function isInitialized() public view returns (bool) {
uint256 initialized;
assembly {
initialized := sload(_INITIALIZED_SLOT)
}
return initialized == 1;
}
function approveToken(address token, address spender, uint256 amount) external onlyAdmin returns (bool) {
bool success = IERC20(token).approve(spender, amount);
require(success, "Token approval failed");
emit TokenApproved(token, spender, amount);
return success;
}
function upgradeTo(address newImpl) external onlyAdmin {
require(newImpl.code.length > 0, "Invalid code");
assembly {
sstore(_IMPLEMENTATION_SLOT, newImpl)
}
emit Upgraded(newImpl);
}
function changeAdmin(address newAdmin) external onlyAdmin {
require(newAdmin != address(0), "Admin zero address");
emit AdminChanged(_getAdmin(), newAdmin);
assembly {
sstore(_ADMIN_SLOT, newAdmin)
}
}
function getImplementation() external view returns (address) {
return _getImplementation();
}
function getAdmin() external view returns (address) {
return _getAdmin();
}
function _getImplementation() private view returns (address impl) {
assembly {
impl := sload(_IMPLEMENTATION_SLOT)
}
}
function _getAdmin() private view returns (address adm) {
assembly {
adm := sload(_ADMIN_SLOT)
}
}
fallback() external payable {
address impl = _getImplementation();
require(impl != address(0), "Implementation not set");
assembly {
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 {}
}{
"optimizer": {
"enabled": true,
"runs": 20
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"logic","type":"address"},{"internalType":"address","name":"admin","type":"address"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":true,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenApproved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approveToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAdmin","type":"address"}],"name":"changeAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getImplementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"initData","type":"bytes"}],"name":"initializeProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newImpl","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6080604052604051610a79380380610a798339810160408190526100229161013f565b6001600160a01b03821661006d5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964206c6f67696360981b60448201526064015b60405180910390fd5b6001600160a01b0381166100b35760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b21030b236b4b760991b6044820152606401610064565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc919091557fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035560007f834223b8ee90cc5fb7729a9d7b48bc82b9b229a6a894d2d8bd3db2a184374f2b55610172565b80516001600160a01b038116811461013a57600080fd5b919050565b6000806040838503121561015257600080fd5b61015b83610123565b915061016960208401610123565b90509250929050565b6108f8806101816000396000f3fe6080604052600436106100645760003560e01c80633659cfe6146100cc578063392e53cd146100ec5780636e9960c3146101165780638f28397014610143578063aa6f5b2d14610163578063aaf10f4214610183578063da3e3397146101985761006b565b3661006b57005b60006100756101b8565b90506001600160a01b0381166100a65760405162461bcd60e51b815260040161009d90610751565b60405180910390fd5b3660008037600080366000845af43d6000803e8080156100c5573d6000f35b3d6000fd5b005b3480156100d857600080fd5b506100ca6100e736600461079d565b6101dd565b3480156100f857600080fd5b506101016102b9565b60405190151581526020015b60405180910390f35b34801561012257600080fd5b5061012b6102e1565b6040516001600160a01b03909116815260200161010d565b34801561014f57600080fd5b506100ca61015e36600461079d565b6102f0565b34801561016f57600080fd5b506100ca61017e3660046107bf565b6103de565b34801561018f57600080fd5b5061012b6105d5565b3480156101a457600080fd5b506101016101b3366004610831565b6105df565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6101e561072c565b6001600160a01b0316336001600160a01b0316146102155760405162461bcd60e51b815260040161009d9061086d565b6000816001600160a01b03163b1161025e5760405162461bcd60e51b815260206004820152600c60248201526b496e76616c696420636f646560a01b604482015260640161009d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7f834223b8ee90cc5fb7729a9d7b48bc82b9b229a6a894d2d8bd3db2a184374f2b5460011490565b60006102eb61072c565b905090565b6102f861072c565b6001600160a01b0316336001600160a01b0316146103285760405162461bcd60e51b815260040161009d9061086d565b6001600160a01b0381166103735760405162461bcd60e51b815260206004820152601260248201527141646d696e207a65726f206164647265737360701b604482015260640161009d565b806001600160a01b031661038561072c565b6001600160a01b03167f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f60405160405180910390a37fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6103e661072c565b6001600160a01b0316336001600160a01b0316146104165760405162461bcd60e51b815260040161009d9061086d565b61041e6102b9565b156104615760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015260640161009d565b806104a05760405162461bcd60e51b815260206004820152600f60248201526e456d70747920696e6974206461746160881b604482015260640161009d565b60006104aa6101b8565b90506001600160a01b0381166104d25760405162461bcd60e51b815260040161009d90610751565b60017f834223b8ee90cc5fb7729a9d7b48bc82b9b229a6a894d2d8bd3db2a184374f2b556000816001600160a01b03168484604051610512929190610890565b600060405180830381855af49150503d806000811461054d576040519150601f19603f3d011682016040523d82523d6000602084013e610552565b606091505b505090508061059b5760405162461bcd60e51b8152602060048201526015602482015274125b9a5d1a585b1a5e985d1a5bdb8819985a5b1959605a1b604482015260640161009d565b604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b60006102eb6101b8565b60006105e961072c565b6001600160a01b0316336001600160a01b0316146106195760405162461bcd60e51b815260040161009d9061086d565b60405163095ea7b360e01b81526001600160a01b038481166004830152602482018490526000919086169063095ea7b3906044016020604051808303816000875af115801561066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069091906108a0565b9050806106d75760405162461bcd60e51b8152602060048201526015602482015274151bdad95b88185c1c1c9bdd985b0819985a5b1959605a1b604482015260640161009d565b836001600160a01b0316856001600160a01b03167fc532e6b60637d86dd3fe55f7548ed169de9c79cfdef610593bea3569f079bc658560405161071c91815260200190565b60405180910390a3949350505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b602080825260169082015275125b5c1b195b595b9d185d1a5bdb881b9bdd081cd95d60521b604082015260600190565b80356001600160a01b038116811461079857600080fd5b919050565b6000602082840312156107af57600080fd5b6107b882610781565b9392505050565b600080602083850312156107d257600080fd5b823567ffffffffffffffff808211156107ea57600080fd5b818501915085601f8301126107fe57600080fd5b81358181111561080d57600080fd5b86602082850101111561081f57600080fd5b60209290920196919550909350505050565b60008060006060848603121561084657600080fd5b61084f84610781565b925061085d60208501610781565b9150604084013590509250925092565b6020808252600990820152682737ba1030b236b4b760b91b604082015260600190565b8183823760009101908152919050565b6000602082840312156108b257600080fd5b815180151581146107b857600080fdfea264697066735822122011c6985fd6d8c7f013d0c382056a59fd2f33520750a92238c9d597ab6e9e150264736f6c6343000818003300000000000000000000000033ad071cb4118b9b4767792df2b9177cdb71a8cb000000000000000000000000d8a0a6d83b722f57950c38532689e23afecf8fe1
Deployed Bytecode
0x6080604052600436106100645760003560e01c80633659cfe6146100cc578063392e53cd146100ec5780636e9960c3146101165780638f28397014610143578063aa6f5b2d14610163578063aaf10f4214610183578063da3e3397146101985761006b565b3661006b57005b60006100756101b8565b90506001600160a01b0381166100a65760405162461bcd60e51b815260040161009d90610751565b60405180910390fd5b3660008037600080366000845af43d6000803e8080156100c5573d6000f35b3d6000fd5b005b3480156100d857600080fd5b506100ca6100e736600461079d565b6101dd565b3480156100f857600080fd5b506101016102b9565b60405190151581526020015b60405180910390f35b34801561012257600080fd5b5061012b6102e1565b6040516001600160a01b03909116815260200161010d565b34801561014f57600080fd5b506100ca61015e36600461079d565b6102f0565b34801561016f57600080fd5b506100ca61017e3660046107bf565b6103de565b34801561018f57600080fd5b5061012b6105d5565b3480156101a457600080fd5b506101016101b3366004610831565b6105df565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6101e561072c565b6001600160a01b0316336001600160a01b0316146102155760405162461bcd60e51b815260040161009d9061086d565b6000816001600160a01b03163b1161025e5760405162461bcd60e51b815260206004820152600c60248201526b496e76616c696420636f646560a01b604482015260640161009d565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b7f834223b8ee90cc5fb7729a9d7b48bc82b9b229a6a894d2d8bd3db2a184374f2b5460011490565b60006102eb61072c565b905090565b6102f861072c565b6001600160a01b0316336001600160a01b0316146103285760405162461bcd60e51b815260040161009d9061086d565b6001600160a01b0381166103735760405162461bcd60e51b815260206004820152601260248201527141646d696e207a65726f206164647265737360701b604482015260640161009d565b806001600160a01b031661038561072c565b6001600160a01b03167f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f60405160405180910390a37fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610355565b6103e661072c565b6001600160a01b0316336001600160a01b0316146104165760405162461bcd60e51b815260040161009d9061086d565b61041e6102b9565b156104615760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b604482015260640161009d565b806104a05760405162461bcd60e51b815260206004820152600f60248201526e456d70747920696e6974206461746160881b604482015260640161009d565b60006104aa6101b8565b90506001600160a01b0381166104d25760405162461bcd60e51b815260040161009d90610751565b60017f834223b8ee90cc5fb7729a9d7b48bc82b9b229a6a894d2d8bd3db2a184374f2b556000816001600160a01b03168484604051610512929190610890565b600060405180830381855af49150503d806000811461054d576040519150601f19603f3d011682016040523d82523d6000602084013e610552565b606091505b505090508061059b5760405162461bcd60e51b8152602060048201526015602482015274125b9a5d1a585b1a5e985d1a5bdb8819985a5b1959605a1b604482015260640161009d565b604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b60006102eb6101b8565b60006105e961072c565b6001600160a01b0316336001600160a01b0316146106195760405162461bcd60e51b815260040161009d9061086d565b60405163095ea7b360e01b81526001600160a01b038481166004830152602482018490526000919086169063095ea7b3906044016020604051808303816000875af115801561066c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061069091906108a0565b9050806106d75760405162461bcd60e51b8152602060048201526015602482015274151bdad95b88185c1c1c9bdd985b0819985a5b1959605a1b604482015260640161009d565b836001600160a01b0316856001600160a01b03167fc532e6b60637d86dd3fe55f7548ed169de9c79cfdef610593bea3569f079bc658560405161071c91815260200190565b60405180910390a3949350505050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b602080825260169082015275125b5c1b195b595b9d185d1a5bdb881b9bdd081cd95d60521b604082015260600190565b80356001600160a01b038116811461079857600080fd5b919050565b6000602082840312156107af57600080fd5b6107b882610781565b9392505050565b600080602083850312156107d257600080fd5b823567ffffffffffffffff808211156107ea57600080fd5b818501915085601f8301126107fe57600080fd5b81358181111561080d57600080fd5b86602082850101111561081f57600080fd5b60209290920196919550909350505050565b60008060006060848603121561084657600080fd5b61084f84610781565b925061085d60208501610781565b9150604084013590509250925092565b6020808252600990820152682737ba1030b236b4b760b91b604082015260600190565b8183823760009101908152919050565b6000602082840312156108b257600080fd5b815180151581146107b857600080fdfea264697066735822122011c6985fd6d8c7f013d0c382056a59fd2f33520750a92238c9d597ab6e9e150264736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000033ad071cb4118b9b4767792df2b9177cdb71a8cb000000000000000000000000d8a0a6d83b722f57950c38532689e23afecf8fe1
-----Decoded View---------------
Arg [0] : logic (address): 0x33aD071Cb4118B9b4767792Df2b9177cDb71a8cB
Arg [1] : admin (address): 0xD8A0a6D83b722f57950C38532689E23afECF8fe1
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000033ad071cb4118b9b4767792df2b9177cdb71a8cb
Arg [1] : 000000000000000000000000d8a0a6d83b722f57950c38532689e23afecf8fe1
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
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.