Search
K

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:
Name
Type
Description
_implAddress
address
Address of the logical smart-contract
_creator
address
The address that will own the proxy-contract
name_
string
Name of NFT-collection
symbol_
string
Abbreviation of the NFT -collection, e.g.: ELEM
_baseurl
string
Part of the metadata reference for NFT that do not have personal metadata
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:
Name
Type
Description
supportedImplementations
Asset[]
Array of data about logical-smart contracts for which proxy-contracts can be deployed on the blockchain
Asset:
Name
Type
Description
assetType
AssetType
Value from the token type data dictionary
contractAddress
address
Address of the logical smart-contract
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:
Name
Type
Description
_user
address
The address of the user for whom the array of proxy contracts deployed in the blockchain is being requested
The method returns values:
Name
Type
Description
assets
Asset[]
Array of data about proxy-contracts owned by the user. The description of the data type is given above.

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:
Name
Type
Description
_impl
address
Address of the logical smart-contract for which the check is performed
The method returns values:
Name
Type
Description
isSupported
bool
Boolean value. Flag whether it is possible to deploy a proxy-contract on the blockchain for a logical smart-contract.
index
uint256
Order number from the array of available logical smart-contracts for which a proxy-contract can be deployed on the blockchain.

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:
Name
Type
Description
_user
address
The address of the user for whom the subscription activity is being checked.
The method returns values:
Name
Type
Description
ok
bool
Boolean value. True - the subscription is still valid, active. False - subscription is not valid, inactive.
needFix
bool
Boolean value. True - for subscriptions at the tariff (rate) with the volume of use of provider's services (an indication that the volume available to the user should be reduced each time the subscription is used). False - always for tariff (rate) subscriptions with validity period.

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:
Name
Type
Description
_implAddress
address
Address of the logical smart-contract.
_creator
address
The address that will own the proxy-contract.
name_
string
Name of the NFT-collection.
symbol_
string
Abbreviation of the NFT-collection, e.g.: ELEM.
_baseurl
string
Part of the metadata reference for NFTs that do not have personal metadata
The method returns values:
Name
Type
Description
proxy
address
Address of the proxy-contract deployed in the blockchain.

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.