Handling Cycles Within the ICP NFT Ecosystem
One of the most interesting benefits of the Internet Computer also creates a challenge entirely unique to our ecosystem. That is reverse gas.
Reverse gas was one of the biggest reasons I became interested in the Internet Computer. I believe that for blockchain to ever gain significant adoption users cannot be required to pay a fee every time they interact with a smart contract. It can be easy for us to forget that these fee payments, however small, still need to be made by someone.
We do not currently have a decentralized long term solution for making sure that NFT canisters are maintained with cycles. Currently, Toniq supplies cycles to all collections that were deployed and still controlled by us, this is a majority of collections in the ecosystem.
Early on we set up a system that automatically tops up all canisters we control with cycles when the balance drops below a certain threshold. This includes canisters that contain the 1) basic NFT code 2) in-canister marketplace code and 3) associated asset canisters that host artwork.
Over the past year we added a payment requirement for creators that goes toward covering the initial cycles balance, however this payment does not cover keeping the canisters alive for an extended period of time and does eventually run out in which case Toniq covers cycles. While this system has worked so far it is not a self-sustaining solution as it primarily relies on Toniq.
There are 2 simpler alternative solutions for this, however I am not a big fan of either one, they are:
One of the most straight forward options would be for creators take over the responsibility of maintaining their canisters with cycles: Personally I do not believe that this is a good solution for a number of reasons:
- Why should creators be required to pay for actions that others take such as 1) Transferring NFTs or 2) purchase using the in-canister marketplace code
- Each collection relies on a single party to keep the collection active
- Marketplace Code (both in-canister or external) will break if a canister goes down. This then quickly becomes an issue that directly affects marketplace functionality
- Some projects do not have a centralized team, and if they do they may not have funds. If you want to have a zero-royalty collection how can you be expected to keep the canisters topped off with cycles
One of the next most straightforward options would be to reverse the reverse gas model for all actions. This change would mean that the user is required to pay a fee for every action they take against the NFT canister, almost exactly like how other blockchains work. This fee would go directly to the NFT canister and its asset canisters.
While this solution would work well, but I believe it to be overkill and takes away a lot of what makes the IC ecosystem soo attractive. The fact that we do not pay a fee to do simple asset transfers, list our assets, or claim a free NFT is what makes us special and I don’t think we should kill that.
So what do I think we can do to improve?
While I haven't been able to think of a 100% foolproof system for this I do think there are a number of things we can do to help improve the availability of these canisters.
1. Community Funding Platform: You could imagine a simple platform that shows all ICP NFT collections, their current cycles balance, how long it will last and an easy way for users to top off collections they like. You could even imagine a world where there are rewards and achievements for users to earn by topping off collections.
2. Payment of In-canister marketplace code fee: This is similar to adding a gas fee except it only exists on purchases. There are a few ways this could be done: One way would be to set the hardcoded fee for the in-canister marketplace code to automatically be sent to the NFT canister and associated asset canisters. Alternatively, these fees could be sent to an escrow canister that then splits the fee across many different collections. This approach would be more ecosystem wide, allowing collections with more volume to help support collections with less volume. A more advanced version of this could have a dynamic list of collections that are included in the list that can be topped off. This list could be based on recent canister activity, DAO vote, etc.
The biggest issue with #2 is that the in-canister marketplace code is optional for building a marketplace. It can be easily circumvented by building an external marketplace canister or smart wallet that uses the public transfer method. This means that if a marketplace wanted to avoid paying the hard coded fee in the NFT canister they could do so and so would avoid the cycles system. (The original MemeCake marketplace worked this way)
The more I think about it the more I believe that some sort of community cycles pipeline would be the biggest benefit to the IC NFT community. Even if it exists primarily as a backup system to catch collections that come close to running out of cycles for one reason or another.
If you can think of any other possible steps we could take to ensure the uptime of IC NFT canisters please feel free to let us know in the comments! It’s an especially interesting challenge because of how unique it is to our ecosystem.
Thanks for listing to my rambling! Glad I got this from my head onto paper.