Factory (smart-contracts) minting
Smart-сontract Architecture dAPP Factory for creating customized NFT-collection contracts:
UserCollectionPRegistry is the contract accessed by users to deploy a customized NFT collection proxy contract of ERC-721 or ERC-1155 tokens to themselves on the blockchain.
UserCollectionPRegistry checks the relevance/validity of the subscription and call the UsersCollectionFactory contract to deploy the collection proxy-contract to the user (the user will be the owner of the proxy-contract).
UsersCollectionFactory smart-contract deploys the UserCollectionProxy contract on the blockchain for a collection of ERC-721 or ERC-1155 (NFTs) for the user.
UserCollectionProxy smart-contract is a proxy contract that calls the methods of logical contracts, but stores changes to the proxy contract's state variables. dApp can create two types of proxy contracts: proxy-contracts for the PublicUsersCollection721BehindProxy logical contract and PublicUsersCollection1155BehindProxy.
PublicUsersCollection721BehindProxy smart-contract is a logical smart-contract (implementation) of ERC-721 tokens whose methods proxy contracts use.
PublicUsersCollection1155BehindProxy smart-contract is a logical smart-contract (implementation) of ERC-1155 tokens whose methods proxy contracts use.
The dApp architecture for proxy contracts is based on EIP-1967, which you can read more about here: https://eips.ethereum.org/EIPS/eip-1967.
Proxy contracts do not have the ability to change the logical smart-contract and use methods of new logical smart-contract. Only the owner of a proxy-contract can call "mint NFT" method of it.
UserCollectionPRegistry.sol
Method deployNewCollection
The method calls the UsersCollectionFactory contract to deploy the UserCollectionProxy proxy-contract in the blockchain. Only a user with a valid subscription can call the method. It is purchased from agents selling subscriptions to the services of this dApp.
Input parameters of the method for calling:
The method emits an Initialized event specifying the address of the proxy-contract deployed in the blockchain.
Method getSupportedImplementation
The method returns an array of data about logical smart-contracts for which proxy-contracts can be deployed on the blockchain.
The method returns values:
Asset:
AssetType:
3 - ERC-721
4 - ERC-1155
Method getUsersCollections
The method returns an array of data about the proxy-contracts that belong to the user.
Input parameters of the method for calling:
The method returns values:
Method isImplementationSupported
The method returns the result of checking whether a smart contract is included in the list of available logical smart-contracts for which a proxy contract can be deployed.
Input parameters of the method for calling:
The method returns values:
Method checkUserSubscription
The method checks the activity of a subscription purchased by the user, which allows the user to deploy a proxy-contract in the blockchain.
A detailed description of the method operation is given in the documentation describing the operation of the subscription service, which can be found here: https://docs.envelop.is/tech/smart-contracts/subscription-service#method-_checkusersubscription.
Input parameters of the method for calling:
The method returns values:
UsersCollectionFactory
Method deployProxyFor
The method deploys the UserCollectionProxy contract in the blockchain for the user. Only a "trusted" user can call the method.
Input parameters of the method for calling:
The method returns values:
UserCollectionProxy
The contract has no public methods. The contract "constructor" method emits an Upgraded event specifying: address of the proxy-contract deployed in the blockchain.
PublicUsersCollection721BehindProxy
The contract inherits the ERC721EnumerableUpgradeable contract from the OpenZeppelin library. A description of the contract can be found here: https://docs.openzeppelin.com/contracts/4.x/api/token/erc721#ERC721Enumerable.
PublicUsersCollection1155BehindProxy
The contract inherits the ERC1155URIStorageUpgradeable contract from the OpenZeppelin library. A description of the contract can be found here: https://docs.openzeppelin.com/contracts/4.x/api/token/erc1155#ERC1155URIStorage.
Last updated