Questions about custom contract deployment

Hi, I have some questions about custom contract deployments that I can’t seem to find definitive answers for through the docs / forums.

My goal is to use override a few functions to enable some custom uri and transfer hooks. I would like to do this without having to use apps/exensions, just by deploying a contract which inherits manifold contracts and overrides where necessary. My initial questions are as follows:

  1. How can I set up a custom deploy from forking the creator-core-solidity repo that takes advantage of ERC-897 to save on gas?

  2. What exactly do I have to implement to make my contract ‘manifold compatible’ (with the website, marketplace, et.c.) This relates to question 1 for how manifold recognizes contracts, ie. do they have to be contracts which reference the onchain core via proxy, can they be custom Manifold deployments, or can it be any ERC721 token contract?

  3. Is there a simpler way I am not understanding for implementing my desired overrides from the Manifold studio? I don’t have an aversion to deploying my own contracts, but want to make sure that it is done in a gas efficient / Manifold-ecosystem-compliant way.

Thank you for helping me clean up my understanding on these points.

  1. I suppose if you want to be able to deploy proxies of creator-core, the way to do it is to write a deploy factory that deploys instances that reference an implementation. The repo itself doesn’t have such a factory, but you could write one.

  2. I’m guessing you mean contracts to be picked up by Manifold Studio. Currently this isn’t possible. We do plan on adding some form of third party contract management in Studio in the future, but it’s not in scope at the moment.

  3. What are you trying to override? This could help me answer your question. Extensions might solve the items you’re trying to address, but without more context I’m not sure.

Thanks for the additional insight. I want to create my own custom override, or extension, to create a unique behavior changing the uri upon transfer. What would be the way to do this? I suppose I’m not clear if I should deploy my own custom token contract, or just the extension that references an existing contract on chain. And in the latter case, how to create such an extension.

You can do this with an extension. Extension docs can be found here:

And examples of extensions can be found here:

Thank you. Some follow up questions which aren’t specifically covered / illustrated in the docs.

How exactly is a mint override created within an extension? The docs have an unimplemented mint override function, but its not clear to me how that function will call the underlying minting code within the creator core contract.

Additionally, using the tokenURI function in an extension declares not to provide a uri during a mint process to avoid conflicts. How then, should I be able to supply the mint extension function with URIs? In my case, I am using the mintExtensionNew function.