I am trying to create a smart contract (for ERC721) that artists can use to mint on their own contract instead of the shared contracts of OS, Rarible etc.

The contract is ready, but we have one bug we can't seem to resolve..

So i deploy the contract from my wallet, then I do an transferOwnerShip to the creator. When the creator the mints, the contract shows me as creator because i deployed the contract.

Does anybody have a solution for this?

i'll paste my mint method here, so you can see what we have: (i am extending the ERC721.sol from openzeppelin)


 * @dev Mints a NEW Token.
 * Only allowed for addresses that have the minter role.
function mint(string memory _tokenURI) external onlyMinter
    require(bytes(_tokenURI).length != 0, "ERC721Creator: Missing tokenURI");
    _lastTokenId += 1;
    _safeMint(msg.sender, _lastTokenId);
    _setTokenURI(_lastTokenId, _tokenURI);
    tokenCreators[_lastTokenId] = msg.sender;


1 Answer 1


The "clones" proxy was set up exactly for this purpose.

Please see the specification in EIP-1167 and their use cases.

But in general:

  1. You deploy your template code once
  2. For each customer deployment, you deploy a proxy to the underlying contract
  3. During customer deployment, you initialize any permissions necessary to vendor it for them

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.