Latest 1 from a total of 1 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Set Operator Sta... | 446215 | 690 days ago | IN | 0 ETH | 0.00025544 |
Latest 25 internal transactions (View All)
Advanced mode:
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:
UsersCollectionFactory
Compiler Version
v0.8.21+commit.d9974bed
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
// Factory for Public Mintable User NFT Collection
pragma solidity 0.8.21;
import "./Ownable.sol";
import "./UserCollectionProxy.sol";
contract UsersCollectionFactory is Ownable{
mapping(address => bool) public factoryOperators;
constructor(){
factoryOperators[msg.sender] = true;
}
function deployProxyFor(
address _implAddress,
address _creator,
string memory name_,
string memory symbol_,
string memory _baseurl
) public returns(address proxy)
{
require(factoryOperators[msg.sender], "Only for operator");
proxy = address(new UserCollectionProxy(
_implAddress,
_creator,
name_,
symbol_,
_baseurl
));
}
///////////////////////////////////////////
///// Admin functions ////////////////
///////////////////////////////////////////
function setOperatorStatus(address _operator, bool _isValid) external onlyOwner {
factoryOperators[_operator] = _isValid;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @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.
*
* By default, the owner account will be the one that deploys the contract. 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 {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(msg.sender);
}
/**
* @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 {
require(owner() == msg.sender, "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing 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 {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_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
// Proxy for Public Mintable User NFT Collection
pragma solidity 0.8.21;
import "./Proxy.sol";
contract UserCollectionProxy is Proxy {
struct AddressSlot {
address value;
}
/**
* @dev Storage slot with the address of the current implementation.
* This is the keccak-256 hash of "eip1967.proxy.implementation" subtracted by 1, and is
* validated in the constructor.
*/
bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;
/**
* @dev Emitted when the implementation is upgraded.
*/
event Upgraded(address indexed implementation);
constructor(
address _implAddress,
address _creator,
string memory name_,
string memory symbol_,
string memory _baseurl
)
{
getAddressSlot(_IMPLEMENTATION_SLOT).value = _implAddress;
emit Upgraded(_implAddress);
(bool success, ) =
_implAddress.delegatecall(
abi.encodeWithSignature(
"initialize(address,string,string,string)"
, _creator, name_, symbol_, _baseurl
)
);
require(success, "Construction failed");
}
/**
* @dev Returns the current implementation address.
*/
function _implementation() internal view virtual override returns (address impl) {
return getAddressSlot(_IMPLEMENTATION_SLOT).value;
}
/**
* @dev Returns an `AddressSlot` with member `value` located at `slot`.
*/
function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {
/// @solidity memory-safe-assembly
assembly {
r.slot := slot
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (proxy/Proxy.sol)
pragma solidity ^0.8.0;
/**
* @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM
* instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to
* be specified by overriding the virtual {_implementation} function.
*
* Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a
* different contract through the {_delegate} function.
*
* The success and return data of the delegated call will be returned back to the caller of the proxy.
*/
abstract contract Proxy {
/**
* @dev Delegates the current call to `implementation`.
*
* This function does not return to its internal call site, it will return directly to the external caller.
*/
function _delegate(address implementation) internal virtual {
assembly {
// Copy msg.data. We take full control of memory in this inline assembly
// block because it will not return to Solidity code. We overwrite the
// Solidity scratch pad at memory position 0.
calldatacopy(0, 0, calldatasize())
// Call the implementation.
// out and outsize are 0 because we don't know the size yet.
let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)
// Copy the returned data.
returndatacopy(0, 0, returndatasize())
switch result
// delegatecall returns 0 on error.
case 0 {
revert(0, returndatasize())
}
default {
return(0, returndatasize())
}
}
}
/**
* @dev This is a virtual function that should be overridden so it returns the address to which the fallback function
* and {_fallback} should delegate.
*/
function _implementation() internal view virtual returns (address);
/**
* @dev Delegates the current call to the address returned by `_implementation()`.
*
* This function does not return to its internal call site, it will return directly to the external caller.
*/
function _fallback() internal virtual {
_beforeFallback();
_delegate(_implementation());
}
/**
* @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other
* function in the contract matches the call data.
*/
fallback() external payable virtual {
_fallback();
}
/**
* @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data
* is empty.
*/
receive() external payable virtual {
_fallback();
}
/**
* @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`
* call, or as part of the Solidity `fallback` or `receive` functions.
*
* If overridden should call `super._beforeFallback()`.
*/
function _beforeFallback() internal virtual {}
}{
"remappings": [
"@uniswap/=lib/",
"@openzeppelin/=lib/openzeppelin-contracts/",
"@Uopenzeppelin/=lib/openzeppelin-contracts-upgradeable/",
"@envelop-protocol-v1/=lib/envelop-protocol-v1/",
"@envelop-subscription/=lib/subscription/",
"ds-test/=lib/forge-std/lib/ds-test/src/",
"envelop-protocol-v1/=lib/envelop-protocol-v1/",
"erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"openzeppelin/=lib/openzeppelin-contracts-upgradeable/contracts/",
"subscription/=lib/subscription/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "paris",
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"_implAddress","type":"address"},{"internalType":"address","name":"_creator","type":"address"},{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"},{"internalType":"string","name":"_baseurl","type":"string"}],"name":"deployProxyFor","outputs":[{"internalType":"address","name":"proxy","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"factoryOperators","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_isValid","type":"bool"}],"name":"setOperatorStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b5061001a3361003c565b336000908152600160208190526040909120805460ff1916909117905561008c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610a8a8061009b6000396000f3fe60806040523480156200001157600080fd5b50600436106200006a5760003560e01c80631709d715146200006f57806359119a4114620000a3578063715018a614620000bc5780638da5cb5b14620000c65780639e1c842714620000d8578063f2fde38b146200010f575b600080fd5b620000866200008036600462000428565b62000126565b6040516001600160a01b0390911681526020015b60405180910390f35b620000ba620000b4366004620004e0565b620001ca565b005b620000ba620001ff565b6000546001600160a01b031662000086565b620000fe620000e936600462000520565b60016020526000908152604090205460ff1681565b60405190151581526020016200009a565b620000ba6200012036600462000520565b62000217565b3360009081526001602052604081205460ff166200017f5760405162461bcd60e51b815260206004820152601160248201527027b7363c903337b91037b832b930ba37b960791b60448201526064015b60405180910390fd5b8585858585604051620001929062000352565b620001a29594939291906200058d565b604051809103906000f080158015620001bf573d6000803e3d6000fd5b509695505050505050565b620001d462000296565b6001600160a01b03919091166000908152600160205260409020805460ff1916911515919091179055565b6200020962000296565b62000215600062000302565b565b6200022162000296565b6001600160a01b038116620002885760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000176565b620002938162000302565b50565b33620002aa6000546001600160a01b031690565b6001600160a01b031614620002155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000176565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61046380620005f283390190565b80356001600160a01b03811681146200037857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620003a557600080fd5b813567ffffffffffffffff80821115620003c357620003c36200037d565b604051601f8301601f19908116603f01168101908282118183101715620003ee57620003ee6200037d565b816040528381528660208588010111156200040857600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156200044157600080fd5b6200044c8662000360565b94506200045c6020870162000360565b9350604086013567ffffffffffffffff808211156200047a57600080fd5b6200048889838a0162000393565b945060608801359150808211156200049f57600080fd5b620004ad89838a0162000393565b93506080880135915080821115620004c457600080fd5b50620004d38882890162000393565b9150509295509295909350565b60008060408385031215620004f457600080fd5b620004ff8362000360565b9150602083013580151581146200051557600080fd5b809150509250929050565b6000602082840312156200053357600080fd5b6200053e8262000360565b9392505050565b6000815180845260005b818110156200056d576020818501810151868301820152016200054f565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0386811682528516602082015260a060408201819052600090620005bb9083018662000545565b8281036060840152620005cf818662000545565b90508281036080840152620005e5818562000545565b9897505050505050505056fe608060405234801561001057600080fd5b5060405161046338038061046383398101604081905261002f9161026a565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0387169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a26000856001600160a01b0316858585856040516024016100b89493929190610340565b60408051601f198184030181529181526020820180516001600160e01b0316635f1e6f6d60e01b179052516100ed9190610395565b600060405180830381855af49150503d8060008114610128576040519150601f19603f3d011682016040523d82523d6000602084013e61012d565b606091505b50509050806101825760405162461bcd60e51b815260206004820152601360248201527f436f6e737472756374696f6e206661696c656400000000000000000000000000604482015260640160405180910390fd5b5050505050506103b1565b80516001600160a01b03811681146101a457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101da5781810151838201526020016101c2565b50506000910152565b600082601f8301126101f457600080fd5b81516001600160401b038082111561020e5761020e6101a9565b604051601f8301601f19908116603f01168101908282118183101715610236576102366101a9565b8160405283815286602085880101111561024f57600080fd5b6102608460208301602089016101bf565b9695505050505050565b600080600080600060a0868803121561028257600080fd5b61028b8661018d565b94506102996020870161018d565b60408701519094506001600160401b03808211156102b657600080fd5b6102c289838a016101e3565b945060608801519150808211156102d857600080fd5b6102e489838a016101e3565b935060808801519150808211156102fa57600080fd5b50610307888289016101e3565b9150509295509295909350565b6000815180845261032c8160208601602086016101bf565b601f01601f19169290920160200192915050565b6001600160a01b038516815260806020820181905260009061036490830186610314565b82810360408401526103768186610314565b9050828103606084015261038a8185610314565b979650505050505050565b600082516103a78184602087016101bf565b9190910192915050565b60a4806103bf6000396000f3fe608060405236601057600e6013565b005b600e5b604960457f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b604b565b565b3660008037600080366000845af43d6000803e8080156069573d6000f35b3d6000fdfea2646970667358221220e66ac983ba741241155164c783f08548b39488a935f02e71e0e00a09e8f5294a64736f6c63430008150033a264697066735822122051726e559694503e843be74523c0612e55ce75b684cc2c6bea1076516e9a877264736f6c63430008150033
Deployed Bytecode
0x60806040523480156200001157600080fd5b50600436106200006a5760003560e01c80631709d715146200006f57806359119a4114620000a3578063715018a614620000bc5780638da5cb5b14620000c65780639e1c842714620000d8578063f2fde38b146200010f575b600080fd5b620000866200008036600462000428565b62000126565b6040516001600160a01b0390911681526020015b60405180910390f35b620000ba620000b4366004620004e0565b620001ca565b005b620000ba620001ff565b6000546001600160a01b031662000086565b620000fe620000e936600462000520565b60016020526000908152604090205460ff1681565b60405190151581526020016200009a565b620000ba6200012036600462000520565b62000217565b3360009081526001602052604081205460ff166200017f5760405162461bcd60e51b815260206004820152601160248201527027b7363c903337b91037b832b930ba37b960791b60448201526064015b60405180910390fd5b8585858585604051620001929062000352565b620001a29594939291906200058d565b604051809103906000f080158015620001bf573d6000803e3d6000fd5b509695505050505050565b620001d462000296565b6001600160a01b03919091166000908152600160205260409020805460ff1916911515919091179055565b6200020962000296565b62000215600062000302565b565b6200022162000296565b6001600160a01b038116620002885760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000176565b620002938162000302565b50565b33620002aa6000546001600160a01b031690565b6001600160a01b031614620002155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000176565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61046380620005f283390190565b80356001600160a01b03811681146200037857600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620003a557600080fd5b813567ffffffffffffffff80821115620003c357620003c36200037d565b604051601f8301601f19908116603f01168101908282118183101715620003ee57620003ee6200037d565b816040528381528660208588010111156200040857600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a086880312156200044157600080fd5b6200044c8662000360565b94506200045c6020870162000360565b9350604086013567ffffffffffffffff808211156200047a57600080fd5b6200048889838a0162000393565b945060608801359150808211156200049f57600080fd5b620004ad89838a0162000393565b93506080880135915080821115620004c457600080fd5b50620004d38882890162000393565b9150509295509295909350565b60008060408385031215620004f457600080fd5b620004ff8362000360565b9150602083013580151581146200051557600080fd5b809150509250929050565b6000602082840312156200053357600080fd5b6200053e8262000360565b9392505050565b6000815180845260005b818110156200056d576020818501810151868301820152016200054f565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0386811682528516602082015260a060408201819052600090620005bb9083018662000545565b8281036060840152620005cf818662000545565b90508281036080840152620005e5818562000545565b9897505050505050505056fe608060405234801561001057600080fd5b5060405161046338038061046383398101604081905261002f9161026a565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0387169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a26000856001600160a01b0316858585856040516024016100b89493929190610340565b60408051601f198184030181529181526020820180516001600160e01b0316635f1e6f6d60e01b179052516100ed9190610395565b600060405180830381855af49150503d8060008114610128576040519150601f19603f3d011682016040523d82523d6000602084013e61012d565b606091505b50509050806101825760405162461bcd60e51b815260206004820152601360248201527f436f6e737472756374696f6e206661696c656400000000000000000000000000604482015260640160405180910390fd5b5050505050506103b1565b80516001600160a01b03811681146101a457600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101da5781810151838201526020016101c2565b50506000910152565b600082601f8301126101f457600080fd5b81516001600160401b038082111561020e5761020e6101a9565b604051601f8301601f19908116603f01168101908282118183101715610236576102366101a9565b8160405283815286602085880101111561024f57600080fd5b6102608460208301602089016101bf565b9695505050505050565b600080600080600060a0868803121561028257600080fd5b61028b8661018d565b94506102996020870161018d565b60408701519094506001600160401b03808211156102b657600080fd5b6102c289838a016101e3565b945060608801519150808211156102d857600080fd5b6102e489838a016101e3565b935060808801519150808211156102fa57600080fd5b50610307888289016101e3565b9150509295509295909350565b6000815180845261032c8160208601602086016101bf565b601f01601f19169290920160200192915050565b6001600160a01b038516815260806020820181905260009061036490830186610314565b82810360408401526103768186610314565b9050828103606084015261038a8185610314565b979650505050505050565b600082516103a78184602087016101bf565b9190910192915050565b60a4806103bf6000396000f3fe608060405236601057600e6013565b005b600e5b604960457f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b604b565b565b3660008037600080366000845af43d6000803e8080156069573d6000f35b3d6000fdfea2646970667358221220e66ac983ba741241155164c783f08548b39488a935f02e71e0e00a09e8f5294a64736f6c63430008150033a264697066735822122051726e559694503e843be74523c0612e55ce75b684cc2c6bea1076516e9a877264736f6c63430008150033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 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.