On-chain Interactivity of NFTs: Making NFTs metaverse-compatible with Meta-actions
Opening a discussion about the best way we could find to make NFTs metaverse-compatible, and even more than just that, finding a way for NFTs to actually expose to consuming platform that they have an on-chain API available.
Quick Example: being able to tend to your cat needs directly in Cryptovoxels.
Problem
Today if I create the next super NFT everyone wants, there is a big chance that I would like for it to be importable in current and future VR worlds and Metaverse.
However, more than just being able to import it, I will want users to be able to interact with this NFT.
As an example, this week a project allowing people to purchase a Bonsai NFT came out, and people have been thinking “however it would be nice to be able to tend to the bonsai. Water it. Cut it.”
But today, those actions, if they were possible on the website of the NFT creator, would have to be specifically coded for this specific NFTs to be able to work in Metaverse. Because there is right now no API that allows NFT creators to expose the existence of actions to the consuming platforms.
Start of a solution
In Web3 and solidity programming, we have something similar: We need an ABI to be able to interact with a contract. Without the ABI, we can not know what are function names, nor what parameters we have to pass.
What if we were finding a way to do the same things for NFTs?
What if in the NFT JSON metadata - or somewhere on-chain, we had a field that actually tells consuming platforms:
“Hey there are actions possible on this NFT, you can even integrate it directly in your metaverse” with a list of actions and definite parameters:
Example:
{
"name": "Bonsai #1",
"description": "The super Bonsai",
"image": "ipfs://ipfs/Qx...",
"low_poly": "ipfs://ipfs/Qx...",
"contract": "0xdeadbeef...",
"meta_actions": [{
"name": "Water Bonsai",
"functionSignature": "waterBonsai(uint256)",
"inputs": ["tokenId"],
"user_type": "owner"
},{
"name": "Trim Bonsai",
"functionSignature": "trimBonsai(uint256)",
"inputs": ["tokenId"],
"user_type": "owner"
},{
"name": "Compliment Bonsai",
"functionSignature": "complimentBonsai(uint256)",
"inputs": ["tokenId"],
"user_type": "guest"
}]
}
inputs
would be a definite list of keywords that consuming platforms would know. (I can think of contract, tokenId, recipient, amount, …) that would be “self explanatory”
user_type
would also be a deinite list of keywords that would mostly expose if this action is disponible to anyone or just owner
→ this is an example, it’s not the proposed form of it, I’m opening a discussion with ideas here
Something in this direction would actually allow all Metaverse, when someone loads a Bonsai in their world, to display “possible actions” that the owner can actually do directly in the metaverse, without having to go away
I haven’t seen this presented somewhere and can’t find any EIP for this but I think this is the next big step we will have to make for interoperability of NFTs.
Is this something worked on, and if not, what are you thinking about this?