feat(individuality): the free lite-personhood game sign-up - #350
Open
peetzweg wants to merge 3 commits into
Open
feat(individuality): the free lite-personhood game sign-up#350peetzweg wants to merge 3 commits into
peetzweg wants to merge 3 commits into
Conversation
…ions Pure helpers consolidating what dim2 and humanity each hand-roll: productContext / contextSuffixBytes (the RFC-0024 Index/Raw expansion), personhoodContext with the peopl context index map, ringCollectionId with peopleRing / litePeopleRing, and readScoreContext, which checks that Score.score_context is the product derivation of peopl.<Score.Suffix>/Index(0) and reports a literal (non-host-mintable) context as NotProductDerived on the ok channel. Product ids are always full DotNS ids; the TLD is never defaulted. Pinned in-source against previewnet's published constants (spec 1000036), both collection ids, and the dim2/game context vectors. Part of the lite personhood sign-up flow (product-sdk#286).
…igin The PeopleLiteAuth sibling of withAsPerson, on the same metadata-driven machinery: AliasWithAccount for calls signed by an account bound to the lite alias (the free Game.sign_up_with_account_lite_invite leg), AliasWithProof for the unsigned ring-VRF-authorized PeopleLite.set_alias_account bind leg, and AliasWithAccountRevised to refresh a stale binding over the pallet's (implication, "revise", account, nonce) tuple. The slot patching, nonce read-back, proof-request guards and pipeline cache that as-person-signer.ts kept file-private move to an internal origin-extension.ts both signers share; the codec's context and proof width guards are exported for the second encoder. Proof-variant bytes are pinned against the encoding verified live on previewnet, and the devnet blob - whose PeopleLiteAuthData predates the RevisionIndex field - is the negative case proving the round-trip guard rejects a field-list mismatch loudly. No behaviour change for withAsPerson.
…builder Game.sign_up_with_account_lite_invite is the Pays::No, deposit-free game sign-up a lite person's bound account submits under withLiteAlias(AliasWithAccount). signUpWithLiteInviteTx builds it unsigned with the account sign-up's width and count guards; the shared identifier-key and airdrops-argument code moves into helpers both builders use. readLiteSignUpRequirement is readGameSignUpRequirement plus the lite gates, at one pinned block: the PeopleLite.AccountToAlias binding and its context against Score.score_context (via readScoreContext), the forever Game.LiteInvites pin (the blocker names the invited account), the lite-person marker, the optional Members ring-membership check, and the context-derivability answer. Its LiteSignUpBlocker union is parallel to SignUpBlocker rather than widening it, so exhaustive consumers of the account read keep compiling; every lite arm blocks the sign-up itself and the draw-only split carries over unchanged. readGameSignUpRequirement's body becomes runSignUpRequirementRead, taking an optional snapshot the way runGameRead does, so the composed read pins once. The new LiteSignUpChain contract is satisfied by paseo and previewnet and asserted negatively for devnet, which predates Game.LiteInvites and the call.
5 tasks
Imod7
changed the base branch from
feat/individuality-with-lite-alias
to
main
September 2, 2026 11:06
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #348. The sign-up piece of the lite-personhood flow (#354): the fee-free
Game.sign_up_with_account_lite_invitebuilder and the read that says whether either leg of the two-transaction lite sign-up is worth submitting.Why: dim2 hand-rolls this today; humanity-spa is about to need the same reads for the vouch flow, and the blockers (invite pin, binding context, ring membership) are easy to get subtly wrong from the pallet docs alone.
How:
readLiteSignUpRequirementruns the existing account requirement read plus the lite gates at one pinned block —PeopleLite.AccountToAlias(and its context vsScore.score_contextviareadScoreContext),Game.LiteInvites(which pins forever the one account a lite person may invite),PeopleLite.LitePeople, opt-inMembers.Membersring membership. One deliberate judgment call:LiteSignUpBlockeris a parallel union (SignUpBlocker | <6 lite arms>) rather than a widening, so existing exhaustive consumers of the account read keep compiling on upgrade.signUpWithLiteInviteTxshares the identifier-key and airdrop-VRF guards withsignUpWithAccountTx(the account path's body moved unchanged into a shared internal; public API untouched).Game.CommunicationIdentifiersbeing rewritten on every sign-up is deliberately never a blocker.Semantics verified against the pallet source and the flow that ran live on previewnet (spec 1000036) on 2026-08-28. 475 package tests pass; workspace build + typecheck + 1,862 tests + biome clean; contract test pins paseo + previewnet and rejects devnet (predates
Game.LiteInvites).