Skip to content

[Bug]: An expired pending claim leaves a gateway-minted name unresolvable by address #246

Description

@filip-parity

Component

Proof of Personhood

What happened?

A gateway-minted name whose pending claim lapses becomes invisible to any address-based reader, while the user still owns it.

DotnsPopController stashes gateway registrations as pending claims until a user-signed claimLabelStore() settles them. Each entry expires reservationDuration (deploy default 7 days) after its own mintedAt; _claimLabelStoreFor skips expired entries and the permissionless expirePendingClaim sweeps them. The ERC721 stays minted throughout, and the PoP controller writes no reverse record — PopResolver is node-keyed and the gateway pallet's LiteLabelOwner is label-keyed — so after expiry there is no address→label path left: not pendingClaims(address), not a LabelStore (never deployed), not a reverse record.

The truapi host resolves usernames by address (pendingClaims merged with the LabelStore, paritytech/host-rust-core#426, which also filters lapsed entries against reservationDuration so a swept-vs-unswept entry reads the same). For a user who never calls claimLabelStore within the window — the common case today, since nothing in the host or app calls it (settlement needs a user-signed call from a funded, mapped account) — the username silently disappears from every client after 7 days, while ownerOf still returns them.

Expected behavior

Either an address→label read that survives expiry (e.g. usernameNodeOf(address) on the controller, also wanted for provenance in host-rust-core#426 review), or gateway-driven settlement so claims do not sit until they lapse: claimLabelStoreFor(user) exists on the controller (onlyGateway) but the deployed pallet_dotns_gateway has no call that reaches it.

Additional context

Settlement ownership was an open item on paritytech/host-rust-core#397; the conclusion there is that the host cannot do it (no balance, no mapped signer), so it belongs to the gateway pallet/backend or the app. Note #397 referenced #206 for this, which is actually the pre-launch name-claim window UI/CLI issue — this issue is the tracker the reference wanted.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions