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.
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.
DotnsPopControllerstashes gateway registrations as pending claims until a user-signedclaimLabelStore()settles them. Each entry expiresreservationDuration(deploy default 7 days) after its ownmintedAt;_claimLabelStoreForskips expired entries and the permissionlessexpirePendingClaimsweeps them. The ERC721 stays minted throughout, and the PoP controller writes no reverse record —PopResolveris node-keyed and the gateway pallet'sLiteLabelOwneris label-keyed — so after expiry there is no address→label path left: notpendingClaims(address), not aLabelStore(never deployed), not a reverse record.The truapi host resolves usernames by address (
pendingClaimsmerged with theLabelStore, paritytech/host-rust-core#426, which also filters lapsed entries againstreservationDurationso a swept-vs-unswept entry reads the same). For a user who never callsclaimLabelStorewithin 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, whileownerOfstill 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 deployedpallet_dotns_gatewayhas 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.