Source Code
Overview
GLMR Balance
GLMR Value
$0.00Latest 8 from a total of 8 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Add Factory | 3555633 | 994 days ago | IN | 0 GLMR | 0.01124976 | ||||
| Add Factory | 3555630 | 994 days ago | IN | 0 GLMR | 0.01328316 | ||||
| Add Factory | 3555627 | 994 days ago | IN | 0 GLMR | 0.01108089 | ||||
| Add Factory | 3555623 | 994 days ago | IN | 0 GLMR | 0.01388577 | ||||
| Manage Contribut... | 3555620 | 994 days ago | IN | 0 GLMR | 0.00728564 | ||||
| Manage Contribut... | 3555620 | 994 days ago | IN | 0 GLMR | 0.00728564 | ||||
| Manage Contribut... | 3555620 | 994 days ago | IN | 0 GLMR | 0.00731295 | ||||
| Set Meta Factory | 3555618 | 994 days ago | IN | 0 GLMR | 0.0069776 |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
RMRKRegistry
Compiler Version
v0.8.18+commit.87f61d96
Optimization Enabled:
Yes with 1 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol";
import "@rmrk-team/evm-contracts/contracts/RMRK/access/Ownable.sol";
import "@rmrk-team/evm-contracts/contracts/RMRK/core/IRMRKCore.sol";
import "@rmrk-team/evm-contracts/contracts/RMRK/utils/RMRKCollectionMetadata.sol";
import "../interfaces/IOwnable.sol";
import "../interfaces/IRMRKRegistry.sol";
contract RMRKRegistry is Ownable, IRMRKRegistry {
uint256 public collectionVerificationFee;
uint256 public totalCollectionsCounter;
mapping(address => bool) public factories;
address[] public factoryList;
IERC20 public rmrkToken;
address private metaFactoryAddress;
Collection[] private _collections;
mapping(address => uint256) private _collectionByAddressIndex;
uint256 private _collectionsDepositBalance;
uint256 private _blacklistedCollectionsDepositBalance;
CollectionConfig private _defaultCollectionConfig;
constructor(address rmrkToken_, uint256 collectionVerificationFee_) {
totalCollectionsCounter = 1;
rmrkToken = IERC20(rmrkToken_);
collectionVerificationFee = collectionVerificationFee_;
_defaultCollectionConfig = CollectionConfig(
true,
true,
false,
true,
true,
true,
true,
0x0,
0,
0
);
}
function addCollectionFromFactories(
address collection,
address deployer,
uint256 maxSupply,
LegoCombination legoCombination,
MintingType mintingType,
bool isSoulbound
) external {
addCollection(
collection,
deployer,
maxSupply,
legoCombination,
mintingType,
isSoulbound,
_defaultCollectionConfig,
""
);
}
function addCollection(
address collection,
address deployer,
uint256 maxSupply,
LegoCombination legoCombination,
MintingType mintingType,
bool isSoulbound,
CollectionConfig memory config,
string memory collectionMetadata
) public {
if (
_msgSender() != owner() &&
!isContributor(_msgSender()) &&
!factories[_msgSender()]
) revert OnlyOwnerAdminOrFactoryCanAddCollection();
if (collection == address(0)) revert CollectionAddressCannotBeZero();
if (_collectionByAddressIndex[collection] != 0) {
revert CollectionAlreadyExists();
}
Collection memory newCollection = Collection({
collection: collection,
verificationSponsor: 0x0000000000000000000000000000000000000000,
verificationFeeBalance: 0,
legoCombination: legoCombination,
mintingType: mintingType,
isSoulbound: isSoulbound,
config: config,
visible: true,
verified: false
});
string memory name = IRMRKCore(collection).name();
string memory symbol = IRMRKCore(collection).symbol();
string memory finalCollectionMetadata;
if (bytes(collectionMetadata).length > 0) {
finalCollectionMetadata = collectionMetadata;
} else {
try
RMRKCollectionMetadata(collection).collectionMetadata()
returns (string memory meta) {
finalCollectionMetadata = meta;
} catch {
revert CollectionMetadataNotAvailable();
}
}
_collections.push(newCollection);
_collectionByAddressIndex[collection] = totalCollectionsCounter;
totalCollectionsCounter++;
emit CollectionAdded(
collection,
deployer,
name,
symbol,
maxSupply,
finalCollectionMetadata,
legoCombination,
mintingType,
isSoulbound,
config
);
}
function sponsorVerification(address collectionAddress) public {
if (
rmrkToken.allowance(_msgSender(), address(this)) <
collectionVerificationFee
) revert NotEnoughAllowance();
if (rmrkToken.balanceOf(_msgSender()) < collectionVerificationFee)
revert NotEnoughBalance();
uint256 index = _collectionByAddressIndex[collectionAddress];
if (index == 0) {
revert CollectionDoesNotExist(collectionAddress);
}
_collectionsDepositBalance += collectionVerificationFee;
Collection storage collection = _collections[index - 1];
if (collection.verificationSponsor != address(0)) {
revert CollectionAlreadySponsored();
}
collection.verificationFeeBalance += collectionVerificationFee;
collection.verificationSponsor = _msgSender();
rmrkToken.transferFrom(
_msgSender(),
address(this),
collectionVerificationFee
);
}
function verifyCollection(
address collectionAddress
) external onlyOwnerOrContributor {
uint256 index = _collectionByAddressIndex[collectionAddress];
if (index == 0) {
revert CollectionDoesNotExist(collectionAddress);
}
Collection storage collection = _collections[index - 1];
if (collection.verificationFeeBalance == 0)
revert CollectionNotSponsored();
collection.verified = true;
}
function declineVerification(
address collectionAddress
) external onlyOwnerOrContributor {
Collection storage collection = _collections[
_collectionByAddressIndex[collectionAddress] - 1
];
_blacklistedCollectionsDepositBalance += collection
.verificationFeeBalance;
_collectionsDepositBalance -= collection.verificationFeeBalance;
collection.verificationFeeBalance = 0;
collection
.verificationSponsor = 0x0000000000000000000000000000000000000000;
}
function getCollectionByIndex(
uint256 index
) public view returns (Collection memory) {
return _collections[index];
}
function getCollectionAddressByIndex(
uint256 index
) public view returns (address) {
return _collections[index].collection;
}
function getCollectionByAddress(
address collectionAddress
) public view returns (Collection memory) {
uint256 index = _collectionByAddressIndex[collectionAddress];
if (index == 0) {
revert CollectionDoesNotExist(collectionAddress);
}
return _collections[index - 1];
}
function isCollectionInRegistry(
address collection
) external view returns (bool) {
return _collectionByAddressIndex[collection] != 0;
}
function updateCollectionVerificationFee(
uint256 collectionVerificationFee_
) external onlyOwnerOrContributor {
collectionVerificationFee = collectionVerificationFee_;
}
function addFactory(address factory) external onlyOwnerOrContributor {
factories[factory] = true;
factoryList.push(factory);
}
function setMetaFactory(
address metaFactory
) external onlyOwnerOrContributor {
metaFactoryAddress = metaFactory;
}
function removeFactory(
address factory,
uint256 factoryIndex
) external onlyOwnerOrContributor {
delete factories[factory];
delete factoryList[factoryIndex];
}
function blackListCollection(
address collectionAddress
) external onlyOwnerOrContributor {
Collection storage collection = _collections[
_collectionByAddressIndex[collectionAddress] - 1
];
_blacklistedCollectionsDepositBalance += collection
.verificationFeeBalance;
_collectionsDepositBalance -= collection.verificationFeeBalance;
collection.visible = false;
collection.verified = false;
emit CollectionBlacklisted(collectionAddress);
}
function removeCollection(address collectionAddress) external {
uint256 index = _collectionByAddressIndex[collectionAddress];
if (index == 0) {
revert CollectionDoesNotExist(collectionAddress);
}
index -= 1;
Collection memory collection = _collections[index];
if (IOwnable(collection.collection).owner() != _msgSender())
revert OnlyCollectionOwnerCanRemoveCollection();
if (collection.legoCombination != LegoCombination.ERC1155) {
if (IERC721Enumerable(collectionAddress).totalSupply() > 0) {
revert CollectionHasMintedTokens();
}
}
// TODO: Check for ERC1155
delete _collections[index];
delete _collectionByAddressIndex[collectionAddress];
if (collection.verificationFeeBalance > 0) {
uint256 refundBalance = collection.verificationFeeBalance;
_collectionsDepositBalance -= refundBalance;
rmrkToken.transfer(collection.verificationSponsor, refundBalance);
}
emit CollectionRemoved(collectionAddress);
}
function unblackListCollection(
address collectionAddress
) external onlyOwnerOrContributor {
Collection storage collection = _collections[
_collectionByAddressIndex[collectionAddress] - 1
];
collection.visible = true;
}
function withdrawFees(address to) external onlyOwner {
uint256 feeAmount = _blacklistedCollectionsDepositBalance;
_blacklistedCollectionsDepositBalance = 0;
rmrkToken.transfer(to, feeAmount);
}
function getCollectionVerificationFee() external view returns (uint256) {
return collectionVerificationFee;
}
function getRmrkTokenAddress() external view returns (address) {
return address(rmrkToken);
}
function getTotalCollectionCount() external view returns (uint256) {
return _collections.length;
}
function getMetaFactoryAddress() external view returns (address) {
return metaFactoryAddress;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)
pragma solidity ^0.8.0;
import "../IERC721.sol";
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Enumerable is IERC721 {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
* or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
* understand this adds an external call which potentially creates a reentrancy vulnerability.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @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;
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.18;
import "@openzeppelin/contracts/utils/Context.sol";
import "../library/RMRKErrors.sol";
/**
* @title Ownable
* @author RMRK team
* @notice A minimal ownable smart contractf or owner and contributors.
* @dev This smart contract is based on "openzeppelin's access/Ownable.sol".
*/
contract Ownable is Context {
address private _owner;
mapping(address => uint256) private _contributors;
/**
* @notice Used to anounce the transfer of ownership.
* @param previousOwner Address of the account that transferred their ownership role
* @param newOwner Address of the account receiving the ownership role
*/
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @notice Event that signifies that an address was granted contributor role or that the permission has been
* revoked.
* @dev This can only be triggered by a current owner, so there is no need to include that information in the event.
* @param contributor Address of the account that had contributor role status updated
* @param isContributor A boolean value signifying whether the role has been granted (`true`) or revoked (`false`)
*/
event ContributorUpdate(address indexed contributor, bool isContributor);
/**
* @dev Reverts if called by any account other than the owner or an approved contributor.
*/
modifier onlyOwnerOrContributor() {
_onlyOwnerOrContributor();
_;
}
/**
* @dev Reverts if called by any account other than the owner.
*/
modifier onlyOwner() {
_onlyOwner();
_;
}
/**
* @dev Initializes the contract by setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @notice Returns the address of the current owner.
* @return Address of the current owner
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @notice Leaves the contract without owner. Functions using the `onlyOwner` modifier will be disabled.
* @dev Can only be called by the current owner.
* @dev 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));
}
/**
* @notice Transfers ownership of the contract to a new owner.
* @dev Can only be called by the current owner.
* @param newOwner Address of the new owner's account
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) revert RMRKNewOwnerIsZeroAddress();
_transferOwnership(newOwner);
}
/**
* @notice Transfers ownership of the contract to a new owner.
* @dev Internal function without access restriction.
* @dev Emits ***OwnershipTransferred*** event.
* @param newOwner Address of the new owner's account
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
/**
* @notice Adds or removes a contributor to the smart contract.
* @dev Can only be called by the owner.
* @dev Emits ***ContributorUpdate*** event.
* @param contributor Address of the contributor's account
* @param grantRole A boolean value signifying whether the contributor role is being granted (`true`) or revoked
* (`false`)
*/
function manageContributor(
address contributor,
bool grantRole
) external onlyOwner {
if (contributor == address(0)) revert RMRKNewContributorIsZeroAddress();
grantRole
? _contributors[contributor] = 1
: _contributors[contributor] = 0;
emit ContributorUpdate(contributor, grantRole);
}
/**
* @notice Used to check if the address is one of the contributors.
* @param contributor Address of the contributor whose status we are checking
* @return Boolean value indicating whether the address is a contributor or not
*/
function isContributor(address contributor) public view returns (bool) {
return _contributors[contributor] == 1;
}
/**
* @notice Used to verify that the caller is either the owner or a contributor.
* @dev If the caller is not the owner or a contributor, the execution will be reverted.
*/
function _onlyOwnerOrContributor() private view {
if (owner() != _msgSender() && !isContributor(_msgSender()))
revert RMRKNotOwnerOrContributor();
}
/**
* @notice Used to verify that the caller is the owner.
* @dev If the caller is not the owner, the execution will be reverted.
*/
function _onlyOwner() private view {
if (owner() != _msgSender()) revert RMRKNotOwner();
}
}// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.18;
/**
* @title IRMRKCore
* @author RMRK team
* @notice Interface smart contract for RMRK core module.
*/
interface IRMRKCore {
/**
* @notice Used to retrieve the collection name.
* @return Name of the collection
*/
function name() external view returns (string memory);
/**
* @notice Used to retrieve the collection symbol.
* @return Symbol of the collection
*/
function symbol() external view returns (string memory);
}// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.18; /// @title RMRKErrors /// @author RMRK team /// @notice A collection of errors used in the RMRK suite /// @dev Errors are kept in a centralised file in order to provide a central point of reference and to avoid error /// naming collisions due to inheritance /// Attempting to grant the token to 0x0 address error ERC721AddressZeroIsNotaValidOwner(); /// Attempting to grant approval to the current owner of the token error ERC721ApprovalToCurrentOwner(); /// Attempting to grant approval when not being owner or approved for all should not be permitted error ERC721ApproveCallerIsNotOwnerNorApprovedForAll(); /// Attempting to get approvals for a token owned by 0x0 (considered non-existent) error ERC721ApprovedQueryForNonexistentToken(); /// Attempting to grant approval to self error ERC721ApproveToCaller(); /// Attempting to use an invalid token ID error ERC721InvalidTokenId(); /// Attempting to mint to 0x0 address error ERC721MintToTheZeroAddress(); /// Attempting to manage a token without being its owner or approved by the owner error ERC721NotApprovedOrOwner(); /// Attempting to mint an already minted token error ERC721TokenAlreadyMinted(); /// Attempting to transfer the token from an address that is not the owner error ERC721TransferFromIncorrectOwner(); /// Attempting to safe transfer to an address that is unable to receive the token error ERC721TransferToNonReceiverImplementer(); /// Attempting to transfer the token to a 0x0 address error ERC721TransferToTheZeroAddress(); /// Attempting to grant approval of assets to their current owner error RMRKApprovalForAssetsToCurrentOwner(); /// Attempting to grant approval of assets without being the caller or approved for all error RMRKApproveForAssetsCallerIsNotOwnerNorApprovedForAll(); /// Attempting to incorrectly configue a Catalog item error RMRKBadConfig(); /// Attempting to set the priorities with an array of length that doesn't match the length of active assets array error RMRKBadPriorityListLength(); /// Attempting to add an asset entry with `Part`s, without setting the `Catalog` address error RMRKCatalogRequiredForParts(); /// Attempting to transfer a soulbound (non-transferrable) token error RMRKCannotTransferSoulbound(); /// Attempting to accept a child that has already been accepted error RMRKChildAlreadyExists(); /// Attempting to interact with a child, using index that is higher than the number of children error RMRKChildIndexOutOfRange(); /// Attempting to find the index of a child token on a parent which does not own it. error RMRKChildNotFoundInParent(); /// Attempting to pass collaborator address array and collaborator permission array of different lengths error RMRKCollaboratorArraysNotEqualLength(); /// Attempting to register a collection that is already registered error RMRKCollectionAlreadyRegistered(); /// Attempting to manage or interact with colleciton that is not registered error RMRKCollectionNotRegistered(); /// Attempting to equip a `Part` with a child not approved by the Catalog error RMRKEquippableEquipNotAllowedByCatalog(); /// Attempting to use ID 0, which is not supported /// @dev The ID 0 in RMRK suite is reserved for empty values. Guarding against its use ensures the expected operation error RMRKIdZeroForbidden(); /// Attempting to interact with an asset, using index greater than number of assets error RMRKIndexOutOfRange(); /// Attempting to reclaim a child that can't be reclaimed error RMRKInvalidChildReclaim(); /// Attempting to interact with an end-user account when the contract account is expected error RMRKIsNotContract(); /// Attempting to interact with a contract that had its operation locked error RMRKLocked(); /// Attempting to add a pending child after the number of pending children has reached the limit (default limit is 128) error RMRKMaxPendingChildrenReached(); /// Attempting to add a pending asset after the number of pending assets has reached the limit (default limit is /// 128) error RMRKMaxPendingAssetsReached(); /// Attempting to burn a total number of recursive children higher than maximum set /// @param childContract Address of the collection smart contract in which the maximum number of recursive burns was reached /// @param childId ID of the child token at which the maximum number of recursive burns was reached error RMRKMaxRecursiveBurnsReached(address childContract, uint256 childId); /// Attempting to mint a number of tokens that would cause the total supply to be greater than maximum supply error RMRKMintOverMax(); /// Attempting to mint a nested token to a smart contract that doesn't support nesting error RMRKMintToNonRMRKNestableImplementer(); /// Attempting to pass complementary arrays of different lengths error RMRKMismachedArrayLength(); /// Attempting to transfer a child before it is unequipped error RMRKMustUnequipFirst(); /// Attempting to nest a child over the nestable limit (current limit is 100 levels of nesting) error RMRKNestableTooDeep(); /// Attempting to nest the token to own descendant, which would create a loop and leave the looped tokens in limbo error RMRKNestableTransferToDescendant(); /// Attempting to nest the token to a smart contract that doesn't support nesting error RMRKNestableTransferToNonRMRKNestableImplementer(); /// Attempting to nest the token into itself error RMRKNestableTransferToSelf(); /// Attempting to interact with an asset that can not be found error RMRKNoAssetMatchingId(); /// Attempting to manage an asset without owning it or having been granted permission by the owner to do so error RMRKNotApprovedForAssetsOrOwner(); /// Attempting to interact with a token without being its owner or having been granted permission by the /// owner to do so /// @dev When a token is nested, only the direct owner (NFT parent) can mange it. In that case, approved addresses are /// not allowed to manage it, in order to ensure the expected behaviour error RMRKNotApprovedOrDirectOwner(); /// Attempting to manage a collection without being the collection's collaborator error RMRKNotCollectionCollaborator(); /// Attemting to manage a collection without being the collection's issuer error RMRKNotCollectionIssuer(); /// Attempting to manage a collection without being the collection's issuer or collaborator error RMRKNotCollectionIssuerOrCollaborator(); /// Attempting to compose an asset wihtout having an associated Catalog error RMRKNotComposableAsset(); /// Attempting to unequip an item that isn't equipped error RMRKNotEquipped(); /// Attempting to interact with a management function without being the smart contract's owner error RMRKNotOwner(); /// Attempting to interact with a function without being the owner or contributor of the collection error RMRKNotOwnerOrContributor(); /// Attempting to manage a collection without being the specific address error RMRKNotSpecificAddress(); /// Attempting to manage a token without being its owner error RMRKNotTokenOwner(); /// Attempting to transfer the ownership to the 0x0 address error RMRKNewOwnerIsZeroAddress(); /// Attempting to assign a 0x0 address as a contributor error RMRKNewContributorIsZeroAddress(); /// Attemtping to use `Ownable` interface without implementing it error RMRKOwnableNotImplemented(); /// Attempting an operation requiring the token being nested, while it is not error RMRKParentIsNotNFT(); /// Attempting to add a `Part` with an ID that is already used error RMRKPartAlreadyExists(); /// Attempting to use a `Part` that doesn't exist error RMRKPartDoesNotExist(); /// Attempting to use a `Part` that is `Fixed` when `Slot` kind of `Part` should be used error RMRKPartIsNotSlot(); /// Attempting to interact with a pending child using an index greater than the size of pending array error RMRKPendingChildIndexOutOfRange(); /// Attempting to add an asset using an ID that has already been used error RMRKAssetAlreadyExists(); /// Attempting to equip an item into a slot that already has an item equipped error RMRKSlotAlreadyUsed(); /// Attempting to equip an item into a `Slot` that the target asset does not implement error RMRKTargetAssetCannotReceiveSlot(); /// Attempting to equip a child into a `Slot` and parent that the child's collection doesn't support error RMRKTokenCannotBeEquippedWithAssetIntoSlot(); /// Attempting to compose a NFT of a token without active assets error RMRKTokenDoesNotHaveAsset(); /// Attempting to determine the asset with the top priority on a token without assets error RMRKTokenHasNoAssets(); /// Attempting to accept or transfer a child which does not match the one at the specified index error RMRKUnexpectedChildId(); /// Attempting to reject all pending assets but more assets than expected are pending error RMRKUnexpectedNumberOfAssets(); /// Attempting to reject all pending children but children assets than expected are pending error RMRKUnexpectedNumberOfChildren(); /// Attempting to accept or reject an asset which does not match the one at the specified index error RMRKUnexpectedAssetId(); /// Attempting an operation expecting a parent to the token which is not the actual one error RMRKUnexpectedParent(); /// Attempting not to pass an empty array of equippable addresses when adding or setting the equippable addresses error RMRKZeroLengthIdsPassed(); /// Attempting to set the royalties to a value higher than 100% (10000 in base points) error RMRKRoyaltiesTooHigh();
// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.18;
/**
* @title RMRKCollectionMetadata
* @author RMRK team
* @notice Smart contract of the RMRK Collection metadata module.
*/
contract RMRKCollectionMetadata {
string private _collectionMetadata;
/**
* @notice Used to initialize the contract with the given metadata.
* @param collectionMetadata_ The collection metadata with which to initialize the smart contract
*/
constructor(string memory collectionMetadata_) {
_setCollectionMetadata(collectionMetadata_);
}
/**
* @notice Used to set the metadata of the collection.
* @param newMetadata The new metadata of the collection
*/
function _setCollectionMetadata(string memory newMetadata) internal {
_collectionMetadata = newMetadata;
}
/**
* @notice Used to retrieve the metadata of the collection.
* @return string The metadata URI of the collection
*/
function collectionMetadata() public view returns (string memory) {
return _collectionMetadata;
}
}// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.18;
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
*/
interface IOwnable {
/**
* @dev Returns owner
*/
function owner() external view returns (address ownerAddress);
/**
* @dev Allows the current owner to relinquish control of the contract.
*/
function renounceOwnership() external;
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
*/
function transferOwnership(address newOwner) external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;
error CollectionAddressCannotBeZero();
error CollectionAlreadyExists();
error CollectionAlreadySponsored();
error CollectionDoesNotExist(address collection);
error CollectionHasMintedTokens();
error CollectionMetadataNotAvailable();
error CollectionNotSponsored();
error NotEnoughAllowance();
error NotEnoughBalance();
error OnlyCollectionOwnerCanRemoveCollection();
error OnlyOwnerAdminOrFactoryCanAddCollection();
interface IRMRKRegistry {
enum LegoCombination {
None,
MultiAsset,
Nestable,
NestableMultiAsset,
Equippable,
ERC721,
ERC1155,
Custom
}
enum MintingType {
None,
RMRKPreMint,
RMRKLazyMintNativeToken,
RMRKLazyMintERC20,
Custom
}
struct CollectionConfig {
bool usesOwnable;
bool usesContributor;
bool usesAccessControl;
bool hasStandardAssetManagement; // has addAssetEntry, addEquippableAssetEntry, addAssetToToken, etc
bool hasStandardMinting; // has mint(address to, uint256 numToMint)
bool hasStandardNestMinting; // has nestMint(address to, uint256 numToMint, uint256 destinationId)
bool autoAcceptsFirstAsset;
bytes32 adminRole; // Only for AccessControl users
uint8 customLegoCombination;
uint8 customMintingType;
}
struct Collection {
address collection;
address verificationSponsor;
uint256 verificationFeeBalance;
LegoCombination legoCombination;
MintingType mintingType;
bool isSoulbound;
bool visible;
bool verified;
CollectionConfig config;
}
event CollectionAdded(
address collection,
address deployer,
string name,
string symbol,
uint256 maxSupply,
string collectionMetadata,
LegoCombination legoCombination,
MintingType mintingType,
bool isSoulbound,
CollectionConfig config
);
event CollectionBlacklisted(address collection);
event CollectionRemoved(address collection);
function addCollectionFromFactories(
address collection,
address deployer,
uint256 maxSupply,
LegoCombination legoCombination,
MintingType mintingType,
bool isSoulbound
) external;
function addCollection(
address collection,
address deployer,
uint256 maxSupply,
LegoCombination legoCombination,
MintingType mintingType,
bool isSoulbound,
CollectionConfig memory config,
string memory collectionMetadata
) external;
function getMetaFactoryAddress() external view returns (address);
}{
"optimizer": {
"enabled": true,
"runs": 1
},
"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":"rmrkToken_","type":"address"},{"internalType":"uint256","name":"collectionVerificationFee_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CollectionAddressCannotBeZero","type":"error"},{"inputs":[],"name":"CollectionAlreadyExists","type":"error"},{"inputs":[],"name":"CollectionAlreadySponsored","type":"error"},{"inputs":[{"internalType":"address","name":"collection","type":"address"}],"name":"CollectionDoesNotExist","type":"error"},{"inputs":[],"name":"CollectionHasMintedTokens","type":"error"},{"inputs":[],"name":"CollectionMetadataNotAvailable","type":"error"},{"inputs":[],"name":"CollectionNotSponsored","type":"error"},{"inputs":[],"name":"NotEnoughAllowance","type":"error"},{"inputs":[],"name":"NotEnoughBalance","type":"error"},{"inputs":[],"name":"OnlyCollectionOwnerCanRemoveCollection","type":"error"},{"inputs":[],"name":"OnlyOwnerAdminOrFactoryCanAddCollection","type":"error"},{"inputs":[],"name":"RMRKNewContributorIsZeroAddress","type":"error"},{"inputs":[],"name":"RMRKNewOwnerIsZeroAddress","type":"error"},{"inputs":[],"name":"RMRKNotOwner","type":"error"},{"inputs":[],"name":"RMRKNotOwnerOrContributor","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"collection","type":"address"},{"indexed":false,"internalType":"address","name":"deployer","type":"address"},{"indexed":false,"internalType":"string","name":"name","type":"string"},{"indexed":false,"internalType":"string","name":"symbol","type":"string"},{"indexed":false,"internalType":"uint256","name":"maxSupply","type":"uint256"},{"indexed":false,"internalType":"string","name":"collectionMetadata","type":"string"},{"indexed":false,"internalType":"enum IRMRKRegistry.LegoCombination","name":"legoCombination","type":"uint8"},{"indexed":false,"internalType":"enum IRMRKRegistry.MintingType","name":"mintingType","type":"uint8"},{"indexed":false,"internalType":"bool","name":"isSoulbound","type":"bool"},{"components":[{"internalType":"bool","name":"usesOwnable","type":"bool"},{"internalType":"bool","name":"usesContributor","type":"bool"},{"internalType":"bool","name":"usesAccessControl","type":"bool"},{"internalType":"bool","name":"hasStandardAssetManagement","type":"bool"},{"internalType":"bool","name":"hasStandardMinting","type":"bool"},{"internalType":"bool","name":"hasStandardNestMinting","type":"bool"},{"internalType":"bool","name":"autoAcceptsFirstAsset","type":"bool"},{"internalType":"bytes32","name":"adminRole","type":"bytes32"},{"internalType":"uint8","name":"customLegoCombination","type":"uint8"},{"internalType":"uint8","name":"customMintingType","type":"uint8"}],"indexed":false,"internalType":"struct IRMRKRegistry.CollectionConfig","name":"config","type":"tuple"}],"name":"CollectionAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"collection","type":"address"}],"name":"CollectionBlacklisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"collection","type":"address"}],"name":"CollectionRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"contributor","type":"address"},{"indexed":false,"internalType":"bool","name":"isContributor","type":"bool"}],"name":"ContributorUpdate","type":"event"},{"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":"collection","type":"address"},{"internalType":"address","name":"deployer","type":"address"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"enum IRMRKRegistry.LegoCombination","name":"legoCombination","type":"uint8"},{"internalType":"enum IRMRKRegistry.MintingType","name":"mintingType","type":"uint8"},{"internalType":"bool","name":"isSoulbound","type":"bool"},{"components":[{"internalType":"bool","name":"usesOwnable","type":"bool"},{"internalType":"bool","name":"usesContributor","type":"bool"},{"internalType":"bool","name":"usesAccessControl","type":"bool"},{"internalType":"bool","name":"hasStandardAssetManagement","type":"bool"},{"internalType":"bool","name":"hasStandardMinting","type":"bool"},{"internalType":"bool","name":"hasStandardNestMinting","type":"bool"},{"internalType":"bool","name":"autoAcceptsFirstAsset","type":"bool"},{"internalType":"bytes32","name":"adminRole","type":"bytes32"},{"internalType":"uint8","name":"customLegoCombination","type":"uint8"},{"internalType":"uint8","name":"customMintingType","type":"uint8"}],"internalType":"struct IRMRKRegistry.CollectionConfig","name":"config","type":"tuple"},{"internalType":"string","name":"collectionMetadata","type":"string"}],"name":"addCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"address","name":"deployer","type":"address"},{"internalType":"uint256","name":"maxSupply","type":"uint256"},{"internalType":"enum IRMRKRegistry.LegoCombination","name":"legoCombination","type":"uint8"},{"internalType":"enum IRMRKRegistry.MintingType","name":"mintingType","type":"uint8"},{"internalType":"bool","name":"isSoulbound","type":"bool"}],"name":"addCollectionFromFactories","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"}],"name":"addFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collectionAddress","type":"address"}],"name":"blackListCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collectionVerificationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collectionAddress","type":"address"}],"name":"declineVerification","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"factories","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"factoryList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getCollectionAddressByIndex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collectionAddress","type":"address"}],"name":"getCollectionByAddress","outputs":[{"components":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"address","name":"verificationSponsor","type":"address"},{"internalType":"uint256","name":"verificationFeeBalance","type":"uint256"},{"internalType":"enum IRMRKRegistry.LegoCombination","name":"legoCombination","type":"uint8"},{"internalType":"enum IRMRKRegistry.MintingType","name":"mintingType","type":"uint8"},{"internalType":"bool","name":"isSoulbound","type":"bool"},{"internalType":"bool","name":"visible","type":"bool"},{"internalType":"bool","name":"verified","type":"bool"},{"components":[{"internalType":"bool","name":"usesOwnable","type":"bool"},{"internalType":"bool","name":"usesContributor","type":"bool"},{"internalType":"bool","name":"usesAccessControl","type":"bool"},{"internalType":"bool","name":"hasStandardAssetManagement","type":"bool"},{"internalType":"bool","name":"hasStandardMinting","type":"bool"},{"internalType":"bool","name":"hasStandardNestMinting","type":"bool"},{"internalType":"bool","name":"autoAcceptsFirstAsset","type":"bool"},{"internalType":"bytes32","name":"adminRole","type":"bytes32"},{"internalType":"uint8","name":"customLegoCombination","type":"uint8"},{"internalType":"uint8","name":"customMintingType","type":"uint8"}],"internalType":"struct IRMRKRegistry.CollectionConfig","name":"config","type":"tuple"}],"internalType":"struct IRMRKRegistry.Collection","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getCollectionByIndex","outputs":[{"components":[{"internalType":"address","name":"collection","type":"address"},{"internalType":"address","name":"verificationSponsor","type":"address"},{"internalType":"uint256","name":"verificationFeeBalance","type":"uint256"},{"internalType":"enum IRMRKRegistry.LegoCombination","name":"legoCombination","type":"uint8"},{"internalType":"enum IRMRKRegistry.MintingType","name":"mintingType","type":"uint8"},{"internalType":"bool","name":"isSoulbound","type":"bool"},{"internalType":"bool","name":"visible","type":"bool"},{"internalType":"bool","name":"verified","type":"bool"},{"components":[{"internalType":"bool","name":"usesOwnable","type":"bool"},{"internalType":"bool","name":"usesContributor","type":"bool"},{"internalType":"bool","name":"usesAccessControl","type":"bool"},{"internalType":"bool","name":"hasStandardAssetManagement","type":"bool"},{"internalType":"bool","name":"hasStandardMinting","type":"bool"},{"internalType":"bool","name":"hasStandardNestMinting","type":"bool"},{"internalType":"bool","name":"autoAcceptsFirstAsset","type":"bool"},{"internalType":"bytes32","name":"adminRole","type":"bytes32"},{"internalType":"uint8","name":"customLegoCombination","type":"uint8"},{"internalType":"uint8","name":"customMintingType","type":"uint8"}],"internalType":"struct IRMRKRegistry.CollectionConfig","name":"config","type":"tuple"}],"internalType":"struct IRMRKRegistry.Collection","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCollectionVerificationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMetaFactoryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRmrkTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalCollectionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collection","type":"address"}],"name":"isCollectionInRegistry","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contributor","type":"address"}],"name":"isContributor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"contributor","type":"address"},{"internalType":"bool","name":"grantRole","type":"bool"}],"name":"manageContributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"collectionAddress","type":"address"}],"name":"removeCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"factory","type":"address"},{"internalType":"uint256","name":"factoryIndex","type":"uint256"}],"name":"removeFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rmrkToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"metaFactory","type":"address"}],"name":"setMetaFactory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collectionAddress","type":"address"}],"name":"sponsorVerification","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalCollectionsCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collectionAddress","type":"address"}],"name":"unblackListCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"collectionVerificationFee_","type":"uint256"}],"name":"updateCollectionVerificationFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collectionAddress","type":"address"}],"name":"verifyCollection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040523480156200001157600080fd5b506040516200262538038062002625833981016040819052620000349162000139565b6200003f33620000e9565b60016003819055600680546001600160a01b0319166001600160a01b0394909416939093179092556002556040805161014081018252828152602081018390526000918101829052606081018390526080810183905260a0810183905260c081019290925260e082018190526101008201819052610120909101819052600c805466ffffffffffffff19166601010101000101179055600d55600e805461ffff1916905562000175565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156200014d57600080fd5b82516001600160a01b03811681146200016557600080fd5b6020939093015192949293505050565b6124a080620001856000396000f3fe608060405234801561001057600080fd5b50600436106101755760003560e01c80630184e8211461017a5780630c44218b1461019d578063164e68de146101b257806319a49e3a146101c55780631d0d35f5146101e5578063213acdeb1461022257806329ce1ec5146102355780633711c363146102485780633908cc931461027357806339d10cc3146102865780633abd0651146102995780634a56644a146102ac5780635028d05a146102bf578063540834e3146102d25780635701df44146102e55780636170c4a6146102f757806364e32c4c1461030a578063715018a61461031d57806377c405501461032557806379e8ca9e146103385780637cceb15f1461034b578063845ac6111461035e5780638da5cb5b14610366578063923e77161461036e578063b718a42c14610381578063cc4c24aa14610392578063dddfd616146103a5578063f002804a146103ae578063f25c0635146103c1578063f2fde38b146103ca578063fab52689146103dd575b600080fd5b6007546001600160a01b03165b6040516101949190611cad565b60405180910390f35b6101b06101ab366004611cd6565b610400565b005b6101b06101c0366004611d02565b610459565b6101d86101d3366004611d26565b6104e4565b6040516101949190611e2c565b6102126101f3366004611d02565b6001600160a01b03166000908152600160208190526040909120541490565b6040519015158152602001610194565b610187610230366004611d26565b610692565b6101b0610243366004611d02565b6106bc565b610212610256366004611d02565b6001600160a01b0316600090815260096020526040902054151590565b6101b0610281366004611d02565b61072a565b6101b0610294366004611d26565b6107e2565b600654610187906001600160a01b031681565b6101b06102ba366004611d02565b6107ef565b6101b06102cd366004611d02565b610819565b6101b06102e0366004611f11565b610cb7565b6002545b604051908152602001610194565b6101b0610305366004612083565b610d73565b6101b0610318366004611d02565b611386565b6101b0611630565b6101b0610333366004611d02565b611644565b6101b06103463660046121f0565b6116ac565b6101b0610359366004611d02565b611769565b6008546102e9565b61018761183c565b6101b061037c366004611d02565b61184b565b6006546001600160a01b0316610187565b6101876103a0366004611d26565b6118ed565b6102e960035481565b6101d86103bc366004611d02565b611922565b6102e960025481565b6101b06103d8366004611d02565b611b17565b6102126103eb366004611d02565b60046020526000908152604090205460ff1681565b610408611b52565b6001600160a01b0382166000908152600460205260409020805460ff19169055600580548290811061043c5761043c612229565b600091825260209091200180546001600160a01b03191690555050565b610461611b96565b600b8054600090915560065460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061049c908590859060040161223f565b6020604051808303816000875af11580156104bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104df9190612258565b505050565b6104ec611c16565b600882815481106104ff576104ff612229565b60009182526020918290206040805161012081018252600793840290920180546001600160a01b039081168452600182015416948301949094526002840154908201526003830154909291606084019160ff169081111561056257610562611d3f565b600781111561057357610573611d3f565b81526020016003820160019054906101000a900460ff16600481111561059b5761059b611d3f565b60048111156105ac576105ac611d3f565b8152600382015460ff6201000080830482161515602080860191909152630100000080850484161515604080880191909152600160201b958690048516151560608089019190915281516101408101835260048a01548088161515825261010080820489161515968301969096529586048716151592810192909252918404851615159181019190915293820483161515608085810191909152600160281b83048416151560a0860152600160301b9092048316151560c0850152600586015460e085015260069095015480831684870152949094041661012082015291015292915050565b600581815481106106a257600080fd5b6000918252602090912001546001600160a01b0316905081565b6106c4611b52565b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b610732611b52565b6001600160a01b038116600090815260096020526040812054908190036107775781604051634580ccc360e11b815260040161076e9190611cad565b60405180910390fd5b6000600861078660018461228b565b8154811061079657610796612229565b9060005260206000209060070201905080600201546000036107ca5760405162e5804760e31b815260040160405180910390fd5b600301805460ff60201b1916600160201b1790555050565b6107ea611b52565b600255565b6107f7611b52565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260096020526040812054908190036108555781604051634580ccc360e11b815260040161076e9190611cad565b61086060018261228b565b905060006008828154811061087757610877612229565b60009182526020918290206040805161012081018252600793840290920180546001600160a01b039081168452600182015416948301949094526002840154908201526003830154909291606084019160ff16908111156108da576108da611d3f565b60078111156108eb576108eb611d3f565b81526020016003820160019054906101000a900460ff16600481111561091357610913611d3f565b600481111561092457610924611d3f565b8152600382015460ff6201000080830482161515602080860191909152630100000080850484161515604080880191909152600160201b958690048516151560608089019190915281516101408101835260048a01548088161515825261010080820489161515968301969096529586048716151592810192909252918404851615159181019190915293820483161515608085810191909152600160281b83048416151560a0860152600160301b9092048316151560c0850152600586015460e08501526006909501548083168487015294909404166101208201529101529050610a0d3390565b6001600160a01b031681600001516001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7c91906122a4565b6001600160a01b031614610aa357604051638f16e9eb60e01b815260040160405180910390fd5b600681606001516007811115610abb57610abb611d3f565b14610b43576000836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2491906122c1565b1115610b435760405163c1c59d5360e01b815260040160405180910390fd5b60088281548110610b5657610b56612229565b60009182526020808320600790920290910180546001600160a01b0319908116825560018201805490911690556002810183905560038101805464ffffffffff1916905560048101805466ffffffffffffff1916905560058101839055600601805461ffff191690556001600160a01b03851682526009905260408082209190915581015115610c7b5760008160400151905080600a6000828254610bfb919061228b565b9091555050600654602083015160405163a9059cbb60e01b81526001600160a01b039092169163a9059cbb91610c3591859060040161223f565b6020604051808303816000875af1158015610c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c789190612258565b50505b7fa0691bd707b2f65c33c8343d61c274df72c6b5007937dcfbc31aa5a0d0f6fe3c83604051610caa9190611cad565b60405180910390a1505050565b6040805161014081018252600c5460ff8082161515835261010080830482161515602080860191909152620100008404831615158587015263010000008404831615156060860152600160201b8404831615156080860152600160281b84048316151560a0860152600160301b9093048216151560c0850152600d5460e0850152600e54808316828601520416610120830152825190810190925260008252610d6b91889188918891889188918891610d73565b505050505050565b610d7b61183c565b6001600160a01b0316336001600160a01b031614158015610da25750610da0336101f3565b155b8015610dbe57503360009081526004602052604090205460ff16155b15610ddb576040516214dc9f60e61b815260040160405180910390fd5b6001600160a01b038816610e015760405162db1a2360e21b815260040160405180910390fd5b6001600160a01b03881660009081526009602052604090205415610e385760405163d7feb16d60e01b815260040160405180910390fd5b60006040518061012001604052808a6001600160a01b0316815260200160006001600160a01b0316815260200160008152602001876007811115610e7e57610e7e611d3f565b8152602001866004811115610e9557610e95611d3f565b815260200185151581526020016001151581526020016000151581526020018481525090506000896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610efa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f2291908101906122fe565b905060008a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f8c91908101906122fe565b90506060600085511115610fa1575083611020565b8b6001600160a01b03166389ed2edf6040518163ffffffff1660e01b8152600401600060405180830381865afa92505050801561100057506040513d6000823e601f3d908101601f19168201604052610ffd91908101906122fe565b60015b61101d5760405163fd590a4360e01b815260040160405180910390fd5b90505b6008805460018181018355600092909252855160079182027ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3810180546001600160a01b039384166001600160a01b031991821617825560208a01517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee4840180549190951691161790925560408801517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee582015560608801517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee69091018054899593949293919260ff199091169190849081111561112057611120611d3f565b0217905550608082015160038201805461ff00191661010083600481111561114a5761114a611d3f565b021790555060a08201518160030160026101000a81548160ff02191690831515021790555060c08201518160030160036101000a81548160ff02191690831515021790555060e08201518160030160046101000a81548160ff0219169083151502179055506101008201518160040160008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff02191690831515021790555060608201518160000160036101000a81548160ff02191690831515021790555060808201518160000160046101000a81548160ff02191690831515021790555060a08201518160000160056101000a81548160ff02191690831515021790555060c08201518160000160066101000a81548160ff02191690831515021790555060e082015181600101556101008201518160020160006101000a81548160ff021916908360ff1602179055506101208201518160020160016101000a81548160ff021916908360ff16021790555050505050600354600960008e6001600160a01b03166001600160a01b03168152602001908152602001600020819055506003600081548092919061132a90612374565b91905055507fa272a920ad706f01ae3cee9285d565f5d0665372ef0d096ec419b32987b1616b8c8c85858e868f8f8f8f6040516113709a999897969594939291906123b9565b60405180910390a1505050505050505050505050565b6002546006546001600160a01b031663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa1580156113e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140991906122c1565b101561142857604051634fd3af0760e01b815260040160405180910390fd5b6002546006546001600160a01b03166370a08231336040518263ffffffff1660e01b81526004016114599190611cad565b602060405180830381865afa158015611476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149a91906122c1565b10156114b95760405163569d45cf60e11b815260040160405180910390fd5b6001600160a01b038116600090815260096020526040812054908190036114f55781604051634580ccc360e11b815260040161076e9190611cad565b600254600a60008282546115099190612457565b9091555060009050600861151e60018461228b565b8154811061152e5761152e612229565b6000918252602090912060079091020160018101549091506001600160a01b03161561156d576040516343e17fbb60e11b815260040160405180910390fd5b6002548160020160008282546115839190612457565b909155503390506001820180546001600160a01b0319166001600160a01b03928316179055600654166323b872dd336002546040516001600160e01b031960e085901b1681526001600160a01b03909216600483015230602483015260448201526064016020604051808303816000875af1158015611606573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162a9190612258565b50505050565b611638611b96565b6116426000611bc6565b565b61164c611b52565b6001600160a01b0381166000908152600960205260408120546008906116749060019061228b565b8154811061168457611684612229565b60009182526020909120600360079092020101805463ff000000191663010000001790555050565b6116b4611b96565b6001600160a01b0382166116db5760405163016b812760e71b815260040160405180910390fd5b80611700576001600160a01b038216600090815260016020526040812081905561171f565b6001600160a01b03821660009081526001602081905260409091208190555b50816001600160a01b03167f4b5657e84cf8a17ac5587bbeb3cc2bab9826c4c67b8bad81b4849de49d37aac28260405161175d911515815260200190565b60405180910390a25050565b611771611b52565b6001600160a01b0381166000908152600960205260408120546008906117999060019061228b565b815481106117a9576117a9612229565b906000526020600020906007020190508060020154600b60008282546117cf9190612457565b90915550506002810154600a80546000906117eb90849061228b565b909155505060038101805464ffff000000191690556040517f98b341583efd5a371b2e3094e23f9d87c5e4ec187739d33fa26fe6bc08ef4ec790611830908490611cad565b60405180910390a15050565b6000546001600160a01b031690565b611853611b52565b6001600160a01b03811660009081526009602052604081205460089061187b9060019061228b565b8154811061188b5761188b612229565b906000526020600020906007020190508060020154600b60008282546118b19190612457565b90915550506002810154600a80546000906118cd90849061228b565b90915550506000600282015560010180546001600160a01b031916905550565b60006008828154811061190257611902612229565b60009182526020909120600790910201546001600160a01b031692915050565b61192a611c16565b6001600160a01b038216600090815260096020526040812054908190036119665782604051634580ccc360e11b815260040161076e9190611cad565b600861197360018361228b565b8154811061198357611983612229565b60009182526020918290206040805161012081018252600793840290920180546001600160a01b039081168452600182015416948301949094526002840154908201526003830154909291606084019160ff16908111156119e6576119e6611d3f565b60078111156119f7576119f7611d3f565b81526020016003820160019054906101000a900460ff166004811115611a1f57611a1f611d3f565b6004811115611a3057611a30611d3f565b8152600382015460ff6201000080830482161515602080860191909152630100000080850484161515604080880191909152600160201b958690048516151560608089019190915281516101408101835260048a01548088161515825261010080820489161515968301969096529586048716151592810192909252918404851615159181019190915293820483161515608085810191909152600160281b83048416151560a0860152600160301b9092048316151560c0850152600586015460e08501526006909501548083168487015294909404166101208201529101529392505050565b611b1f611b96565b6001600160a01b038116611b4657604051634ece6ecf60e01b815260040160405180910390fd5b611b4f81611bc6565b50565b33611b5b61183c565b6001600160a01b031614158015611b785750611b76336101f3565b155b15611642576040516301eca16760e41b815260040160405180910390fd5b33611b9f61183c565b6001600160a01b03161461164257604051631c62d58f60e11b815260040160405180910390fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516101208101825260008082526020820181905291810182905290606082019081526020016000815260006020808301829052604080840183905260608085018490528151610140810183528481529283018490529082018390528101829052608081810183905260a0820183905260c0820183905260e08201839052610100820183905261012082019290925291015290565b6001600160a01b0391909116815260200190565b6001600160a01b0381168114611b4f57600080fd5b60008060408385031215611ce957600080fd5b8235611cf481611cc1565b946020939093013593505050565b600060208284031215611d1457600080fd5b8135611d1f81611cc1565b9392505050565b600060208284031215611d3857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60088110611d6557611d65611d3f565b9052565b60058110611d6557611d65611d3f565b8051151582526020810151611d92602084018215159052565b506040810151611da6604084018215159052565b506060810151611dba606084018215159052565b506080810151611dce608084018215159052565b5060a0810151611de260a084018215159052565b5060c0810151611df660c084018215159052565b5060e081015160e083015261010080820151611e168285018260ff169052565b50506101208181015160ff81168483015261162a565b81516001600160a01b0390811682526020808401519091169082015260408083015190820152606080830151610240830191611e6a90840182611d55565b506080830151611e7d6080840182611d69565b5060a0830151611e9160a084018215159052565b5060c0830151611ea560c084018215159052565b5060e0830151611eb960e084018215159052565b5061010080840151611ecd82850182611d79565b505092915050565b803560088110611ee457600080fd5b919050565b803560058110611ee457600080fd5b8015158114611b4f57600080fd5b8035611ee481611ef8565b60008060008060008060c08789031215611f2a57600080fd5b8635611f3581611cc1565b95506020870135611f4581611cc1565b945060408701359350611f5a60608801611ed5565b9250611f6860808801611ee9565b915060a0870135611f7881611ef8565b809150509295509295509295565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715611fbf57611fbf611f86565b60405290565b604051601f8201601f191681016001600160401b0381118282101715611fed57611fed611f86565b604052919050565b803560ff81168114611ee457600080fd5b60006001600160401b0382111561201f5761201f611f86565b50601f01601f191660200190565b600082601f83011261203e57600080fd5b813561205161204c82612006565b611fc5565b81815284602083860101111561206657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080888a036102208112156120a157600080fd5b89356120ac81611cc1565b985060208a01356120bc81611cc1565b975060408a013596506120d160608b01611ed5565b95506120df60808b01611ee9565b945060a08a01356120ef81611ef8565b935061014060bf19820181131561210557600080fd5b61210d611f9c565b915061211b60c08c01611f06565b825261212960e08c01611f06565b602083015261010061213c818d01611f06565b604084015261012061214f818e01611f06565b606085015261215f838e01611f06565b60808501526121716101608e01611f06565b60a08501526121836101808e01611f06565b60c08501526101a08d013560e08501526121a06101c08e01611ff5565b828501526121b16101e08e01611ff5565b9084015250909250506102008901356001600160401b038111156121d457600080fd5b6121e08b828c0161202d565b9150509295985092959890939650565b6000806040838503121561220357600080fd5b823561220e81611cc1565b9150602083013561221e81611ef8565b809150509250929050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03929092168252602082015260400190565b60006020828403121561226a57600080fd5b8151611d1f81611ef8565b634e487b7160e01b600052601160045260246000fd5b8181038181111561229e5761229e612275565b92915050565b6000602082840312156122b657600080fd5b8151611d1f81611cc1565b6000602082840312156122d357600080fd5b5051919050565b60005b838110156122f55781810151838201526020016122dd565b50506000910152565b60006020828403121561231057600080fd5b81516001600160401b0381111561232657600080fd5b8201601f8101841361233757600080fd5b805161234561204c82612006565b81815285602083850101111561235a57600080fd5b61236b8260208301602086016122da565b95945050505050565b60006001820161238657612386612275565b5060010190565b600081518084526123a58160208601602086016122da565b601f01601f19169290920160200192915050565b6001600160a01b038b811682528a166020820152610260604082018190526000906123e68382018c61238d565b905082810360608401526123fa818b61238d565b905088608084015282810360a0840152612414818961238d565b91505061242460c0830187611d55565b61243160e0830186611d69565b831515610100830152612448610120830184611d79565b9b9a5050505050505050505050565b8082018082111561229e5761229e61227556fea26469706673582212207983a28b9111f7cc0188f615d6f7dc1daf5ae7c2107dafcac7745e21e1efd2ef64736f6c634300081200330000000000000000000000003ff3b0361b450e70729006918c14deb6da4103490000000000000000000000000000000000000000000000004563918244f40000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101755760003560e01c80630184e8211461017a5780630c44218b1461019d578063164e68de146101b257806319a49e3a146101c55780631d0d35f5146101e5578063213acdeb1461022257806329ce1ec5146102355780633711c363146102485780633908cc931461027357806339d10cc3146102865780633abd0651146102995780634a56644a146102ac5780635028d05a146102bf578063540834e3146102d25780635701df44146102e55780636170c4a6146102f757806364e32c4c1461030a578063715018a61461031d57806377c405501461032557806379e8ca9e146103385780637cceb15f1461034b578063845ac6111461035e5780638da5cb5b14610366578063923e77161461036e578063b718a42c14610381578063cc4c24aa14610392578063dddfd616146103a5578063f002804a146103ae578063f25c0635146103c1578063f2fde38b146103ca578063fab52689146103dd575b600080fd5b6007546001600160a01b03165b6040516101949190611cad565b60405180910390f35b6101b06101ab366004611cd6565b610400565b005b6101b06101c0366004611d02565b610459565b6101d86101d3366004611d26565b6104e4565b6040516101949190611e2c565b6102126101f3366004611d02565b6001600160a01b03166000908152600160208190526040909120541490565b6040519015158152602001610194565b610187610230366004611d26565b610692565b6101b0610243366004611d02565b6106bc565b610212610256366004611d02565b6001600160a01b0316600090815260096020526040902054151590565b6101b0610281366004611d02565b61072a565b6101b0610294366004611d26565b6107e2565b600654610187906001600160a01b031681565b6101b06102ba366004611d02565b6107ef565b6101b06102cd366004611d02565b610819565b6101b06102e0366004611f11565b610cb7565b6002545b604051908152602001610194565b6101b0610305366004612083565b610d73565b6101b0610318366004611d02565b611386565b6101b0611630565b6101b0610333366004611d02565b611644565b6101b06103463660046121f0565b6116ac565b6101b0610359366004611d02565b611769565b6008546102e9565b61018761183c565b6101b061037c366004611d02565b61184b565b6006546001600160a01b0316610187565b6101876103a0366004611d26565b6118ed565b6102e960035481565b6101d86103bc366004611d02565b611922565b6102e960025481565b6101b06103d8366004611d02565b611b17565b6102126103eb366004611d02565b60046020526000908152604090205460ff1681565b610408611b52565b6001600160a01b0382166000908152600460205260409020805460ff19169055600580548290811061043c5761043c612229565b600091825260209091200180546001600160a01b03191690555050565b610461611b96565b600b8054600090915560065460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061049c908590859060040161223f565b6020604051808303816000875af11580156104bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104df9190612258565b505050565b6104ec611c16565b600882815481106104ff576104ff612229565b60009182526020918290206040805161012081018252600793840290920180546001600160a01b039081168452600182015416948301949094526002840154908201526003830154909291606084019160ff169081111561056257610562611d3f565b600781111561057357610573611d3f565b81526020016003820160019054906101000a900460ff16600481111561059b5761059b611d3f565b60048111156105ac576105ac611d3f565b8152600382015460ff6201000080830482161515602080860191909152630100000080850484161515604080880191909152600160201b958690048516151560608089019190915281516101408101835260048a01548088161515825261010080820489161515968301969096529586048716151592810192909252918404851615159181019190915293820483161515608085810191909152600160281b83048416151560a0860152600160301b9092048316151560c0850152600586015460e085015260069095015480831684870152949094041661012082015291015292915050565b600581815481106106a257600080fd5b6000918252602090912001546001600160a01b0316905081565b6106c4611b52565b6001600160a01b03166000818152600460205260408120805460ff191660019081179091556005805491820181559091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319169091179055565b610732611b52565b6001600160a01b038116600090815260096020526040812054908190036107775781604051634580ccc360e11b815260040161076e9190611cad565b60405180910390fd5b6000600861078660018461228b565b8154811061079657610796612229565b9060005260206000209060070201905080600201546000036107ca5760405162e5804760e31b815260040160405180910390fd5b600301805460ff60201b1916600160201b1790555050565b6107ea611b52565b600255565b6107f7611b52565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260096020526040812054908190036108555781604051634580ccc360e11b815260040161076e9190611cad565b61086060018261228b565b905060006008828154811061087757610877612229565b60009182526020918290206040805161012081018252600793840290920180546001600160a01b039081168452600182015416948301949094526002840154908201526003830154909291606084019160ff16908111156108da576108da611d3f565b60078111156108eb576108eb611d3f565b81526020016003820160019054906101000a900460ff16600481111561091357610913611d3f565b600481111561092457610924611d3f565b8152600382015460ff6201000080830482161515602080860191909152630100000080850484161515604080880191909152600160201b958690048516151560608089019190915281516101408101835260048a01548088161515825261010080820489161515968301969096529586048716151592810192909252918404851615159181019190915293820483161515608085810191909152600160281b83048416151560a0860152600160301b9092048316151560c0850152600586015460e08501526006909501548083168487015294909404166101208201529101529050610a0d3390565b6001600160a01b031681600001516001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7c91906122a4565b6001600160a01b031614610aa357604051638f16e9eb60e01b815260040160405180910390fd5b600681606001516007811115610abb57610abb611d3f565b14610b43576000836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2491906122c1565b1115610b435760405163c1c59d5360e01b815260040160405180910390fd5b60088281548110610b5657610b56612229565b60009182526020808320600790920290910180546001600160a01b0319908116825560018201805490911690556002810183905560038101805464ffffffffff1916905560048101805466ffffffffffffff1916905560058101839055600601805461ffff191690556001600160a01b03851682526009905260408082209190915581015115610c7b5760008160400151905080600a6000828254610bfb919061228b565b9091555050600654602083015160405163a9059cbb60e01b81526001600160a01b039092169163a9059cbb91610c3591859060040161223f565b6020604051808303816000875af1158015610c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c789190612258565b50505b7fa0691bd707b2f65c33c8343d61c274df72c6b5007937dcfbc31aa5a0d0f6fe3c83604051610caa9190611cad565b60405180910390a1505050565b6040805161014081018252600c5460ff8082161515835261010080830482161515602080860191909152620100008404831615158587015263010000008404831615156060860152600160201b8404831615156080860152600160281b84048316151560a0860152600160301b9093048216151560c0850152600d5460e0850152600e54808316828601520416610120830152825190810190925260008252610d6b91889188918891889188918891610d73565b505050505050565b610d7b61183c565b6001600160a01b0316336001600160a01b031614158015610da25750610da0336101f3565b155b8015610dbe57503360009081526004602052604090205460ff16155b15610ddb576040516214dc9f60e61b815260040160405180910390fd5b6001600160a01b038816610e015760405162db1a2360e21b815260040160405180910390fd5b6001600160a01b03881660009081526009602052604090205415610e385760405163d7feb16d60e01b815260040160405180910390fd5b60006040518061012001604052808a6001600160a01b0316815260200160006001600160a01b0316815260200160008152602001876007811115610e7e57610e7e611d3f565b8152602001866004811115610e9557610e95611d3f565b815260200185151581526020016001151581526020016000151581526020018481525090506000896001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610efa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f2291908101906122fe565b905060008a6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610f64573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f8c91908101906122fe565b90506060600085511115610fa1575083611020565b8b6001600160a01b03166389ed2edf6040518163ffffffff1660e01b8152600401600060405180830381865afa92505050801561100057506040513d6000823e601f3d908101601f19168201604052610ffd91908101906122fe565b60015b61101d5760405163fd590a4360e01b815260040160405180910390fd5b90505b6008805460018181018355600092909252855160079182027ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3810180546001600160a01b039384166001600160a01b031991821617825560208a01517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee4840180549190951691161790925560408801517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee582015560608801517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee69091018054899593949293919260ff199091169190849081111561112057611120611d3f565b0217905550608082015160038201805461ff00191661010083600481111561114a5761114a611d3f565b021790555060a08201518160030160026101000a81548160ff02191690831515021790555060c08201518160030160036101000a81548160ff02191690831515021790555060e08201518160030160046101000a81548160ff0219169083151502179055506101008201518160040160008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff02191690831515021790555060608201518160000160036101000a81548160ff02191690831515021790555060808201518160000160046101000a81548160ff02191690831515021790555060a08201518160000160056101000a81548160ff02191690831515021790555060c08201518160000160066101000a81548160ff02191690831515021790555060e082015181600101556101008201518160020160006101000a81548160ff021916908360ff1602179055506101208201518160020160016101000a81548160ff021916908360ff16021790555050505050600354600960008e6001600160a01b03166001600160a01b03168152602001908152602001600020819055506003600081548092919061132a90612374565b91905055507fa272a920ad706f01ae3cee9285d565f5d0665372ef0d096ec419b32987b1616b8c8c85858e868f8f8f8f6040516113709a999897969594939291906123b9565b60405180910390a1505050505050505050505050565b6002546006546001600160a01b031663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa1580156113e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140991906122c1565b101561142857604051634fd3af0760e01b815260040160405180910390fd5b6002546006546001600160a01b03166370a08231336040518263ffffffff1660e01b81526004016114599190611cad565b602060405180830381865afa158015611476573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149a91906122c1565b10156114b95760405163569d45cf60e11b815260040160405180910390fd5b6001600160a01b038116600090815260096020526040812054908190036114f55781604051634580ccc360e11b815260040161076e9190611cad565b600254600a60008282546115099190612457565b9091555060009050600861151e60018461228b565b8154811061152e5761152e612229565b6000918252602090912060079091020160018101549091506001600160a01b03161561156d576040516343e17fbb60e11b815260040160405180910390fd5b6002548160020160008282546115839190612457565b909155503390506001820180546001600160a01b0319166001600160a01b03928316179055600654166323b872dd336002546040516001600160e01b031960e085901b1681526001600160a01b03909216600483015230602483015260448201526064016020604051808303816000875af1158015611606573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162a9190612258565b50505050565b611638611b96565b6116426000611bc6565b565b61164c611b52565b6001600160a01b0381166000908152600960205260408120546008906116749060019061228b565b8154811061168457611684612229565b60009182526020909120600360079092020101805463ff000000191663010000001790555050565b6116b4611b96565b6001600160a01b0382166116db5760405163016b812760e71b815260040160405180910390fd5b80611700576001600160a01b038216600090815260016020526040812081905561171f565b6001600160a01b03821660009081526001602081905260409091208190555b50816001600160a01b03167f4b5657e84cf8a17ac5587bbeb3cc2bab9826c4c67b8bad81b4849de49d37aac28260405161175d911515815260200190565b60405180910390a25050565b611771611b52565b6001600160a01b0381166000908152600960205260408120546008906117999060019061228b565b815481106117a9576117a9612229565b906000526020600020906007020190508060020154600b60008282546117cf9190612457565b90915550506002810154600a80546000906117eb90849061228b565b909155505060038101805464ffff000000191690556040517f98b341583efd5a371b2e3094e23f9d87c5e4ec187739d33fa26fe6bc08ef4ec790611830908490611cad565b60405180910390a15050565b6000546001600160a01b031690565b611853611b52565b6001600160a01b03811660009081526009602052604081205460089061187b9060019061228b565b8154811061188b5761188b612229565b906000526020600020906007020190508060020154600b60008282546118b19190612457565b90915550506002810154600a80546000906118cd90849061228b565b90915550506000600282015560010180546001600160a01b031916905550565b60006008828154811061190257611902612229565b60009182526020909120600790910201546001600160a01b031692915050565b61192a611c16565b6001600160a01b038216600090815260096020526040812054908190036119665782604051634580ccc360e11b815260040161076e9190611cad565b600861197360018361228b565b8154811061198357611983612229565b60009182526020918290206040805161012081018252600793840290920180546001600160a01b039081168452600182015416948301949094526002840154908201526003830154909291606084019160ff16908111156119e6576119e6611d3f565b60078111156119f7576119f7611d3f565b81526020016003820160019054906101000a900460ff166004811115611a1f57611a1f611d3f565b6004811115611a3057611a30611d3f565b8152600382015460ff6201000080830482161515602080860191909152630100000080850484161515604080880191909152600160201b958690048516151560608089019190915281516101408101835260048a01548088161515825261010080820489161515968301969096529586048716151592810192909252918404851615159181019190915293820483161515608085810191909152600160281b83048416151560a0860152600160301b9092048316151560c0850152600586015460e08501526006909501548083168487015294909404166101208201529101529392505050565b611b1f611b96565b6001600160a01b038116611b4657604051634ece6ecf60e01b815260040160405180910390fd5b611b4f81611bc6565b50565b33611b5b61183c565b6001600160a01b031614158015611b785750611b76336101f3565b155b15611642576040516301eca16760e41b815260040160405180910390fd5b33611b9f61183c565b6001600160a01b03161461164257604051631c62d58f60e11b815260040160405180910390fd5b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516101208101825260008082526020820181905291810182905290606082019081526020016000815260006020808301829052604080840183905260608085018490528151610140810183528481529283018490529082018390528101829052608081810183905260a0820183905260c0820183905260e08201839052610100820183905261012082019290925291015290565b6001600160a01b0391909116815260200190565b6001600160a01b0381168114611b4f57600080fd5b60008060408385031215611ce957600080fd5b8235611cf481611cc1565b946020939093013593505050565b600060208284031215611d1457600080fd5b8135611d1f81611cc1565b9392505050565b600060208284031215611d3857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b60088110611d6557611d65611d3f565b9052565b60058110611d6557611d65611d3f565b8051151582526020810151611d92602084018215159052565b506040810151611da6604084018215159052565b506060810151611dba606084018215159052565b506080810151611dce608084018215159052565b5060a0810151611de260a084018215159052565b5060c0810151611df660c084018215159052565b5060e081015160e083015261010080820151611e168285018260ff169052565b50506101208181015160ff81168483015261162a565b81516001600160a01b0390811682526020808401519091169082015260408083015190820152606080830151610240830191611e6a90840182611d55565b506080830151611e7d6080840182611d69565b5060a0830151611e9160a084018215159052565b5060c0830151611ea560c084018215159052565b5060e0830151611eb960e084018215159052565b5061010080840151611ecd82850182611d79565b505092915050565b803560088110611ee457600080fd5b919050565b803560058110611ee457600080fd5b8015158114611b4f57600080fd5b8035611ee481611ef8565b60008060008060008060c08789031215611f2a57600080fd5b8635611f3581611cc1565b95506020870135611f4581611cc1565b945060408701359350611f5a60608801611ed5565b9250611f6860808801611ee9565b915060a0870135611f7881611ef8565b809150509295509295509295565b634e487b7160e01b600052604160045260246000fd5b60405161014081016001600160401b0381118282101715611fbf57611fbf611f86565b60405290565b604051601f8201601f191681016001600160401b0381118282101715611fed57611fed611f86565b604052919050565b803560ff81168114611ee457600080fd5b60006001600160401b0382111561201f5761201f611f86565b50601f01601f191660200190565b600082601f83011261203e57600080fd5b813561205161204c82612006565b611fc5565b81815284602083860101111561206657600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600080600080888a036102208112156120a157600080fd5b89356120ac81611cc1565b985060208a01356120bc81611cc1565b975060408a013596506120d160608b01611ed5565b95506120df60808b01611ee9565b945060a08a01356120ef81611ef8565b935061014060bf19820181131561210557600080fd5b61210d611f9c565b915061211b60c08c01611f06565b825261212960e08c01611f06565b602083015261010061213c818d01611f06565b604084015261012061214f818e01611f06565b606085015261215f838e01611f06565b60808501526121716101608e01611f06565b60a08501526121836101808e01611f06565b60c08501526101a08d013560e08501526121a06101c08e01611ff5565b828501526121b16101e08e01611ff5565b9084015250909250506102008901356001600160401b038111156121d457600080fd5b6121e08b828c0161202d565b9150509295985092959890939650565b6000806040838503121561220357600080fd5b823561220e81611cc1565b9150602083013561221e81611ef8565b809150509250929050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03929092168252602082015260400190565b60006020828403121561226a57600080fd5b8151611d1f81611ef8565b634e487b7160e01b600052601160045260246000fd5b8181038181111561229e5761229e612275565b92915050565b6000602082840312156122b657600080fd5b8151611d1f81611cc1565b6000602082840312156122d357600080fd5b5051919050565b60005b838110156122f55781810151838201526020016122dd565b50506000910152565b60006020828403121561231057600080fd5b81516001600160401b0381111561232657600080fd5b8201601f8101841361233757600080fd5b805161234561204c82612006565b81815285602083850101111561235a57600080fd5b61236b8260208301602086016122da565b95945050505050565b60006001820161238657612386612275565b5060010190565b600081518084526123a58160208601602086016122da565b601f01601f19169290920160200192915050565b6001600160a01b038b811682528a166020820152610260604082018190526000906123e68382018c61238d565b905082810360608401526123fa818b61238d565b905088608084015282810360a0840152612414818961238d565b91505061242460c0830187611d55565b61243160e0830186611d69565b831515610100830152612448610120830184611d79565b9b9a5050505050505050505050565b8082018082111561229e5761229e61227556fea26469706673582212207983a28b9111f7cc0188f615d6f7dc1daf5ae7c2107dafcac7745e21e1efd2ef64736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000003ff3b0361b450e70729006918c14deb6da4103490000000000000000000000000000000000000000000000004563918244f40000
-----Decoded View---------------
Arg [0] : rmrkToken_ (address): 0x3Ff3B0361B450E70729006918c14DEb6Da410349
Arg [1] : collectionVerificationFee_ (uint256): 5000000000000000000
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000003ff3b0361b450e70729006918c14deb6da410349
Arg [1] : 0000000000000000000000000000000000000000000000004563918244f40000
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in GLMR
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.