Skip to content

feat(userId): worldAdsIdSystem submodule — World ID verified credential as a world.org EID#6

Merged
bokelley merged 1 commit into
scope3_rtd_fixesfrom
worldads-idsystem
Jun 12, 2026
Merged

feat(userId): worldAdsIdSystem submodule — World ID verified credential as a world.org EID#6
bokelley merged 1 commit into
scope3_rtd_fixesfrom
worldads-idsystem

Conversation

@bokelley

Copy link
Copy Markdown

Adds a worldAdsIdSystem userId submodule that emits the World ID verified-identity credential — stored first-party by the World Ads drop-in after a World ID ceremony — as a world.org EID, so it rides the bid request and an operator can verify-before-trust the proof.

This productionizes the pilot (a per-page pubProvidedId eidsFunction) into a proper, named, upstreamable submodule.

Emitted EID

source: "world.org"
uids[0]: { id: <rp-scoped nullifier>, atype: 3,
           ext: { stype: "other", proof: <full World ID verify response> } }

id is the nullifier (match/dedup hint); ext.proof is the verifiable credential. Consumers should verify the proof and key on the verified nullifier.

Config

pbjs.setConfig({ userSync: { userIds: [{ name: 'worldAds' }] } });

No params/storage — the drop-in owns the storage (_worldads_nf + _worldads_proof, read via getStorageManager).

Verified

Built into the scope3 prebid build and tested live: with pubProvidedId neutralized, worldAds alone emits the world.org EID with the proof (proofIdentifier: proof_of_human). Prebid does not strip uids[].ext.proof.

v2 (follow-up, not in this PR)

ext.proof carries the raw verify response — appropriate for a controlled operator-only path. For an open bidstream it should be a token sealed/encrypted to the operator's key (only the operator decrypts), not the raw proof. Tracked as v2.

🤖 Generated with Claude Code

Emits the World ID verified credential the World Ads drop-in stored first-party
as a world.org EID: uids[0].id = the RP-scoped nullifier, uids[0].ext.proof =
the full verify response, so an operator can verify-before-trust. Config is just
{ name: 'worldAds' } (no params/storage — the drop-in owns the storage).
Replaces the per-page pubProvidedId eidsFunction pilot.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@bokelley bokelley merged commit acb0685 into scope3_rtd_fixes Jun 12, 2026
1 check failed
@bokelley bokelley deleted the worldads-idsystem branch June 12, 2026 10:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant