Marmalade limitations and why Kitty Kads are not on it
TLDR: Marmalade does not support everything Kitty Kads need. Once it does, the full migration effort will be taken. Until then, Kitty Kads will incrementally converge with the Marmalade standard
In this article we’ll go over
- Some preface / opening remarks
- Limitations of Marmalade in general (i.e. what it isn’t)
- What is missing for Kitty Kads
Opening remarks
This is by no way meant to criticize the Kadena project or their team in any way. The Kadena team (rightfully so) went on to improve how NFTs are done elsewhere.
Any issues raised are things that I would like to work on with their team over time or they are already working on.
This also isn’t meant to be a scandal or gotcha for Marmalade.
In general — I want to work on issues one at a time. However recent community events have raised an interest in these so I’m using a different way to raise them.
PS, I’ve been quite vocal about wanting to move Kitty Kads to Marmalade (1, 2) in general when things can support Kitty Kads.
Limitations of Marmalade in general
There are some misconceptions about Marmalade’s ability to solve problems relating to NFTs, so I thought I would clear these up.
This is not meant as criticism or highlighting anything new, nor is it meant to say that Marmalade should do them all — Marmalade was not meant to solve everything, just make things better than before.
I’m just mentioning things to clear up things that have been discussed in various places.
Marmalade does not specify provenance hashes
Provenance hashes are not mentioned in either of the Medium articles (1, 2) or the official tutorial. This is because Marmalade does not allow for “random mints”, so it was not needed.
Provenance hashes were introduced by Babena NFTs to help them with their random mint.
Marmalade does not stop people modifying ledgers
The official team and standard does not discourage people making their own ledgers, its part of the reason things are done via interfaces. In fact it appears they are not concerned by it.
This means that any project using their own ledger, can modify it in theory.
If you’re interested in knowing more about mutability of smart contracts and data on Kadena, I’ve written this article
Using the official Marmalade ledger does not protect against projects maliciously modifying on chain data
The official Marmalade ledger is controlled by the Kadena team, but assuming they are not malicious does not prevent NFT creators that rely on that ledger from being malicious.
The ledger just stores balances. It is the “token-policies” that control core ledger related activity such as whether a transfer or purchase can occur.
Token policies can be implemented by individual projects (by design).
This means that the project owners can mint more NFTs and transfer existing NFTs to anyone they want.
Marmalade does not prevent modifying of images
Marmalade does not stop people modifying images at the location that NFT metadata points to (it just stores a history of the hash to make it easy to check if it was modified). Creators of the project could still modify any image any time.
Marmalade is not the only way to have NFTs on Kadena
There has already been another NFT related interface on Kadena. The poly-fungible-v1 interface was around long before Marmalade and came from the Kadena team.
In general, interfaces do not define what something is, they just allow things to interact together via a common way (API).
As quoted from the ERC-721 standard, it is “a standard API for NFTs within smart contracts”, not the definition of what an NFT is.
What is missing for Kitty Kads
Marmalade is great for simple mints but there are a few things that need to be addressed before Kitty Kads can use it.
Some of these could be due to limitations in the standard, some could be due to practical issues and some could be due to my own inabilities (constructive discussion welcome for these ones ;) )
Also — there will be some hypothetical examples used below. These may or may not be projects planned for Kitty Kads as I’m still exploring how to do them, the time available and benefit to the community.
The reason they weren’t shared earlier is to avoid causing un-neccessary hype as they are still ideas.
NFTs cannot be generated on chain (dynamic content isn’t possible)
To breed Kitty Kads on chain is not possible under Marmalade.
Marmalade requires the pre-uploading of data before an NFT is created.
How a Kitty Kad will look like is not known before hand, this is because breeding will be pseudo-random and done on chain when the user calls the breed function.
The code to generate the image can-not exist on the blockchain because
- It’s too large
- It will allow people to game the system to generate rare-kitties as they can calculate if the kitty should be minted
This is an issue for any game where content is dynamically generated.
It could also an issue for projects (not Kitty Kad gen 0 or gen 1) where the NFTs may be updated after mint for legitimate reasons (i.e. upgrade a sword stat by fighting monsters or buy a new skin etc to update the image).
Trading via a marketplace is not supported by current wallets
To buy an NFT requires a “pact continuation” This functionality is not currently supported by wallets
This is part of the reason there are no live marketplaces (i.e. where you can put up for sale and buy NFTs) available for Marmalade
*Auctions are not possible via Marmalade
In the future it could bring benefit to the community to auction their Kitty Kads. The reasons this is marked with a * is I’m not 100% sure about this and was hoping to engage with the Kadena team at a later point.
This could/would be the first auctions on Kadena and by design be different to how things work.
It may be possible to do it and to come up with ways to make it work within the specifications of Marmalade (since there is an OFFER API) but it may also involve proposing modifications or extensions to be able to handle multiple offers.
*Official Marmalade ledger is only on Chain 8
Some folks suggested to use the official Marmalade ledger. I mark this with a * as it’s not a limitation of Marmalade technically, but people raised it.
Above it already covers that using the ledger still causes problems. In practice though using only Chain 8 is
- Against the multi-chain vision of Kadena
- Prevents development of multi-chain dapps. One example would be to stake Kitty Kads NFTs on different chains to help load balance, educate folks about how cross chains work to help others utilize the multi-chain functionality Kadena has to offer (currently a lot of projects limit themselves to one chain which could cause performance issues in the future)
*Interfaces keep being upgraded
This is a meta point and is less significant, but not insignificant. The standards keep upgrading and it’s clear that it’s still a WIP.
There has been poly-fungible-v1, then poly-fungible-v2, then poly-fungible-v3. It appears that things are still developing (in addition to the points above) and it’d be easier to migrate one things seem more stable.
Closing Remarks
The above does not mean Kitty Kads won’t try to take what’s good from Marmalade and integrate it as part of a long term migration effort. There will be more information on this later.
Also keep in mind, Kitty Kads and most the Kitty Kad efforts have been to bring something new to the community and to advance things.
By design Kitty Kad projects aim to bring something new to the ecosystem whenever they are made. This will involve creating new things before the rest of the ecosystem is ready, making mistakes and helping other projects learn and do better.