GhostNFTs
GhostNFTs - Enabling multichain NFTs - Typically for services like ENS, PFP or Token Gating
Screenshots



Problem Statement
This description isavailable hereas PDFmarp: true theme: default backgroundColor: #fff paginate: true footer: "Ghost NFTs - ETHGlobal SuperHack 2023"ETHGlobal SuperHack 2023Ghost NFTsEnabling multichain NFTsSummary1- Solo / Team 2 - Vision 3 - Ghost NFTs 4 - SmartContract 5 - Future 6 - ContactSolo / TeamZapaz :co-founder and lead dev @KredeumETHGlobal finalist early 2021 with Best AAVE FlashLoan Projectcurrently Formal Verification Audits contests with Certora for AAVE, GMXKredeum :team of 5 Web2 entrepreneurs passionate about Web3Kredeum NFT Factory : existing Open Source platform with multichain NFTs (BUT only for Soulbound NFT)Grants via GitCoin, Polygon, Swarm and The GraphVisionNFTs should be multichain: you own an NFT on one chain, you should be able to own it on any other chains.Typically for services like ENS, PFP or Token GatingBut exchanging these multichain NFTs is challenging! After a transfer, how to ensure same owner on every chain ?Ghost NFTs - RegistryGhostNFTs is a registery of NFTs (quite similar to ERC6551 registry), available on any chain at a deterministic address.It registers Ghost NFTs: a lite copy of the original NFT with Ghost Data that includes owner, tokenURI and the timestamp of the snapshot.With Ghost Data, most of NFT service like ENS, PFP or Token Gating can be use on any other chainGhost NFTs - SyncingGhost NFTs are synced threw different networks with the help of inter-blockchain messages, containing Ghost Data, with service like: LayerZero, Hyperlane or CCIPFor simplicity, only one type of message is exchanged between GhostRegistry of different chains : theghostSyncmessage that only includes this Ghost Data :struct GhostData { uint256 ghostId; uint256 chainId; address collection; uint256 tokenId; address owner; string uri; uint256 timestamp; }Ghost NFTs - Basic rulesTo ensure coherent syncing of ownership and metadata over chains, 3 basic rules are defined for a GhostRegistry receving aghostSyncmessage:1/ when received by the original chain of the NFT: Ghost Data is updated with current onchain NFT data: owher, tokenURI and timestamp, then replied back to sender2/ when received on another chain2.1/ and received timestamp is less recent than registered one, nothing is updated localy, but more recent local Ghost Data is sent back to sender2.2/ and received timestamp is more recent than registered one, Ghost Data received is registered, with no reply to senderSmartContractA reference smartcontract implementation in solidity is available here :GhostNFTs.solLocal demo via foundry tests can be run onGhostNFTs repo.Inter-chain communication with LayerZero is still under devlopmentFuture 1/2Continue testing and development multichainImplement ENS specific feature (as ENS is not an ERC721 metadata collection)Full implemention with at least one communication layerPropose Ghost NFTs as an EIPGhostNFTs could be combined with ERC6551 registry...enhance multichain transferFuture 2/2propose UI requirement : Ghost NFT could be forced to be « grey », with no colorImplement in Kredeum Factorydevelop transferEverywere function inside ERC6551 Bound AccountsImplement specific feature to any specific NFT collectionContactΞ zapaz.eth @ alain@kredeum.com X@papaz
Solution
Ghost NFTs (1/3)GhostNFTs is a registery of NFTs with these properties :GhostNFTs is an ERC721 Metadata NFT collectionone GhostNFTs singleton may exists on each evm chain with same deterministic addressghost NFT can be registered on same or another evm chain than original NFTghost NFT owner is synced to NFT owner AT a specific timestamp of original chainghost NFT tokenId (also named ghostId) is a hash of chainId, collection address and tokenId of original NFTGhost NFTs (2/3)when original NFT collection is ERC721Metadata : ghost NFT tokenURI is original NFT tokenURIGhostNFTs communicates from any chain to the chain of the original NFT with the help of inter-blockchain communication service like: LayerZero, Hyperlane or Chainlink CCIPGhostNFTs only communication function isghostSync, that enable to propagate NFT metadata (or ghostData) threw chainsghostData is only synced / updated when timespamp is bigger thant last oneOnly orginal NFT chain can update ghostData timestamp, with online NFT data and snapshot timestampGhost NFTs (3/3)GhostData have fixed fields : chainId, collection address, tokenId and ghostId (a combination of 3 previous ones)GhostData, for this first version, has 3 snapshops data fields : owner, uri and timestamp (i.e. last timestamp of the snapshot data on the original chain)
Hackathon
Superhack
2024
Contributors
- zapaz
20 contributions