Разрешение чеканки NFT только через API

#solidity #nft

Вопрос:

Я разрабатываю контракт на сбор NFT, который имеет отношения между различными NFT. Это означает, что каждый отчеканенный NFT имеет запутанный NFT из одной и той же коллекции (например, NFT № 25 связан с NFT№222 и наоборот). Дело в том, что я хочу иметь веб-сайт, который рандомизирует идентификатор NFT, который покупает пользователь, чтобы он не мог напрямую монтировать запутанный NFT, который может быть редким (и пользователь легко узнает это по внешнему виду).

Короче говоря, я пытаюсь найти способ запретить пользователям чеканить новые NFT, но все равно заставляю их платить комиссию. Единственный способ, которым я, хотя и был возможен, — это развернуть контракт с кодом доступа для чеканки, который будет передан по запросу чеканки из веб-приложения, так что:

 uint256 MINT_PASS;
constructor(uint256 pass) ERC721("NFTexample", "XMP") public {
    CEOaddress = msg.sender;
    MINT_PASS = pass;
}

function minting(address recipient, string memory tokenURI, uint256 _tokenID, uint256 SECRET_CODE) public
    returns (uint256)
{
    require(MINT_PASS == SECRET_CODE);
    uint256 newItemId = _tokenID;
    _mint(recipient, newItemId);
}
 

Существуют ли лучшие и более безопасные реализации для того, что я хочу сделать?