Overview
ETH Balance
ETH Value
$0.00Latest 1 from a total of 1 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Deploy And Confi... | 9343963 | 342 days ago | IN | 0 ETH | 0.00000058 |
Latest 1 internal transaction
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 8625891 | 350 days ago | Contract Creation | 0 ETH |
Cross-Chain Transactions
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import {
ImmutableCreate2FactoryInterface
} from "seaport-types/src/interfaces/ImmutableCreate2FactoryInterface.sol";
import {
IAuthorizedTransferSecurityRegistry
} from "./interfaces/IAuthorizedTransferSecurityRegistry.sol";
/// @title AuthorizedTransferSecurityRegistryCreator
/// @dev Deploys and configures AuthorizedTransferSecurityRegistry contracts.
contract AuthorizedTransferSecurityRegistryCreator {
ImmutableCreate2FactoryInterface private constant factory = (
ImmutableCreate2FactoryInterface(
0x0000000000FFe8B47B3e2130213B802212439497
)
);
error UNAUTHORIZED();
function _canDeploy() internal view returns (bool) {
return
tx.origin == address(0x939C8d89EBC11fA45e576215E2353673AD0bA18A) ||
tx.origin == address(0xe80a65eB7a3018DedA407e621Ef5fb5B416678CA) ||
tx.origin == address(0x86D26897267711ea4b173C8C124a0A73612001da) ||
tx.origin == address(0xbF81D02F3Ee59E79af3D9337a186F65c9faE39F3);
}
function deployAndConfigure(
address initialOwner,
bytes32 salt,
bytes memory initializationCode,
address[] memory authorizers,
address[] memory operators
) external returns (address registry) {
if (!_canDeploy()) {
revert UNAUTHORIZED();
}
IAuthorizedTransferSecurityRegistry registryContract = (
IAuthorizedTransferSecurityRegistry(
factory.safeCreate2(salt, initializationCode)
)
);
// Note: in provided init code, this contract must be supplied
// as the default owner so that it can perform configuration and
// reassign ownership of the default list to the supplied owner.
if (authorizers.length > 0) {
registryContract.addAuthorizers(0, authorizers);
}
if (operators.length > 0) {
registryContract.addOperators(0, operators);
}
registryContract.reassignOwnershipOfList(0, initialOwner);
return address(registryContract);
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
/**
* @title ImmutableCreate2FactoryInterface
* @author 0age
* @notice This contract provides a safeCreate2 function that takes a salt value
* and a block of initialization code as arguments and passes them into
* inline assembly. The contract prevents redeploys by maintaining a
* mapping of all contracts that have already been deployed, and
* prevents frontrunning or other collisions by requiring that the first
* 20 bytes of the salt are equal to the address of the caller (this can
* be bypassed by setting the first 20 bytes to the null address). There
* is also a view function that computes the address of the contract
* that will be created when submitting a given salt or nonce along with
* a given block of initialization code.
*/
interface ImmutableCreate2FactoryInterface {
/**
* @dev Create a contract using CREATE2 by submitting a given salt or nonce
* along with the initialization code for the contract. Note that the
* first 20 bytes of the salt must match those of the calling address,
* which prevents contract creation events from being submitted by
* unintended parties.
*
* @param salt The nonce that will be passed into the CREATE2
* call.
* @param initializationCode The initialization code that will be passed
* into the CREATE2 call.
*
* @return deploymentAddress Address of the contract that will be created.
*/
function safeCreate2(
bytes32 salt,
bytes calldata initializationCode
) external payable returns (address deploymentAddress);
/**
* @dev Compute the address of the contract that will be created when
* submitting a given salt or nonce to the contract along with the
* contract's initialization code. The CREATE2 address is computed in
* accordance with EIP-1014, and adheres to the formula therein of
* `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]`
* when performing the computation. The computed address is then
* checked for any existing contract code - if so, the null address
* will be returned instead.
*
* @param salt The nonce passed into the CREATE2 address calculation.
* @param initCode The contract initialization code to be used that will be
* passed into the CREATE2 address calculation.
*
* @return deploymentAddress Address of the contract that will be created,
* or the null address if a contract already
* exists at that address.
*/
function findCreate2Address(
bytes32 salt,
bytes calldata initCode
) external view returns (address deploymentAddress);
/**
* @dev Compute the address of the contract that will be created when
* submitting a given salt or nonce to the contract along with the
* keccak256 hash of the contract's initialization code. The CREATE2
* address is computed in accordance with EIP-1014, and adheres to the
* `keccak256( 0xff ++ address ++ salt ++ keccak256(init_code)))[12:]`
* formula when performing the computation. The computed address is
* then checked for any existing contract code - if so, the null
* address will be returned instead.
*
* @param salt The nonce passed into the CREATE2 address
* calculation.
* @param initCodeHash The keccak256 hash of the initialization code that
* will be passed into the CREATE2 address calculation.
*
* @return deploymentAddress Address of the contract that will be created,
* or the null address if a contract already
* exists at that address.
*/
function findCreate2AddressViaHash(
bytes32 salt,
bytes32 initCodeHash
) external view returns (address deploymentAddress);
/**
* @dev Determine if a contract has already been deployed by the factory to
* a given address.
*
* @param deploymentAddress The contract address to check.
*
* @return True if the contract has been deployed, false otherwise.
*/
function hasBeenDeployed(
address deploymentAddress
) external view returns (bool);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
enum ListTypes {
AuthorizerList,
OperatorList
}
/// @title IAuthorizedTransferSecurityRegistry
/// @dev Interface for the Authorized Transfer Security Registry, a simplified version of the Transfer
/// Security Registry that only supports authorizers and whitelisted operators, and assumes a
/// security level of OperatorWhitelistEnableOTC + authorizers for all collections that use it.
/// Note that a number of view functions on collections that add this validator will not work.
interface IAuthorizedTransferSecurityRegistry {
event CreatedList(uint256 indexed id, string name);
event AppliedListToCollection(address indexed collection, uint120 indexed id);
event ReassignedListOwnership(uint256 indexed id, address indexed newOwner);
event AddedAccountToList(ListTypes indexed kind, uint256 indexed id, address indexed account);
event RemovedAccountFromList(ListTypes indexed kind, uint256 indexed id, address indexed account);
error AuthorizedTransferSecurityRegistry__ListDoesNotExist();
error AuthorizedTransferSecurityRegistry__CallerDoesNotOwnList();
error AuthorizedTransferSecurityRegistry__ArrayLengthCannotBeZero();
error AuthorizedTransferSecurityRegistry__CallerMustHaveElevatedPermissionsForSpecifiedNFT();
error AuthorizedTransferSecurityRegistry__ListOwnershipCannotBeTransferredToZeroAddress();
error AuthorizedTransferSecurityRegistry__ZeroAddressNotAllowed();
error AuthorizedTransferSecurityRegistry__UnauthorizedTransfer();
error AuthorizedTransferSecurityRegistry__CallerIsNotValidAuthorizer();
/// Manage lists of authorizers & operators that can be applied to collections
function createList(string calldata name) external returns (uint120);
function createListCopy(string calldata name, uint120 sourceListId) external returns (uint120);
function reassignOwnershipOfList(uint120 id, address newOwner) external;
function renounceOwnershipOfList(uint120 id) external;
function applyListToCollection(address collection, uint120 id) external;
function listOwners(uint120 id) external view returns (address);
/// Manage and query for authorizers on lists
function addAuthorizers(uint120 id, address[] calldata accounts) external;
function removeAuthorizers(uint120 id, address[] calldata accounts) external;
function getAuthorizers(uint120 id) external view returns (address[] memory);
function isAuthorizer(uint120 id, address account) external view returns (bool);
function getAuthorizersByCollection(address collection) external view returns (address[] memory);
function isAuthorizerByCollection(address collection, address account) external view returns (bool);
/// Manage and query for operators on lists
function addOperators(uint120 id, address[] calldata accounts) external;
function removeOperators(uint120 id, address[] calldata accounts) external;
function getOperators(uint120 id) external view returns (address[] memory);
function isOperator(uint120 id, address account) external view returns (bool);
function getOperatorsByCollection(address collection) external view returns (address[] memory);
function isOperatorByCollection(address collection, address account) external view returns (bool);
/// Ensure that a specific operator has been authorized to transfer tokens
function validateTransfer(address caller, address from, address to) external view;
/// Ensure that a transfer has been authorized for a specific tokenId
function validateTransfer(address caller, address from, address to, uint256 tokenId) external view;
/// Ensure that a transfer has been authorized for a specific amount of a specific tokenId, and
/// reduce the transferable amount remaining
function validateTransfer(address caller, address from, address to, uint256 tokenId, uint256 amount) external;
/// Legacy alias for validateTransfer (address caller, address from, address to)
function applyCollectionTransferPolicy(address caller, address from, address to) external view;
/// Temporarily assign a specific allowed operator for a given collection
function beforeAuthorizedTransfer(address operator, address token) external;
/// Clear assignment of a specific allowed operator for a given collection
function afterAuthorizedTransfer(address token) external;
/// Temporarily allow a specific tokenId from a given collection to be transferred
function beforeAuthorizedTransfer(address token, uint256 tokenId) external;
/// Clear assignment of an specific tokenId's transfer allowance
function afterAuthorizedTransfer(address token, uint256 tokenId) external;
/// Temporarily allow a specific amount of a specific tokenId from a given collection to be transferred
function beforeAuthorizedTransferWithAmount(address token, uint256 tokenId, uint256 amount) external;
/// Clear assignment of a tokenId's transfer allowance for a specific amount
function afterAuthorizedTransferWithAmount(address token, uint256 tokenId) external;
}{
"remappings": [
"seaport-core/=lib/seaport-core/",
"seaport-types/=lib/seaport-types/",
"seaport-sol/=lib/seaport-sol/src/",
"seaport-deploy/=lib/seaport-deploy/src/",
"solady/=lib/solady/",
"@openzeppelin/=lib/openzeppelin-contracts/",
"@limitbreak/creator-token-standards/=lib/creator-token-standards/src/",
"@rari-capital/solmate/=lib/seaport-sol/lib/seaport/lib/solmate/",
"ERC721A/=lib/creator-token-standards/lib/ERC721A/contracts/",
"creator-token-standards/=lib/creator-token-standards/",
"ds-test/=lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/seaport-sol/lib/seaport/lib/openzeppelin-contracts/lib/erc4626-tests/",
"erc721a/=lib/creator-token-standards/lib/ERC721A/",
"forge-std/=lib/forge-std/src/",
"murky/=lib/creator-token-standards/lib/murky/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"seaport/=lib/seaport-sol/lib/seaport/contracts/",
"solarray/=lib/seaport-sol/lib/solarray/src/",
"solmate/=lib/seaport-sol/lib/seaport/lib/solmate/src/",
"tstorish/=lib/tstorish/src/"
],
"optimizer": {
"enabled": true,
"runs": 9999999
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "cancun",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"name":"UNAUTHORIZED","type":"error"},{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"bytes32","name":"salt","type":"bytes32"},{"internalType":"bytes","name":"initializationCode","type":"bytes"},{"internalType":"address[]","name":"authorizers","type":"address[]"},{"internalType":"address[]","name":"operators","type":"address[]"}],"name":"deployAndConfigure","outputs":[{"internalType":"address","name":"registry","type":"address"}],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561000f575f80fd5b506106c18061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063e8a2ee9d1461002d575b5f80fd5b61004061003b366004610476565b610069565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b5f6100726102d9565b6100a8576040517f075fd2b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f64e030870000000000000000000000000000000000000000000000000000000081525f906effe8b47b3e2130213b802212439497906364e03087906100f79089908990600401610582565b6020604051808303815f875af1158015610113573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061013791906105f4565b8451909150156101c3576040517f755b6fd700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063755b6fd790610195905f908890600401610616565b5f604051808303815f87803b1580156101ac575f80fd5b505af11580156101be573d5f803e3d5ffd5b505050505b82511561024c576040517fa5ce71f500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063a5ce71f59061021e905f908790600401610616565b5f604051808303815f87803b158015610235575f80fd5b505af1158015610247573d5f803e3d5ffd5b505050505b6040517f6bfab91d0000000000000000000000000000000000000000000000000000000081525f600482015273ffffffffffffffffffffffffffffffffffffffff8881166024830152821690636bfab91d906044015f604051808303815f87803b1580156102b8575f80fd5b505af11580156102ca573d5f803e3d5ffd5b50929998505050505050505050565b5f3273939c8d89ebc11fa45e576215e2353673ad0ba18a148061030f57503273e80a65eb7a3018deda407e621ef5fb5b416678ca145b8061032d5750327386d26897267711ea4b173c8c124a0a73612001da145b8061034b57503273bf81d02f3ee59e79af3d9337a186f65c9fae39f3145b905090565b73ffffffffffffffffffffffffffffffffffffffff81168114610371575f80fd5b50565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156103e8576103e8610374565b604052919050565b5f82601f8301126103ff575f80fd5b8135602067ffffffffffffffff82111561041b5761041b610374565b8160051b61042a8282016103a1565b9283528481018201928281019087851115610443575f80fd5b83870192505b8483101561046b57823561045c81610350565b82529183019190830190610449565b979650505050505050565b5f805f805f60a0868803121561048a575f80fd5b853561049581610350565b94506020868101359450604087013567ffffffffffffffff808211156104b9575f80fd5b818901915089601f8301126104cc575f80fd5b8135818111156104de576104de610374565b61050e847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016103a1565b8181528b85838601011115610521575f80fd5b81858501868301375f9181019094015291945060608801359180831115610546575f80fd5b6105528a848b016103f0565b94506080890135925080831115610567575f80fd5b5050610575888289016103f0565b9150509295509295909350565b8281525f60206040602084015283518060408501525f5b818110156105b557858101830151858201606001528201610599565b505f6060828601015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116850101925050509392505050565b5f60208284031215610604575f80fd5b815161060f81610350565b9392505050565b5f604082016effffffffffffffffffffffffffffff851683526020604060208501528185518084526060860191506020870193505f5b8181101561067e57845173ffffffffffffffffffffffffffffffffffffffff168352938301939183019160010161064c565b509097965050505050505056fea26469706673582212202a38376c0d6ab3a62226ed1dc3e1cea45bbe803f813125912b2426d1df57649d64736f6c63430008180033
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c8063e8a2ee9d1461002d575b5f80fd5b61004061003b366004610476565b610069565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b5f6100726102d9565b6100a8576040517f075fd2b100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f64e030870000000000000000000000000000000000000000000000000000000081525f906effe8b47b3e2130213b802212439497906364e03087906100f79089908990600401610582565b6020604051808303815f875af1158015610113573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061013791906105f4565b8451909150156101c3576040517f755b6fd700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063755b6fd790610195905f908890600401610616565b5f604051808303815f87803b1580156101ac575f80fd5b505af11580156101be573d5f803e3d5ffd5b505050505b82511561024c576040517fa5ce71f500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063a5ce71f59061021e905f908790600401610616565b5f604051808303815f87803b158015610235575f80fd5b505af1158015610247573d5f803e3d5ffd5b505050505b6040517f6bfab91d0000000000000000000000000000000000000000000000000000000081525f600482015273ffffffffffffffffffffffffffffffffffffffff8881166024830152821690636bfab91d906044015f604051808303815f87803b1580156102b8575f80fd5b505af11580156102ca573d5f803e3d5ffd5b50929998505050505050505050565b5f3273939c8d89ebc11fa45e576215e2353673ad0ba18a148061030f57503273e80a65eb7a3018deda407e621ef5fb5b416678ca145b8061032d5750327386d26897267711ea4b173c8c124a0a73612001da145b8061034b57503273bf81d02f3ee59e79af3d9337a186f65c9fae39f3145b905090565b73ffffffffffffffffffffffffffffffffffffffff81168114610371575f80fd5b50565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156103e8576103e8610374565b604052919050565b5f82601f8301126103ff575f80fd5b8135602067ffffffffffffffff82111561041b5761041b610374565b8160051b61042a8282016103a1565b9283528481018201928281019087851115610443575f80fd5b83870192505b8483101561046b57823561045c81610350565b82529183019190830190610449565b979650505050505050565b5f805f805f60a0868803121561048a575f80fd5b853561049581610350565b94506020868101359450604087013567ffffffffffffffff808211156104b9575f80fd5b818901915089601f8301126104cc575f80fd5b8135818111156104de576104de610374565b61050e847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016103a1565b8181528b85838601011115610521575f80fd5b81858501868301375f9181019094015291945060608801359180831115610546575f80fd5b6105528a848b016103f0565b94506080890135925080831115610567575f80fd5b5050610575888289016103f0565b9150509295509295909350565b8281525f60206040602084015283518060408501525f5b818110156105b557858101830151858201606001528201610599565b505f6060828601015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116850101925050509392505050565b5f60208284031215610604575f80fd5b815161060f81610350565b9392505050565b5f604082016effffffffffffffffffffffffffffff851683526020604060208501528185518084526060860191506020870193505f5b8181101561067e57845173ffffffffffffffffffffffffffffffffffffffff168352938301939183019160010161064c565b509097965050505050505056fea26469706673582212202a38376c0d6ab3a62226ed1dc3e1cea45bbe803f813125912b2426d1df57649d64736f6c63430008180033
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.