From 3d62b5b11969575b1e080e922a95fe34b5a6e8f4 Mon Sep 17 00:00:00 2001 From: Kieran Simkin <382129+kieransimkin@users.noreply.github.com> Date: Wed, 18 May 2022 05:08:02 +0100 Subject: [PATCH 1/7] Initial Smart NFTs commit --- CIP-0054/README.md | 193 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 193 insertions(+) create mode 100644 CIP-0054/README.md diff --git a/CIP-0054/README.md b/CIP-0054/README.md new file mode 100644 index 0000000000..2c1c83166d --- /dev/null +++ b/CIP-0054/README.md @@ -0,0 +1,193 @@ +--- +CIP: 54 +Title: Cardano Smart NFTs +Authors: Kieran Simkin +Comments-URI: https://forum.cardano.org/t/cip-draft-cardano-smart-nfts/100470 +Status: Draft +Type: Standards +Created: 2022-05-18 +License: CC-BY-4.0 +--- +# Cardano “Smart NFTs” + +## Abstract + +This CIP specifies a standard for an API which should be provided to Javascript NFTs, it also defines some additions to the 721 metadata standard defined in [CIP-0025](https://github.com/cardano-foundation/CIPs/tree/master/CIP-0025) which allow an NFT to specify it would like to receive certain current information from the blockchain. + +Currently if an NFT creator wishes to change or otherwise “evolve” their NFT after minting, they must burn the token and re-mint. It would be very nice if the user were able to modify their NFT simply by sending it to themselves with some extra data contained in the new transaction metadata. This would allow implementation of something like a ROM+RAM concept, where you have the original immutable part of the NFT (in Cardano’s case represented by the original 721 key from the mint transaction), and you also have a mutable part – represented by any subsequent transaction metadata. + +It would also be nice to be able to retrieve data that has been previously committed to the blockchain, separately to the NFT which wishes to access it. This would be useful for retrieving oracle data such as current Ada price quotes – as well as for allowing an NFT to import another NFT’s data. + +Further to this - for on-chain programatically generated NFTs, it makes sense to mint the code to render the NFT as one token, and then have the individual NFTs contain only the input variables for that code. This CIP specifies an additional metadata option which specifies that an NFT should be rendered by another token - this will massively reduce code duplication in on-chain NFTs. + +This combination of functionality enables many exciting new possibilities with on-chain NFTs. + +## Description: + +Currently the NFT sites which support on-chain Javascript NFTs do so by creating a sandboxed `