LP-0001: rewrite as an NFT extension of LP-0021 and open it - #152
Conversation
✅ Validation passedA reviewer will assess against the prize criteria. Automated check. See solution template and TERMS. |
a6185bc to
3f78af4
Compare
LP-0021 scoped NFTs out so the wallet could ship fungible-asset support quickly. Recast LP-0001 as the prize that fills that gap, following the same extension pattern LP-0022 uses: it builds on the LP-0021 feature set (wallet, Wallet Provider SDK, approval flow) rather than a specific codebase, so the LP-0021 winner, another team, or a fork can all bid. Leads with basic NFT features (own, transfer, collection-grouped display, SDK enumeration and transfer proposals); the private collection-membership proof becomes one criterion among several rather than the whole prize, surfaced through the SDK and a token-gating reference mini app. Adds an Adoption section mirroring LP-0022's structure, including the same-team-vs-fork inheritance rule, and moves the prize to the adoption-first table in README. Prize set at $5,000 / Medium. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…to build on State the baseline wallet adoption rule in one direction: waived for the LP-0021 winning team continuing that codebase, required of every other submission. The previous phrasing stated the rule twice, in inverted order. Reword the Motivation so it does not read as a recommendation to build on another team's codebase, and drop the Out of Scope bullet that repeated it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Drop "continue to" and "Extending" phrasing that presumed a build carried over from LP-0021; state what a submission must do instead, reusing LP-0021's own wording where the criterion is the same. Also remove em dashes. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
"This prize extends a LEZ wallet..." reads as modifying an existing build. State what the prize is for instead, matching the "matching the criteria in LP-0021, covering X" construction used in Scope. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
3f78af4 to
9fd555f
Compare
Nothing stopped a wallet from requiring account access before producing a membership proof, which would defeat the privacy the proof provides. Make proof requests their own SDK capability: a dApp granted only a proof request learns no address, balances, holdings, or the proving token, and a wallet may not demand account access to produce a proof. Require the proof-request prompt to be visibly distinct from an account-access prompt and approved separately, so a user cannot inadvertently share an account address while sharing proof of ownership, and require granted capabilities to be individually visible and revocable. Drop "account selection" from the token-gating flow throughout, since that flow must now work without it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
NFT metadata and media are the one case where a wallet genuinely wants a remote resource, which LP-0021's generic external-services rule does not cover. Require any non-Logos-Storage media fetching to be disclosed, disableable, and non-leaking of which account holds an asset, with the wallet still usable when it is off. Require upload and download of image-sized metadata and media via Logos Storage. State that the criteria are a minimum: submissions may go further wherever a team judges it necessary for adoption, and Out of Scope means not required rather than forbidden. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The criterion covered any source other than Logos Storage, which would have swept in decentralised networks it was never aimed at. Name centralised services instead (HTTP hosts, gateways, CDNs, hosted pinning or indexing APIs) and say explicitly that fetching over a decentralised network the user participates in is not subject to it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The adoption criteria repeatedly call for independent or third parties without saying whether people already building the stack qualify. State it once in the preamble: core contributors are welcome to use the wallet, but do not count toward the numbers. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This reverts commit 44b24ea. Awaiting phrasing from legal. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…erification A proof is only useful if the thing receiving it can check it, and most consumers are not LEZ programs. Require the reference mini-app to show both paths: the proof passed as input to a reference LEZ program that gates an action on the result, and the mini-app verifying the proof in its own code and showing the user what it establishes. Add off-chain verification as its own criterion with a library and the inputs a verifier needs, and require the on-chain verifier and the library to agree on accept/reject outcomes. The on-chain flow remains the one that feeds the adoption criteria. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The adoption criteria cover usability: a wallet that 3 third-party developers build on and 100 accounts use through the mini-app has demonstrated it works better than a recording could. Fold the one requirement the video carried, evidence that proving ran for real rather than in mock mode, into the demo-script criterion the evaluation process already relies on, and extend that script to cover the full proof flow. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Restore the LP-0021 and LP-0023 dependencies with legal's note that the front matter is internal reference and tooling only, matching LP-0022. The README row is already in place, so the reminder comment has served its purpose. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The criterion asks for source-verification status and says a registry meeting or similar to LP-0023's specifications will be suitable. That is a pointer, not a dependency. LP-0023 stays in Resources. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
Reviewed against the private-NFT work I did (ownership + unlinkable transfer + viewing-key disclosure, with a passing POC on the real token program). Solid spec, honest framing. Three notes:
ADD - unlinkable private transfers. Criteria require send/receive from private accounts but never that a private NFT transfer is unlinkable to a chain observer (no sender->recipient edge). That is the core shielded property, and I verified it holds on Logos in my POC (private->private transfer records only commitments, no public owner, no edge). Worth a reliability criterion so "private account support" cannot pass while transfers stay linkable.
QUESTION - proof freshness. Replay resistance is per-context, not per-state. Does a membership proof bind to CURRENT ownership, so someone who transferred the NFT out can no longer gate? For token-gating that matters. Open design point (I have not solved it either), not a copy-this note.
SCOPE - one line stating this is collection-membership proof, not selective disclosure of a specific asset, would stop submitters conflating them.
Otherwise no removals; scope boundaries are good.
# Conflicts: # prizes/LP-0001.md
Adds reliability criteria for unlinkable private-to-private transfers and time-bound proof freshness with per-token proof supersession, and clarifies that the membership proof is collection-level, not selective disclosure of a specific asset. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
| - [ ] **Private transfers are unlinkable.** A private-to-private NFT transfer does not reveal a sender→recipient edge to a chain observer: the on-chain record exposes no public owner and no link between the sending and receiving accounts, consistent with the shielded execution model in [LP-0021](LP-0021.md). | ||
| - [ ] **Proof freshness.** Because a private transfer is not observable on-chain, a membership proof must be time-bound rather than valid indefinitely: it expires after a documented validity window rather than remaining acceptable forever. Generating a new proof for a given token invalidates any previously issued proof for that same token, whether or not ownership actually changed, so a verifier is never relying on a proof older than the holder's most recent one. | ||
| - [ ] The reliability criteria set out in [LP-0021](LP-0021.md) are met: wallet state survives restarts, no mandatory external services, and any remote persistence uses Logos Storage with client-side encryption. | ||
| - [ ] **Fetching media from centralised services is optional and disableable.** NFT metadata and media (images, video, audio) often live off-chain. If the wallet fetches them from a centralised service (an HTTP host, a gateway, a CDN, a hosted pinning or indexing API), that fetching must be disclosed, must be disableable by the user, and the wallet must remain fully functional with it disabled, listing the affected assets by collection and token identifier rather than failing or hiding them. Fetching must not leak which account holds an asset to the operator of that service: the user is told what a fetch discloses, and centralised media services are never contacted for a private account without the user turning it on. Fetching over a decentralised network the user participates in, such as Logos Storage, is not subject to this criterion. |
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
What this does
Recasts LP-0001 from a standalone ZK bounty into LP-0001: NFT Wallet Support and Private Ownership Proof, an extension of LP-0021 following the same pattern LP-0022 uses, and opens it.
LP-0021 deliberately left NFTs out of its criteria to keep its scope to a fungible-asset wallet. This prize fills that gap and turns it into a token-gating primitive dApps can consume.
Key decisions
Adoption criteria
Mirrors LP-0022's structure, including the same-team-vs-fork inheritance rule:
Opening the prize
[OPEN]andStatus: Openadded, matching LP-0021.https://testnet.lez.logos.co), replacing "will be confirmed when this prize opens".Worth a look during review
RISC0_DEV_MODE=0. Per the house rule that prize docs specify product requirements rather than implementation, this is now "proving enabled rather than a development/mock mode": the anti-cheat intent survives without naming a stack.🤖 Generated with Claude Code