PageSourceSearch

https://socialconnect-docs.vercel.app/_next/static/chunks/pages/faq-c9ff246952a7924c.js

js socialconnect-docs.vercel.app collected 2026-10-03 07:46:18 UTC 15,503 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[746],{7035:function(e,t,i){(window.__NEXT_P=window.__NEXT_P||[]).push(["/faq",function(){return i(2692)}])},2692:function(e,t,i){"use strict";i.r(t),i.d(t,{__toc:function(){return d}});var n=i(2676),s=i(1662),r=i(8371),a=i(7229);i(1647);var o=i(5056);let d=[{depth:2,value:'What is a "plainTextIdentifier"?',id:"what-is-a-plaintextidentifier"},{depth:2,value:'What is an "obfuscatedIdentifier"?',id:"what-is-an-obfuscatedidentifier"},{depth:2,value:'What is an "identifier prefix"?',id:"what-is-an-identifier-prefix"},{depth:3,value:"How do we differentiate between Alice verified using Twitter and Github?",id:"how-do-we-differentiate-between-alice-verified-using-twitter-and-github"},{depth:2,value:'What is a "pepper"?',id:"what-is-a-pepper"},{depth:2,value:'What is an "unblinded signature"?',id:"what-is-an-unblinded-signature"},{depth:2,value:"What is an Issuer?",id:"what-is-an-issuer"},{depth:2,value:"Does Issuer need to pay for gas?",id:"does-issuer-need-to-pay-for-gas"},{depth:2,value:"Does Issuer need to have ODIS quota?",id:"does-issuer-need-to-have-odis-quota"},{depth:2,value:"What is cost to register a user?",id:"what-is-cost-to-register-a-user"},{depth:2,value:"Can I just lookup users and not register them?",id:"can-i-just-lookup-users-and-not-register-them"},{depth:2,value:"Can anyone become an Issuer?",id:"can-anyone-become-an-issuer"},{depth:2,value:"What are some security & trust assumptions differences between the ASv1 vs. Social Connect?",id:"what-are-some-security--trust-assumptions-differences-between-the-asv1-vs-social-connect"},{depth:2,value:"What's the best way to map an address returned by lookupAttestations to the issuer?",id:"whats-the-best-way-to-map-an-address-returned-by-lookupattestations-to-the-issuer"},{depth:2,value:"Is there a convention for phone number format?",id:"is-there-a-convention-for-phone-number-format"}];function _createMdxContent(e){let t=Object.assign({h1:"h1",h2:"h2",p:"p",code:"code",h3:"h3",a:"a",strong:"strong",table:"table",thead:"thead",tr:"tr",th:"th",tbody:"tbody",td:"td",pre:"pre",span:"span"},(0,o.a)(),e.components);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{children:"FAQ"}),"\n",(0,n.jsx)(t.h2,{id:"what-is-a-plaintextidentifier",children:'What is a "plainTextIdentifier"?'}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"plainTextIdentifier"})," is any string of text that a user can use to identify other user."]}),"\n",(0,n.jsx)(t.p,{children:"Phone number, Twitter handle, GitHub username anything that makes it easier to represent an evm based address."}),"\n",(0,n.jsxs)(t.p,{children:["For example:- Alice's phone number: ",(0,n.jsx)(t.code,{children:"+12345678901"})]}),"\n",(0,n.jsx)(t.h2,{id:"what-is-an-obfuscatedidentifier",children:'What is an "obfuscatedIdentifier"?'}),"\n",(0,n.jsxs)(t.p,{children:["Identifier that is used on-chain, to which the account address is mapped and used by dApps to lookup. It preserve the privacy of the user by not revealing the underlying ",(0,n.jsx)(t.code,{children:"plainTextIdentifier"}),". Used for on-chain attestations, obtained by hashing the plaintext identifier, identifier prefix, and pepper using this schema: ",(0,n.jsx)(t.code,{children:"sha3(sha3({prefix}://{plaintextIdentifier})__{pepper})"}),"."]}),"\n",(0,n.jsx)(t.h2,{id:"what-is-an-identifier-prefix",children:'What is an "identifier prefix"?'}),"\n",(0,n.jsx)(t.p,{children:"Identifier Prefix is used to differentiate users having same plainTextIdentifier for different purposes and composability."}),"\n",(0,n.jsxs)(t.p,{children:["For example:- Consider Alice having same username on both Twitter and Github, ",(0,n.jsx)(t.code,{children:"alicecodes"}),"."]}),"\n",(0,n.jsx)(t.h3,{id:"how-do-we-differentiate-between-alice-verified-using-twitter-and-github",children:"How do we differentiate between Alice verified using Twitter and Github?"}),"\n",(0,n.jsxs)(t.p,{children:["This where ",(0,n.jsx)(t.code,{children:"prefix"})," comes into play, the ",(0,n.jsx)(t.code,{children:"plainTextIdentifier alicecodes"})," can be represented as ",(0,n.jsx)(t.code,{children:"twitter://alicecodes"}
1)," and ",(0,n.jsx)(t.code,{children:"github://alicecodes"})," this helps differentiate whether Alice was verified using Twitter or Github."]}),"\n",(0,n.jsxs)(t.p,{children:["Moreover, it also helps in composability if dApps follow a standard and use prefix then the corresponding ",(0,n.jsx)(t.code,{children:"obsfuscatedIdentifier"})," will be the same thus making it easier for dApps to lookup identifier verified by other issuers."]}),"\n",(0,n.jsxs)(t.p,{children:["You can keep an eye on prefixes suggested by us ",(0,n.jsx)(t.a,{href:"https://github.com/celo-org/social-connect/tree/main/packages/odis-identifiers/src/identifier.ts#L25",children:"here"}),"."]}),"\n",(0,n.jsx)(t.h2,{id:"what-is-a-pepper",children:'What is a "pepper"?'}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"pepper"})," is a unique secret, obtained by taking the first 13 characters of the ",(0,n.jsx)(t.code,{children:"sha256"})," hash of the ",(0,n.jsx)(t.code,{children:"unblinded signature"}),"."]}),"\n",(0,n.jsx)(t.h2,{id:"what-is-an-unblinded-signature",children:'What is an "unblinded signature"?'}),"\n",(0,n.jsx)(t.p,{children:"Obtained by unblinding the signature returned by ODIS which is the combined output, comprised of signature by ODIS signers."}),"\n",(0,n.jsx)(t.h2,{id:"what-is-an-issuer",children:"What is an Issuer?"}),"\n",(0,n.jsx)(t.p,{children:"Issuer is an entity that is willing to take the overhead of verifying a user's ownership of an identifier."}),"\n",(0,n.jsx)(t.h2,{id:"does-issuer-need-to-pay-for-gas",children:"Does Issuer need to pay for gas?"}),"\n",(0,n.jsxs)(t.p,{children:["For lookup there is no requirement for gas, assuming that the ",(0,n.jsx)(t.code,{children:"obfuscatedIdentifier"})," to be used for lookup is available."]}),"\n",(0,n.jsxs)(t.p,{children:["For registering attestations it is optional, once the ",(0,n.jsx)(t.code,{children:"obfuscatedIdentifier"})," is obtained issuer can decide whether to just sign the attestation and provide it back to the user which will then ",(0,n.jsx)(t.strong,{children:"use its own funds for gas for registering itself"})," or the ",(0,n.jsx)(t.code,{children:"issuer"})," can perform the transaction which will require the issuer to pay for gas."]}),"\n",(0,n.jsx)(t.h2,{id:"does-issuer-need-to-have-odis-quota",children:"Does Issuer need to have ODIS quota?"}),"\n",(0,n.jsx)(t.p,{children:"Yes, Issuer needs to have ODIS Quota to register and lookup users."}),"\n",(0,n.jsx)(t.h2,{id:"what-is-cost-to-register-a-user",children:"What is cost to register a user?"}),"\n",(0,n.jsx)(t.p,{children:"With 10 cUSD worth of ODIS quota you can attest 10,000 users!"}),"\n",(0,n.jsx)(t.h2,{id:"can-i-just-lookup-users-and-not-register-them",children:"Can I just lookup users and not register them?"}),"\n",(0,n.jsx)(t.p,{children:"Yes, you can lookup users under other Issuers. By doing this, you are trusting that the Issuer took care about verifying that the identifier does actually belong to the user."}),"\n",(0,n.jsx)(t.p,{children:"You might want to do this if you don't want to create a registry of your own and use an already existing registry created by other Issuers."}),"\n",(0,n.jsx)(t.h2,{id:"can-anyone-become-an-issuer",children:"Can anyone become an Issuer?"}),"\n",(0,n.jsx)(t.p,{children:"Yes, SocialConnect is open for all. Anyone can become an Issuer."}),"\n",(0,n.jsx)(t.h2,{id:"what-are-some-security--trust-assumptions-differences-between-the-asv1-vs-social-connect",children:"What are some security & trust assumptions differences between the ASv1 vs. Social Connect?"}),"\n",(0,n.jsxs)(t.table,{children:[(0,n.jsx)(t.thead,{children:(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.th,{children:"ASv1"}),(0,n.jsx)(t.th,{children:"SocialConnect"})]})}),(0,n.jsxs)(t.tbody,{children:[(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Phone number verified by 3 randomly selected validators"}),(0,n.jsx)(t.td,{children:"Phone number verified by issuer (no guarantee about authenticity or quality of verification), app developers choose who to trust"})]}),(0,n.jsxs)(t.tr,{children:[(0,n.jsx)(t.td,{children:"Single root of trust = Collective of Validators"}),(0,n.jsx)(t.td,{children:"Many roots of trust = Respective attestation issuer that verified phone number"})]})]})]}),"\n",(0,n.jsx)(t.h2,{id:"whats-the-best-way-to-map-an-address-returned-by-lookupattestations-to-the-issuer",children:"What's the best way to map an address returned by lookupAttestations to the issuer?"}),"\n",(0,n.jsx)(t.pre,{"data-language":"sol","data-theme":"default",children:(0,n.jsxs)(t.code,{"data-language":"sol","data-theme":"default",children:[(0,n.jsx)(t.span,{className:"line",children:(0,n.jsx)(t.span,{style:{color:"var(--shiki-color-text)"},children:"function lookupAttestations(bytes32 identifier, address[] calldata trustedIssuers)"})}),"\n",(0,n.jsx)(t.span,{className:"line",children:(0,n.jsx)(t.span,{style:{color:"var(--shiki-color-text)"},children:"  external"})}),"\n",(0,n.jsx)(t.span,{className:"line",children:(0,n.jsx)(t.span,{style:{color:"var(--shiki-color-text)"},children:"  view"})}),"\n",(0,n.jsx)(t.span,{className:"line",children:(0,n.jsx)(t.span,{style:{color:"var(--shiki-color-text)"},children:"  returns ("})}),"\n",(0,n.jsx)(t.span,{className:"line",children:(0,n.jsx)(t.span,{style:{color:"var(--shiki-color-text)"},children:"    uint256[] memory countsPerIssuer,"})}),"\n",(0,n.jsx)(t.span,{className:"line",children:(0,n.jsx)(t.span,{style:{color:"var(--shiki-color-text)"},children:"    address[] memory accounts,"})}),"\n",(0,n.jsx)(t.span,{className:"line",children:(0,n.jsx)(t.span,{style:{color:"var(--shiki-color-text)"},children:"    address[] memory signers,"})}),"\n",(0,n.jsx)(t.span,{className:"line",children:(0,n.jsx)(t.span,{style:{color:"var(--shiki-color-text)"},children:"    uint64[] memory issuedOns,"})}),"\n",(0,n.jsx)(t.span,{className:"line",children:(0,n.jsx)(t.span,{style:{color:"var(--shiki-color-text)"},children:"    uint64[] memory publishedOns"})}),"\n",(0,n.jsx)(t.span,{className:"line",children:(0,n.jsx)(t.span,{style:{color:"var(--shiki-color-text)"},children:"  )"})})]})}),"\n",(0,n.jsxs)(t.p,{children:[(0,n.jsx)(t.code,{children:"lookupAttestations"})," returns 4 arrays, depending on the order ",(0,n.jsx)(t.code,{children:"trustedIssuers"})," was provided respectively the return values are returned."]}),"\n",(0,n.jsx)(t.p,{children:"if trustedIssuers = [I1, I2, ...]\nthen countsPerIssuer = [CI1, CI2, ...] where CIx = number of accounts attested under the Xth issuer"}),"\n",(0,n.jsx)(t.h2,{id:"is-there-a-convention-for-phone-number-format",children:"Is there a convention for phone number format?"}),"\n",(0,n.jsxs)(t.p,{children:["Yes, the SDK function ",(0,n.jsx)(t.code,{children:"getObfuscatedIdentifier"})," will only accept E164 formatted phone numbers."]})]})}let c={MDXContent:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{wrapper:t}=Object.assign({},(0,o.a)(),e.components);return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(_createMdxContent,{...e})}):_createMdxContent(e)},pageOpts:{filePath:"pages/faq.mdx",route:"/faq",timestamp:1723467749e3,pageMap:[{kind:"Meta",data:{index:{title:"Introduction to SocialConnect",theme:{breadcrumb:!1,footer:!0,sidebar:!0,toc:!0,pagination:!1}},"--- guides":{title:"Guides",type:"separator"},guides:{title:"Guides",display:"children"},"--- example":{title:"Examples",type:"separator"},examples:{title:"Examples",display:"children"},"--- contracts":{title:"Contracts",type:"separator"},contracts:{title:"Contracts",display:"children"},"--- protocol":{title:"Protocol",type:"separator"},protocol:{title:"Protocol",display:"children"},faq:{title:"FAQ"},tryDemo:{title:"Try Demo",type:"page",href:"https://socialconnect-lookup.vercel.app/",newWindow:!0},support:{title:"Support",type:"page",href:"https://github.com/celo-org/social-connect/discussions/new?category=help-q-a",newWindow:!0},Community:{title:"Community",type:"page",href:"https://github.com/celo-org/social-connect/discussions",newWindow:!0},issue:{title:"Report An Issue",type:"page",href:"https://github.com/celo-org/social-connect/issues",newWindow:!0}}},{kind:"Folder",name:"contracts",route:"/contracts",children:[{kind:"Meta",data:{index:{title:"Addresses"}}},{kind:"MdxPage",name:"index",route:"/contracts"}]},{kind:"Folder",name:"examples",route:"/examples",children:[{kind:"Meta",data:{example:{title:"Next.js Example",href:"https://github.com/celo-org/socialconnect-template",newWindow:!0}}}]},{kind:"MdxPage",name:"faq",route:"/faq"},{kind:"Folder",name:"guides",route:"/guides",children:[{kind:"MdxPage",name:"buy-odis-quota-and-check-balance",route:"/guides/buy-odis-quota-and-check-balance"},{kind:"MdxPage",name:"lookup-identifier",route:"/guides/lookup-identifier"},{kind:"MdxPage",name:"register-identifier",route:"/guides/register-identifier"},{kind:"MdxPage",name:"revoke-identifier",route:"/guides/revoke-identifier"},{kind:"MdxPage",name:"setup-issuer",route:"/guides/setup-issuer"},{kind:"Meta",data:{"buy-odis-quota-and-check-balance":"Buy Odis Quota and Check Balance","lookup-identifier":"Lookup Identifier","register-identifier":"Register Identifier","revoke-identifier":"Revoke Identifier","setup-issuer":"Setup Issuer"}}]},{kind:"MdxPage",name:"index",route:"/"},{kind:"Folder",name:"protocol",route:"/protocol",children:[{kind:"Meta",data:{index:"Introduction",architecture:{title:"Architecture"}}},{kind:"Folder",name:"architecture",route:"/protocol/architecture",children:[{kind:"Meta",data:{odis:{title:"ODIS"},federatedattestations:{title:"FederatedAttestations.sol"}}},{kind:"MdxPage",name:"federatedattestations",route:"/protocol/architecture/federatedattestations"},{kind:"Folder",name:"odis",route:"/protocol/architecture/odis",children:[{kind:"Meta",data:{introduction:{title:"Introduction"},domains:{title:"Domains"},usecases:{title:"Usecases"}}},{kind:"Folder",name:"domains",route:"/protocol/architecture/odis/domains",children:[{kind:"MdxPage",name:"introduction",route:"/protocol/architecture/odis/domains/introduction"},{kind:"MdxPage",name:"sequential-delay-domain",route:"/protocol/architecture/odis/domains/sequential-delay-domain"},{kind:"Meta",data:{introduction:"Introduction","sequential-delay-domain":"Sequential Delay Domain"}}]},{kind:"MdxPage",name:"introduction",route:"/protocol/architecture/odis/introduction"},{kind:"Folder",name:"usecases",route:"/protocol/architecture/odis/usecases",children:[{kind:"MdxPage",name:"key-hardening",route:"/protocol/architecture/odis/usecases/key-hardening"},{kind:"MdxPage",name:"phone-number-privacy",route:"/protocol/architecture/odis/usecases/phone-number-privacy"},{kind:"Meta",data:{"key-hardening":"Key Hardening","phone-number-privacy":"Phone Number Privacy"}}]}]}]},{kind:"MdxPage",name:"index",route:"/protocol"}]}],flexsearch:{codeblocks:!0},title:"FAQ",headings:d},pageNextRoute:"/faq",nextraLayout:r.ZP,themeConfig:a.Z};t.default=(0,s.j)(c)},7229:function(e,t,i){"use strict";var n=i(2676);i(5271);let s={logo:(0,n.jsx)("span",{children:"SocialConnect"}),project:{link:"https://github.com/celo-org/social-connect"},docsRepositoryBase:"https://github.com/celo-org/social-connect",footer:{text:"SocialConnect"}};t.Z=s},5184:function(){}},function(e){e.O(0,[774,902,888,179],function(){return e(e.s=7035)}),_N_E=e.O()}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.