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

function deployNewCollection(
        address _implAddress, 
        address _creator,
        string memory name_,
        string memory symbol_,
        string memory _baseurl
    ) external

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

function getSupportedImplementation() external view returns(Asset[] memory) 

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

function getUsersCollections(address _user) external view returns(Asset[] memory)

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

function isImplementationSupported(address _impl) public view  returns(bool isSupported, uint256 index)

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

function checkUserSubscription(address _user) 
            external 
            view 
            returns (bool ok, bool needFix)

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

function deployProxyFor(
        address _implAddress, 
        address _creator,
        string memory name_,
        string memory symbol_,
        string memory _baseurl
    ) public returns(address proxy) 

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