xch-dev / xch-dev/sage

Edit XCHandles NFT metadata atomically

Open
#873 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement nfts rpc ui
Dominant language
Rust
Stars
59
Forks
34
Avg merge
4d 14h
Merged PRs (30d)
31

Description

Parent: #867
Depends on: unified XCHandles profile modeling under #867.

Summary

Support full, atomic metadata replacement for XCHandles NFTs instead of Sage's existing append-only NFT URI update path.

Scope

  • Use AnyMetadataUpdater / Nft::transfer_with_metadata and HandleNftMetadata for compatible handle NFTs.
  • Add typed request/response models and validated UI fields for display name, avatar/image, resolved address/profile fields, URIs, and hashes supported by the protocol.
  • Preview the exact old/new metadata and resulting launcher/owner relationships before signing.
  • Verify the confirmed NFT metadata and live registry mapping after submission, refresh caches, and surface mismatch/change warnings.
  • Keep ordinary NFT URI updates unchanged.

Acceptance criteria

  • A compatible owned handle NFT can atomically replace all supported metadata fields.
  • Invalid metadata, hashes, URIs, unsupported updater puzzles, and non-owned NFTs are rejected before signing.
  • Confirmation clearly distinguishes local display data from on-chain metadata.
  • Post-confirmation verification detects unexpected metadata or registry changes.
  • Simulator tests cover blank-to-populated and populated-to-updated handle metadata without changing launcher identity.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with parent issue #867 and the unified XCHandles profile modeling it describes, then trace the existing Sage NFT URI update path. Read the AnyMetadataUpdater, Nft::transfer_with_metadata, and HandleNftMetadata interfaces before defining the request, response, validation, preview, and verification boundaries. Done means the acceptance criteria pass, including simulator coverage for blank-to-populated and populated-to-updated metadata.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
blockchain
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.