Milestone Kickoff: Identity Team 🔖

Hi all, we are the identity team at cLabs: Eela, @isabelle, @Alec and me :wave:

As @yerdua mentioned below (:point_down:), next Monday (July 18) we are beginning a ~4.5 week milestone until Thursday, August 18.

With this post, we’d like to share some of our current priorities and associated deliverables.

Overall, our main priority is rolling out the new federated attestations protocol (”ASv2”) in parallel to the existing validator-run attestation protocol (”ASv1”). You can read more about the new protocol design and motivation in our recently published CIP51: Federated Attestations Protocol.

Our goals for the coming 5 weeks are to:

  1. Complete the ASv2 smart contracts audit process (incl. responses from auditors)

    This matters because all Celo core contracts have to be audited according to the release process and both the FederatedAttestations.sol and updated Escrow.sol smart contracts are central to the value proposition of the new ASv2 protocol.

  2. Refactor ODIS to support CIP40: Extension to ODIS for Password Hashing

    This matters because the ODIS refactor is blocking

    (i) the ODIS updates for ASv2 (CIP51: Federated Attestations Protocol), and

    (ii) the launch of PEAR :pear: (Pin Encrypted Account Recovery)

  3. Design a new rate limit for ODIS to support a more intuitive ASv2 onboarding experience

    This matters because an intuitive rate limit when querying ODIS peppers, is a core user experience promise we are making to adopters of the new ASv2.

  4. Circulate protocol design docs specifying user flows (such as onboarding and contact discovery for ASv2)

    This matters because intuitive user onboarding and contact discovery experiences are key requirements shared with us by prospective ASv2 issuers. By circulating these user flows, we aim to ensure our vision for these features aligns with the needs of prospective ASv2 issuers.

What next?

We’d love to hear from you. If this sounds interesting or you have any questions, we greatly appreciate any feedback you might provide, whether good or bad. We are here to listen to you. Feel free to respond below however small or big your message might be! Thank you :pray:

Also feel free to respond below if you are interested in participating in our ASv2 private beta release :rocket:


hi arthur!

Having neurons collapsing here trying to understand ODIS - Oblivious Decentralized Identifier Service,

  • Can you enlight us examples of usages for this Phone-number Privacy Protocol?
  • Could we “chain” our phone-number to a wallet-address (pubkey)?


1 Like

Thanks for your questions @DonaFlorinda!

I agree with you, we need to do a lot better explaining how our products work and how they can be used :+1: Thank you for reminding us, this is definitely on our mind.

Can you enlight us examples of usages for this Phone-number Privacy Protocol?

I’m not sure I can enlighten you (:smile:), but I’m happy to give you some TLDRs and illustrative use cases.

Concept 1: Adding a salt to a phone number* to better store it.

Concept 2: Using ODIS to generate peppers to better store phone numbers* on the blockchain

  • We use ODIS as a product to generate peppers so we can encrypt phone numbers* and store them on the blockchain (among other use cases)

  • ODIS also serves as a rate-limit to stop malicious actors from requesting too many peppers (which would make peppers pointless to start with)

    Rate limiting is a strategy for limiting network traffic. It puts a cap on how often someone can repeat an action within a certain timeframe […]. Rate limiting can help stop certain kinds of malicious […] activity.

    Source: What is rate limiting?

Concept 3: Using a registry to map encrypted phone numbers* to Celo addresses

  • We use a smart contract (Attestations.sol) to store mappings from phone numbers* (encrypted with peppers generated by ODIS) to Celo addresses.

To answer your question:

Could we “chain” our phone-number to a wallet-address (pubkey)?

Yes, you can create a pointer from your phone number to your Celo address on the blockchain, so anyone who’d like to know which Celo address belongs to you, can check that in the registry linked above. You can think of this like a pointer, but it is not capable of signing transactions on your behalf. Signing and submitting transactions is still performed using private keys under the hood.

Footnote: *Any string, for that matter.

Cool! Thanks for the explanation.

Bringing in some other questions, :nerd_face:

  • How much it cost to call the “Attestator” contract for the peeper?
  • celocli identity:current-attestation-services runs forever, some Celo is also needed to check it?
  • All elected Validators are Attestators or there is a single address for this smart-contract?
  • If many, it means there are many deploys of this same contract? Trying to figure out.
  • What happens after we read the pepper, how we “match” it to the phone?
  • Are the phones attested, like a SMS verification to prove it is from who publishes it?
  • Can I register as many phones as I can pay to store this data?

Sorry for the storm of questions… sounds super interesting how to store encrypted data on-chain and (somehow) also the pepper hash, but I still need a pull here to see the full mechanism providing this match.


Hi all :wave: Our recent 5 week milestone is finished and we are following up to share what we accomplished and learnt.

Our goals for the past 5 weeks were:

:white_check_mark: The engineering team completed the smart contract security audit with
You can find the audit report here.

:yellow_circle: The engineering team largely completed the ODIS v2.0.0 refactor. You can find their changes in the following pull request: ODIS 2.0.0 #9693. The engineering team is currently performing the last stages testing in QA/Review, which is why the PR hasn’t yet been merged.

We are being somewhat conservative in our self-evaluation and will not consider this stated goal fully accomplished. Our main take-away for future milestones is to insist on better “definitions of done”. For instance to better define the meaning of “refactoring ODIS” in this case.

:white_check_mark: The engineering team designed a new rate limit for ODIS using the OdisPayments.sol contract. You can find the code changes in the following pull request: On-chain ODIS for quota #9710. The contract is currently undergoing a security audit with Verilog.

:white_check_mark: The engineering team drafted very detailed user flows using the Mermaid diagramming language. We will share the user flows with early ASv2 adopters to ensure all parties are aligned.


Thanks for the questions @DonaFlorinda! Going through your questions below :slight_smile:

It costs ~$0.001 to query peppers.

No, you shouldn’t need CELO to run this command. It works on my end, see screenshot below.

Try this:

celocli identity:current-attestation-services --node

If you’re interested, you can find some specific worked examples for using the CLI for identity commands here:

There is a single smart contract called Attestations.sol.
You can find the current Attestations implementation and proxy contracts for it here:

For context:

Implementation contract implements some business logic users wants to interact with, but instead of interacting directly with the contract, they call functions from the proxy contract. As a result of such chaining, it becomes possible to swap the implementation contract with a different one

Source: Upgradeable proxy contract from scratch

You hash the the pepper and plain text phone number using the following pattern {prefix}{e164_phone_number}{separator}{pepper} and look for the associated mapping in the Attestations.sol contract. For example, for a phone number +123456789 and a pepper 123abc you would hash tel://+123456789__123abc.

You can checkout the follow illustrative implementation to see the exact contract calls:

Yes, randomly selected validators are sending SMSs to users to verify phone number ownership.

Yes, assuming you can prove ownership over every phone number you want to map.

You can follow us in the next milestone below: