Skip to content

RFC: NFT Purses #512

Description

@gp0p3

Description

For unlinkability and anonymity reasons, Scarcity was designed to have a single NFT per account. For this reason, it was decided to implement the same functionality as for Coinage for NFTs - NFT Purses. The main functionality expected from the NFT Purses is to retrieve all purses/accounts holding NFTs, easily get the next available account to mint an NFT to, and easily send an NFT from one person to another without knowing the recipient's address.

Motivation

Reading a user's NFTs involves iterating through all derived accounts and checking each for NFT holdings. The same functionality will be used in multiple products. Having it in the host API means a reusable SDK that will improve the dev experience and code quality. Additionally, this will solve the issue with sending an NFT to your contact.

Requirements

  • Retrieve all accounts for the current user that hold NFTs in a single query, without probing derived accounts one by one.
  • Get the next free account to mint or receive an NFT into.
  • Send an NFT to another person without knowing their address: the recipient side is resolved for us.
  • By default, everything stays inside the calling product's context, so accounts from different products cannot be linked to each other or to the person.
  • A product can share its purses with declared friendly products. For example, Jollity also mints collectibles and should mint into the Scarcity purses.
  • Same behaviour on every host (desktop, mobile, web).

Nice to have

  • Send several NFTs to the same person in one action. Each item requires its own empty account on the recipient side. The recipient side is resolved once and yields one destination per item.

Activity

  1. added theissue type on Aug 26, 2026
  2. valentyna-kozlova commented on Sep 7, 2026

    @valentyna-kozlova

    Hi @gp0p3, thank you for such a detailed ticket! Just to be completely sure: are the purses REQUIRED for R2 or can we start with the main purse (like for coinage) and later move to multi-purse system? This info will help us prioritize 🙏

  3. gp0p3 commented on Sep 7, 2026

    @gp0p3
    Author

    @valentyna-kozlova, if the requirements above are met, starting with the main purse is fine for R2.

    One thing to clarify: does this mean a single main purse holding all NFTs, one derived account per NFT, shared by every product, so Jollity and Scarcity mint into and read the same accounts? And would NFT accounts sit on their own branch under it, so listing them never returns coin accounts?

    One question for later: when the multi-purse system lands, what happens to the NFT accounts already under the main purse? Do they stay listable where they are, or would items have to be transferred on chain to new accounts?

  4. valentyna-kozlova commented on Sep 14, 2026

    @valentyna-kozlova

    UPD: all the questions above are not relevant as we have concluded that NFT purses are a blocker for R2.

  5. added
    EpicEx Tracking issue: scope of work per functionality per release, progress lives in subissues
    on Sep 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

ContactsContact and host-rendered overlay workstreamEpicEx Tracking issue: scope of work per functionality per release, progress lives in subissuesNFTs R2R2 blockerMust be done for R2ScarcityScarcity SPArfc

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions