Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

syncing custom nft folders #3

Open
grachyov opened this issue Jun 4, 2024 · 3 comments
Open

syncing custom nft folders #3

grachyov opened this issue Jun 4, 2024 · 3 comments

Comments

@grachyov
Copy link

grachyov commented Jun 4, 2024

hi, i am looking to discuss the possible ways to sync custom nft folders.

i am currently implementing folder sync for the nft folder app.

wonder if there is a way to come up with a standard approach to syncing nft folders that could be adopted.

below is a wip approach – would love your thoughts and criticism.

syncing custom nft folders

organize nfts into folders and see the same custom folders in zora, opensea, rainbow, etc.

what could be a good standard way to sync a custom folders structure?

proposal:

nft folders + ethereum attestation service

1️⃣ upload SyncedFolderSnapshot json to ipfs

struct SyncedFolderSnapshot: Codable {
    
    let formatVersion: Int
    let uuid: String
    let nonce: Int
    let timestamp: Int
    let address: String
    let rootFolder: SyncedFolder
    
}

struct SyncedFolder: Codable {
    
    let name: String
    let nfts: [NftInSyncedFolder]
    let childrenFolders: [SyncedFolder]
    
}

struct NftInSyncedFolder: Codable {

    let chainId: String
    let tokenId: String
    let address: String
    
}

2️⃣ create an attestation with SyncedFolderSnapshot ipfs cid

static func attestFolder(address: String, cid: String) -> URL? {
    let inputString = cid.toPaddedHexString()
    return URL(string: "\(easScanBase)/attestation/attestWithSchema/\(nftFolderAttestationSchema)#template=\(address)::0:false:\(inputString)")
}

https://base.easscan.org/attestation/attestWithSchema/0x39693b21ffe38b11da9ae29437c981de90e56ddb8606ead0c5460ba4a9f93880#template=0xE26067c76fdbe877F48b0a8400cf5Db8B47aF0fE::0:false:0x0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003b6261666b726569626437617376627864676d37746e746c676665636a736d743272686d6f78737a366176756d746175687068756e666872357461790000000000

3️⃣ get the latest attestation

using easscan graphql api

curl --request POST \
    --header 'content-type: application/json' \
    --url 'https://base.easscan.org/graphql' \
    --data '{"query":"query Attestation {\n  attestations(\n    take: 1,\n    orderBy: { timeCreated: desc},\n    where: { schemaId: { equals: \"0x39693b21ffe38b11da9ae29437c981de90e56ddb8606ead0c5460ba4a9f93880\" }, recipient: { equals: \"0xE26067c76fdbe877F48b0a8400cf5Db8B47aF0fE\" }, attester: { equals: \"0xE26067c76fdbe877F48b0a8400cf5Db8B47aF0fE\" } }\n  ) {\n    attester\n    recipient\n    decodedDataJson\n    timeCreated\n  }\n}","variables":{}}'

4️⃣ get SyncedFolderSnapshot json corresponding to the latest attestation

https://ipfs.decentralized-content.com/ipfs/bafkreibd7asvbxdgm7tntlgfecjsmt2rhmoxsz6avumtauhphunfhr5tay

5️⃣ get nfts from an api of your choice

use SyncedFolderSnapshot to display nfts in folders

@grachyov
Copy link
Author

grachyov commented Jun 6, 2024

made a repo with an updated description of the wip approach https://github.com/lil-org/how-to-sync-nft-folders

not sure if this way would work for other apps

collecting feedback on it now

let me know if you get a chance to take a look at it

@iainnash
Copy link

Hi! This approach looks good at a glance.

Are there any specific questions you want feedback/help with?

@grachyov
Copy link
Author

@iainnash thanks for taking a look at it.

something for the future:

if zora ever adds pinned albums / folders to the minted tab, it'd be cool if these were synced onchain too.

wonder if syncing via eas would work for zora in that case.

12345

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants