Overview
ETH Balance
ETH Value
$0.00Latest 25 from a total of 4,424 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Deploy | 427962282 | 1 hr ago | IN | 0 ETH | 0.00000293 | ||||
| Deploy | 427958973 | 1 hr ago | IN | 0 ETH | 0.00000292 | ||||
| Deploy | 427953567 | 2 hrs ago | IN | 0 ETH | 0.00000292 | ||||
| Deploy | 427946043 | 2 hrs ago | IN | 0 ETH | 0.00000292 | ||||
| Deploy | 427934472 | 3 hrs ago | IN | 0 ETH | 0.00000292 | ||||
| Deploy | 427928700 | 3 hrs ago | IN | 0 ETH | 0.00000292 | ||||
| Deploy | 427923076 | 4 hrs ago | IN | 0 ETH | 0.00000295 | ||||
| Deploy | 427915945 | 4 hrs ago | IN | 0 ETH | 0.00000293 | ||||
| Deploy | 427910540 | 5 hrs ago | IN | 0 ETH | 0.00000292 | ||||
| Deploy | 427892482 | 6 hrs ago | IN | 0 ETH | 0.00000296 | ||||
| Deploy | 427818707 | 11 hrs ago | IN | 0 ETH | 0.00000293 | ||||
| Deploy | 427792554 | 13 hrs ago | IN | 0 ETH | 0.00000293 | ||||
| Deploy | 427789383 | 13 hrs ago | IN | 0 ETH | 0.00000294 | ||||
| Deploy | 427784599 | 13 hrs ago | IN | 0 ETH | 0.00000292 | ||||
| Deploy | 427729668 | 17 hrs ago | IN | 0 ETH | 0.00000308 | ||||
| Deploy | 427668121 | 21 hrs ago | IN | 0 ETH | 0.00000295 | ||||
| Deploy | 427636607 | 24 hrs ago | IN | 0 ETH | 0.00000293 | ||||
| Deploy | 427624831 | 24 hrs ago | IN | 0 ETH | 0.00000293 | ||||
| Deploy | 427621712 | 25 hrs ago | IN | 0 ETH | 0.00000295 | ||||
| Deploy | 427609302 | 26 hrs ago | IN | 0 ETH | 0.00000293 | ||||
| Deploy | 427597915 | 26 hrs ago | IN | 0 ETH | 0.00000293 | ||||
| Deploy | 427594825 | 27 hrs ago | IN | 0 ETH | 0.00000292 | ||||
| Deploy | 427591736 | 27 hrs ago | IN | 0 ETH | 0.00000293 | ||||
| Deploy | 427586197 | 27 hrs ago | IN | 0 ETH | 0.00000293 | ||||
| Deploy | 427572249 | 28 hrs ago | IN | 0 ETH | 0.00000292 |
Latest 25 internal transactions (View All)
Cross-Chain Transactions
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x59061b19...A827331aE The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BSD-3-Clause
pragma solidity ^0.8.20;
import {Create2} from "@openzeppelin/contracts/utils/Create2.sol";
import {Context} from "@openzeppelin/contracts/utils/Context.sol";
import {Storage} from "../storage/Storage.sol";
contract MinimalProxyFactory is Context {
address public info;
event MinimalProxyCreated(address minimalProxy);
error ProxyInitializationFailed();
error Forbidden();
constructor(address _info) {
info = _info;
}
function _getContractCreationCode(address logic) internal pure returns (bytes memory) {
bytes10 creation = 0x3d602d80600a3d3981f3;
bytes10 prefix = 0x363d3d373d3d3d363d73;
bytes20 targetBytes = bytes20(logic);
bytes15 suffix = 0x5af43d82803e903d91602b57fd5bf3;
return abi.encodePacked(creation, prefix, targetBytes, suffix);
}
/**
* @notice Calculates proxy contract address for salt.
* @param salt CREATE2 opcode salt.
* @param implementation Proxy implementation contract address.
* @return Proxy contract address.
*/
function computeAddress(bytes32 salt, address implementation) external view returns (address) {
return Create2.computeAddress(salt, keccak256(_getContractCreationCode(implementation)), address(this));
}
/**
* @notice Deploy and initialize minimal proxy contract for salt.
* @param salt CREATE2 opcode salt.
* @param implementation Proxy implementation contract address.
* @param data Initialize method data.
* @return Proxy contract address.
*/
function deploy(bytes32 salt, address implementation, bytes memory data) external returns (address) {
bool isCallAllowed = Storage(info).getBool(
keccak256(abi.encodePacked("EH:MinimalProxyFactory:Deployer:", _msgSender()))
);
if (!isCallAllowed) revert Forbidden();
address minimalProxy = Create2.deploy(0, salt, _getContractCreationCode(implementation));
if (data.length > 0) {
// solhint-disable-next-line avoid-low-level-calls
(bool success, ) = minimalProxy.call(data);
if (!success) revert ProxyInitializationFailed();
}
emit MinimalProxyCreated(minimalProxy);
return minimalProxy;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (utils/Create2.sol)
pragma solidity ^0.8.20;
/**
* @dev Helper to make usage of the `CREATE2` EVM opcode easier and safer.
* `CREATE2` can be used to compute in advance the address where a smart
* contract will be deployed, which allows for interesting new mechanisms known
* as 'counterfactual interactions'.
*
* See the https://eips.ethereum.org/EIPS/eip-1014#motivation[EIP] for more
* information.
*/
library Create2 {
/**
* @dev Not enough balance for performing a CREATE2 deploy.
*/
error Create2InsufficientBalance(uint256 balance, uint256 needed);
/**
* @dev There's no code to deploy.
*/
error Create2EmptyBytecode();
/**
* @dev The deployment failed.
*/
error Create2FailedDeployment();
/**
* @dev Deploys a contract using `CREATE2`. The address where the contract
* will be deployed can be known in advance via {computeAddress}.
*
* The bytecode for a contract can be obtained from Solidity with
* `type(contractName).creationCode`.
*
* Requirements:
*
* - `bytecode` must not be empty.
* - `salt` must have not been used for `bytecode` already.
* - the factory must have a balance of at least `amount`.
* - if `amount` is non-zero, `bytecode` must have a `payable` constructor.
*/
function deploy(uint256 amount, bytes32 salt, bytes memory bytecode) internal returns (address addr) {
if (address(this).balance < amount) {
revert Create2InsufficientBalance(address(this).balance, amount);
}
if (bytecode.length == 0) {
revert Create2EmptyBytecode();
}
/// @solidity memory-safe-assembly
assembly {
addr := create2(amount, add(bytecode, 0x20), mload(bytecode), salt)
}
if (addr == address(0)) {
revert Create2FailedDeployment();
}
}
/**
* @dev Returns the address where a contract will be stored if deployed via {deploy}. Any change in the
* `bytecodeHash` or `salt` will result in a new destination address.
*/
function computeAddress(bytes32 salt, bytes32 bytecodeHash) internal view returns (address) {
return computeAddress(salt, bytecodeHash, address(this));
}
/**
* @dev Returns the address where a contract will be stored if deployed via {deploy} from a contract located at
* `deployer`. If `deployer` is this contract's address, returns the same value as {computeAddress}.
*/
function computeAddress(bytes32 salt, bytes32 bytecodeHash, address deployer) internal pure returns (address addr) {
/// @solidity memory-safe-assembly
assembly {
let ptr := mload(0x40) // Get free memory pointer
// | | ↓ ptr ... ↓ ptr + 0x0B (start) ... ↓ ptr + 0x20 ... ↓ ptr + 0x40 ... |
// |-------------------|---------------------------------------------------------------------------|
// | bytecodeHash | CCCCCCCCCCCCC...CC |
// | salt | BBBBBBBBBBBBB...BB |
// | deployer | 000000...0000AAAAAAAAAAAAAAAAAAA...AA |
// | 0xFF | FF |
// |-------------------|---------------------------------------------------------------------------|
// | memory | 000000...00FFAAAAAAAAAAAAAAAAAAA...AABBBBBBBBBBBBB...BBCCCCCCCCCCCCC...CC |
// | keccak(start, 85) | ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ |
mstore(add(ptr, 0x40), bytecodeHash)
mstore(add(ptr, 0x20), salt)
mstore(ptr, deployer) // Right-aligned with 12 preceding garbage bytes
let start := add(ptr, 0x0b) // The hashed data starts at the final garbage byte which we will set to 0xff
mstore8(start, 0xff)
addr := keccak256(start, 85)
}
}
}// SPDX-License-Identifier: BSD-3-Clause
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/access/Ownable.sol";
contract Storage is Ownable {
/// @dev Bytes storage.
mapping(bytes32 => bytes) private _bytes;
/// @dev Bool storage.
mapping(bytes32 => bool) private _bool;
/// @dev Uint storage.
mapping(bytes32 => uint256) private _uint;
/// @dev Int storage.
mapping(bytes32 => int256) private _int;
/// @dev Address storage.
mapping(bytes32 => address) private _address;
/// @dev String storage.
mapping(bytes32 => string) private _string;
event Updated(bytes32 indexed key);
constructor() Ownable(_msgSender()) {}
/**
* @param key The key for the record
*/
function getBytes(bytes32 key) external view returns (bytes memory) {
return _bytes[key];
}
/**
* @param key The key for the record
*/
function getBool(bytes32 key) external view returns (bool) {
return _bool[key];
}
/**
* @param key The key for the record
*/
function getUint(bytes32 key) external view returns (uint256) {
return _uint[key];
}
/**
* @param key The key for the record
*/
function getInt(bytes32 key) external view returns (int256) {
return _int[key];
}
/**
* @param key The key for the record
*/
function getAddress(bytes32 key) external view returns (address) {
return _address[key];
}
/**
* @param key The key for the record
*/
function getString(bytes32 key) external view returns (string memory) {
return _string[key];
}
/**
* @param key The key for the record
* @param value The value to set.
*/
function setBytes(bytes32 key, bytes calldata value) external onlyOwner {
_bytes[key] = value;
emit Updated(key);
}
/**
* @param key The key for the record
* @param value The value to set.
*/
function setBool(bytes32 key, bool value) external onlyOwner {
_bool[key] = value;
emit Updated(key);
}
/**
* @param key The key for the record
* @param value The value to set.
*/
function setUint(bytes32 key, uint256 value) external onlyOwner {
_uint[key] = value;
emit Updated(key);
}
/**
* @param key The key for the record
* @param value The value to set.
*/
function setInt(bytes32 key, int256 value) external onlyOwner {
_int[key] = value;
emit Updated(key);
}
/**
* @param key The key for the record
* @param value The value to set.
*/
function setAddress(bytes32 key, address value) external onlyOwner {
_address[key] = value;
emit Updated(key);
}
/**
* @param key The key for the record
* @param value The value to set.
*/
function setString(bytes32 key, string calldata value) external onlyOwner {
_string[key] = value;
emit Updated(key);
}
/**
* @param key The key for the record
*/
function deleteBytes(bytes32 key) external onlyOwner {
delete _bytes[key];
emit Updated(key);
}
/**
* @param key The key for the record
*/
function deleteBool(bytes32 key) external onlyOwner {
delete _bool[key];
emit Updated(key);
}
/**
* @param key The key for the record
*/
function deleteUint(bytes32 key) external onlyOwner {
delete _uint[key];
emit Updated(key);
}
/**
* @param key The key for the record
*/
function deleteInt(bytes32 key) external onlyOwner {
delete _int[key];
emit Updated(key);
}
/**
* @param key The key for the record
*/
function deleteAddress(bytes32 key) external onlyOwner {
delete _address[key];
emit Updated(key);
}
/**
* @param key The key for the record
*/
function deleteString(bytes32 key) external onlyOwner {
delete _string[key];
emit Updated(key);
}
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_info","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"Create2EmptyBytecode","type":"error"},{"inputs":[],"name":"Create2FailedDeployment","type":"error"},{"inputs":[{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"Create2InsufficientBalance","type":"error"},{"inputs":[],"name":"Forbidden","type":"error"},{"inputs":[],"name":"ProxyInitializationFailed","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minimalProxy","type":"address"}],"name":"MinimalProxyCreated","type":"event"},{"inputs":[{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"address","name":"implementation","type":"address"}],"name":"computeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"address","name":"implementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"deploy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"info","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
0x608060405234801561001057600080fd5b506040516105f73803806105f783398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b610564806100936000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80632781212e146100465780632f1f618d14610075578063370158ea14610088575b600080fd5b6100596100543660046103e6565b61009b565b6040516001600160a01b03909116815260200160405180910390f35b6100596100833660046104b1565b61027a565b600054610059906001600160a01b031681565b6000805481906001600160a01b0316637ae1cfca336040516020016100fe91907f45483a4d696e696d616c50726f7879466163746f72793a4465706c6f7965723a815260609190911b6bffffffffffffffffffffffff1916602082015260340190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161013291815260200190565b602060405180830381865afa15801561014f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017391906104dd565b90508061019357604051631dd2188d60e31b815260040160405180910390fd5b60006101a96000876101a488610296565b610306565b845190915015610233576000816001600160a01b0316856040516101cd91906104ff565b6000604051808303816000865af19150503d806000811461020a576040519150601f19603f3d011682016040523d82523d6000602084013e61020f565b606091505b50509050806102315760405163f44a721360e01b815260040160405180910390fd5b505b6040516001600160a01b03821681527f16f1e151dcf4eb1663400df93379828c17dea844757ee03e3038178d0038c3a79060200160405180910390a19150505b9392505050565b60006102738361028984610296565b805190602001203061038a565b60408051693d602d80600a3d3981f360b01b602082015269363d3d373d3d3d363d7360b01b602a82015260609290921b6bffffffffffffffffffffffff191660348301526e5af43d82803e903d91602b57fd5bf360881b6048830152805160378184030181526057909201905290565b6000834710156103365760405163392efb2b60e21b81524760048201526024810185905260440160405180910390fd5b815160000361035857604051631328927760e21b815260040160405180910390fd5b8282516020840186f590506001600160a01b03811661027357604051633a0ba96160e11b815260040160405180910390fd5b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b80356001600160a01b03811681146103cb57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156103fb57600080fd5b8335925061040b602085016103b4565b9150604084013567ffffffffffffffff8082111561042857600080fd5b818601915086601f83011261043c57600080fd5b81358181111561044e5761044e6103d0565b604051601f8201601f19908116603f01168101908382118183101715610476576104766103d0565b8160405282815289602084870101111561048f57600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b600080604083850312156104c457600080fd5b823591506104d4602084016103b4565b90509250929050565b6000602082840312156104ef57600080fd5b8151801515811461027357600080fd5b6000825160005b818110156105205760208186018101518583015201610506565b50600092019182525091905056fea2646970667358221220de2eb7e440db4e7b74c7be57c80e149c8fc5fc0329a8db65c8baa79270b94f0064736f6c63430008180033000000000000000000000000c7c1943bccbc81b8de5b7f407c00b7805ea3ea0c
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100415760003560e01c80632781212e146100465780632f1f618d14610075578063370158ea14610088575b600080fd5b6100596100543660046103e6565b61009b565b6040516001600160a01b03909116815260200160405180910390f35b6100596100833660046104b1565b61027a565b600054610059906001600160a01b031681565b6000805481906001600160a01b0316637ae1cfca336040516020016100fe91907f45483a4d696e696d616c50726f7879466163746f72793a4465706c6f7965723a815260609190911b6bffffffffffffffffffffffff1916602082015260340190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161013291815260200190565b602060405180830381865afa15801561014f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061017391906104dd565b90508061019357604051631dd2188d60e31b815260040160405180910390fd5b60006101a96000876101a488610296565b610306565b845190915015610233576000816001600160a01b0316856040516101cd91906104ff565b6000604051808303816000865af19150503d806000811461020a576040519150601f19603f3d011682016040523d82523d6000602084013e61020f565b606091505b50509050806102315760405163f44a721360e01b815260040160405180910390fd5b505b6040516001600160a01b03821681527f16f1e151dcf4eb1663400df93379828c17dea844757ee03e3038178d0038c3a79060200160405180910390a19150505b9392505050565b60006102738361028984610296565b805190602001203061038a565b60408051693d602d80600a3d3981f360b01b602082015269363d3d373d3d3d363d7360b01b602a82015260609290921b6bffffffffffffffffffffffff191660348301526e5af43d82803e903d91602b57fd5bf360881b6048830152805160378184030181526057909201905290565b6000834710156103365760405163392efb2b60e21b81524760048201526024810185905260440160405180910390fd5b815160000361035857604051631328927760e21b815260040160405180910390fd5b8282516020840186f590506001600160a01b03811661027357604051633a0ba96160e11b815260040160405180910390fd5b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b80356001600160a01b03811681146103cb57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156103fb57600080fd5b8335925061040b602085016103b4565b9150604084013567ffffffffffffffff8082111561042857600080fd5b818601915086601f83011261043c57600080fd5b81358181111561044e5761044e6103d0565b604051601f8201601f19908116603f01168101908382118183101715610476576104766103d0565b8160405282815289602084870101111561048f57600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b600080604083850312156104c457600080fd5b823591506104d4602084016103b4565b90509250929050565b6000602082840312156104ef57600080fd5b8151801515811461027357600080fd5b6000825160005b818110156105205760208186018101518583015201610506565b50600092019182525091905056fea2646970667358221220de2eb7e440db4e7b74c7be57c80e149c8fc5fc0329a8db65c8baa79270b94f0064736f6c63430008180033
Net Worth in USD
Net Worth in ETH
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.