Hey everyone,
After talking to some folks in the community (artists, artist managers, devs) and a 2h discussion internally to make things better for the future of Cardano, I decided to post this CIP proposal on a parallel or different royalties standard before the current one is merged.
Software is opinionated, and I’m just sharing my thoughts on the current proposal and how we can make it better. I would like to start a constructive conversation around enabling all artists to create and collaborate on Cardano, without focusing on either high-volume or 1/1 collections, with the creatives’ user experience and cutting costs wherever possible always on mind. Please give me feedback on this proposal and take everything I write with a grain of salt. I understand some projects started working with the current proposal, but it hasn’t been merged yet.
If a lot of people already implemented the proposed royalties standard, I can of course comply, but I just don’t believe in the long-term vision of the currently proposed royalty standard.
Backstory
Artano was one of the first (if not the first) to put royalties in an NFT metadata in July 2021, during our first auction. This was also the first automated UI-based auction, outside of the discord space on Cardano.
The royalties data structure that was chosen was a quick solution, and we didn’t give it much thought: you have an object with an address and a royalty percentage. Now we understand that this was not good for the network, and that it was also not good for the artists who would like to collaborate and add more than 1 royalty address. Only 15 iNFTs were minted with this royalties implementation that’s on the chain right now.
What is the problem with the current standard?
The current standard was made to fit large collections of hundreds or thousands of NFTs, where you would want to set a single royalty fee with the unnamed token per policy. This means you’d pay the extra ADA for the royalties token ONCE if you have a big collection. Under that policyID you must have the same royalties/addresses for each of your NFTs under the policy, which is predefined upon minting and decided by a centralized authority. We run into a problem when it comes to 1/1 NFTs, donations or collaborations, where people might want to distribute royalties differently with each NFT they mint:
-
Collaborations would be more centralized: The problem is when it comes to collaborations of 2+ artists under 1 policyID; they have to agree on a single royalty fee according to the current standard; it does not work well for single policyID collaborations, where artists work on a common theme, without relying on a centralized authority to decide royalty fees for them. This also means that 2 artists have to receive the same royalties in a collaboration to one address, even though one of them might be “pulling the weight” of the project, and has more experience/did more work. Writing a smart contract for this is possible, but it would be an overkill for something that could be solved through a simple json object array (more about this below).
-
Unnecessary dependency between PolicyID and Royalties: You cannot change a royalty fee on your NFTs, unless all of them have separate policy IDs. This creates a dangerous dependency of unrelated data: policy IDs and royalties.
a) Burdening approval processes: Linking royalties to policyIDs would lead to creating more policyIDs, which would further burden other marketplaces that rely on approving projects by policy ID (especially for people who mint outside a marketplace). It would take marketplaces like CNFT.io a lot more time to approve each 1/1 NFT, since artists would only be able to change royalties if they mint an NFT with a new policy.
b) Current standard isn’t future proof: You have to create a new policy ID, just to create a new royalty - we’re creating a dependency that could give us headaches in the future. PolicyID should just be a signature by which an artist is recognized, not tied to other parts of the metadata.
Comment: This isn’t fixed by storing approved IDs on each marketplace’s repo, since it excludes independent artists and projects that don’t want to rely on any marketplace. We’re just creating more policyIDs in order to distribute royalties - again, an unnecessary dependency.
-
There’s an unnecessary cost of minting an unnamed token, just to set a json object. This can actually be done off-chain or by checking the initial state of the NFT when it was minted from the ledger.
-
The current solution might not scale over time, when there are thousands of creatives making 1/1 NFTs, where each NFT has its own royalty. Ten years from now, we might have hundreds of thousands of artists, and each of them could have hundreds of policy IDs, since they will collaborate, or want to donate to a different charity with each NFT. Yes, storage is getting cheaper, but why add this unnecessary (computational) cost.
The proposal
I propose that the royalties are independent and decoupled from policyID’s. Each artist and project should specify their royalty percentage independently, per mint. This means that there’s no need to create new policies, just for the sake of changing royalties. This proposal gets rid of a dependency in the metadata of 2 unrelated elements (signature/ID and commissions/royalties) and lowers the number of needed policyIDs, which will be increasingly many in the years to come.
The proposal is to have a simple link that is part of the metadata. Yes, this gives people opportunities to change their NFT royalties, but we can always refer back to the initial state of the NFT when it was sold from the ledger. This also allows changing royalties before the first sale happened.
Therefore I propose the following:
777: {
addrX: pctY
addrZ: pctXY
...
}
EDIT:
The smart contract would just have to read an object of key/value pairs and distribute appropriate percentages upon sale.
If you have any comments or amendments to this proposal, I’m always open to feedback. If you think this proposal is crap and it gets rejected because the community already started implementing according to the old standard (even though it wasn’t approved), I can comply and understand the hassle, but I believe we can do better, especially with scaling and user-friendliness to non-Cardano natives in mind (especially artists, to whom understanding the intricacies of policyIDs and how royalties are implemented on Cardano are an overkill).
Remember, NFTs should be accessible to creatives and we want to expand Cardano to more artists, not just developers or people who are already in the Cardano ecosystem.
PS. This is not to invalidate anyone’s hard work, but to improve the current standard proposal. If we can do this by tweaking the current proposal and decoupling royalties from policy, that would be great, but I don’t see a solution at the moment. Also ideas on going on-chain with this thru SCs would be much appreciated, to exclude having this as a link off-chain.