Open sourcing and decentralizing TezID Profiles

My details:

Asbjørn Enge Andersen

Company details:

Surf Labs AS

Name of project or idea:

Open sourcing and decentralizing TezID Profiles

Detailed description of your project or idea and why you believe it deserves funding:

I think the Tezos ecosystem deserves a really good, simple and decentralized “profile” system. Tezos Profiles ( is imho pretty terrible to work with and largely abandoned in terms of new features etc.

TezID is an “identity oracle” developed by Surf Labs AS. It has a pretty simple and straight forward profile system that is easy to use. Many projects already use the TezID profile system. It is however atm. centralized to TezID. The idea is to take the current profile system of TezID and make it open source and decentralized. Thereby creating a shared projects where all can contribute to make it even better.

It would include deliverables such as:

  • Profile Smart Contract
  • Indexer
  • Restful API

The project could be extended to include the creation of an open source frontend application separate from TezID. This would however require additional funding.

What type of background or experience do you have and your team have in building out a project like this:

17 years as a software developer and systems architect. Worked on everything from small to major software project in a variety of languages. Used to working on open source. In Tezos ecosystem from the start. Built TezID and also ChainBorn on Tezos.

Social handles of project, if any:

Funding amount being requested:

5000 XTZ

Tez address to be funded (please verify accuracy):


Proposed goals/GPIs to deliver for the requested funding:

  • Profile Smart Contract
  • Indexer
  • Restful API

I personally see a type of dApp like this being undervalued across all chains. Not only is can this be utilized on a personal scale but also kinda necessary when dealing w an enterprise. The fact that TezID hasn’t really “moved” much since 21(imo) is kinda wild. I would support this project.


This could be valuable. I’ve not used it myself, but I have heard a lot of people complain about the current system, that it is unfriendly to use, problematic, buggy etc

What would help sell this proposal to me, is responses/endorsements from other teams saying that an improved version of this tool is something they want/need. E.g. OBJKT team saying that this would be something they’d love to see with X, Y, Z fixed, would make this proposal a no brainer


I agree this is needed and fully support this proposal. tzprofiles has long been the go-to profile system for Tezos, but that team has left the ecosystem and is only doing minimal maintenance support for tzprofiles. It often has issues that go unresolved for extended periods of time. IMHO, it should be considered abandoned. (No offense meant to that team, I happen to know some of the members and have worked with some of them before, they are a good team, but they are focused on other things now)

This has led to every dapp developing their own profile system. Teia has their own profiles, fx hash has their own, and objkt now has released their own profile system. This completely defeats the purpose of decentralized identity. Additionally it makes it harder for new dapps to quickly add user profiles upon tezos login. They either roll their own (high cost), use tzprofiles (unstable), or they use objkt’s profiles API (centralized), which creates an unnecessary dependence and burden on Objkt (no offense to the Objkt team, they are a great team). If there were an actively developed and maintained open source system such as is being proposed here, then multiple entities in the ecosystem could run public endpoints for dapp developers, and those who needed more oomph could run their own copy of the indexer/api.

TezID already has a basic profile system in addition to their on chain KYC, and it makes perfect sense to me for them to expand that and further decentralize it.

If this passes, IMHO, it will be crucial for ecosystem members to help it succeed, e.g, running indexers and providing public endpoints. Hopefully this is something that TC or TF can aid with in encouraging those who have the resources to do.


I’m a big supporter of growing digital identity protocols within Tezos. We can build a lot of things on-chain but when identity is a needed factor, we fall short of closing the loop on providing ‘fully on-chain automation’.

KYC isn’t going away, and the requirement of it is increasing. This can be limiting for dapps, unless we can start using on-chain instruments for validation and authentication of a unique individual.

For example, with our purposes at StableTech, we are talking now about how with Etherlink we can make the ETH Tez (ETHtz) minting/redemption process fully on-chain and automated. However, the enrollment process for minters requires KYC (something institutional finance needs) from applicants. That will still be the need, but if we could authenticate users via a more robust TezID or something similar which would in effect offer the desired credentials needed, we could have the best of both worlds — provide the assurance of having valid individuals participate, whilst not compromising full on-chain automation.


Just to clarify; this proposals is in regards to the TezID profile system, not KYC. I do however have some ideas for how we can build a decentralized “poof-of-human” system on Tezos, but that would be something to pursue for another proposal perhaps.

1 Like

I encourage you to have a look at TzCommunity and TzCommunity documentation

Feature :

  • Your Tezos wallet as default pseudo-identity
  • No centralized KYC inside organizations, only org administrators can moderate users. If you don’t want to do it, just enable user auto-acceptance requests
  • Link to your social account, or unlink it
  • Not linked to any provider Objkt, etc … it is just a address->name+photo resolver
  • Import the Typescript client or call the API yourself (Developer Guide - Tezos-Community Documentation)
  • Free
  • Already integrated on TzVote and Shifumi training
1 Like

Hey, yes I know about the TzCommunity option :slight_smile:

Imho it’s really not the same thing. It’s centralized just like the TezID profiles currently are. The goal is to create a decentralized replacement for tzprofiles. Something we can all host and work on improving together. Contracts, indexer, API etc. will all be open-source.

And quite frankly the UI for the TzCommunity stuff is pretty terrible too (my opinion) :see_no_evil:

Also please note that there is NO KYC stuff in this proposal. It’s profiles only :sweat_smile:


Why do you say that TzCommunity is centralized ? Btw, it is open source

What do you mean by decentralized so ?

Oh, great that it is open-source! I did not know that. I cannot seem to find a link to the source from the website. Do you have a link to the source code?

By decentralized I mean that profiles (ipfs hash of profile data) will be stored on a smart-contract on-chain and only the owner / controller of the keys can update this hash (update their profile). It would be cool to include some gossip of the actual profile payloads between APIs. Not sure I can fit that in current budget, but would be something we could add later.

I might be mistaken, but I believe that “profile data” for your solution is stored in a database behind the domain. Is this not the case? That would count as centralized in my book. It would be possible for the administrator of this domain to modify database records directly.

TzCommunity does not store profiles onchain because some people asked to not publicly reveal their social account to unknown person. So the backend API is protecting you through onchain RBAC configuration that you can fetch only data from people on same shared organization

True, there is a DB controlled by an OPS guy. I have not find any solution for now, unless you store it encrypted onchain and share common decryption key with some friends, that could reveal it to any one anyway …


Any better idea ?

In case you would like to publicly reveal this information to the world and be 100% decentralized, TzCommunity could do it easily and store it onchain, just it will be costly for any picture/media, even small size (or store a link and firstname + lastname only)

Cool :blush: :+1:

I still think what I’m proposing to build here is quite different from the TzCommunity solution. It will be a more specific and modular solution designed for being hosted by multiple parties in the community.

To make something work as an open-source project and as a decentralized system I believe the architecture and design is super important. It needs to be modular and simple for anyone to spin up.

Another reason I think many people roll their own profile system, is that they don’t want to be dependent on other APIs. With this solution they can self-host the API and avoid having their site break if other sites are having issues.

Regarding proofs (social media account ownership, KYC, etc.) I think it’s better to decouple this from the profile system. Centralized oracles can be used to provide cryptographic proofs. Users are free to put these proofs on their profile if they want.

Could you explain how you decentralize it?
How can you trust information?

Tzcommunity is trustable in a way it is plugged to web2 OAuth for claiming social account ownership

Yes :smile: But I think you think I’m trying to solve a different problem then I’m actually trying to solve here :sweat_smile:

This is just about profiles (at least for now); username, profile-picture, description. I’m not trying to solve or decentralize social media account ownership proofs, KYC or anything like that. Just some profile data associated with a wallet address.

  1. It will be decentralized by putting this data (or it’s content hash) on a smart contract. Only wallet owner can update their data. No admin entrypoints.
  2. I will provide a easy-to-use indexer (docker container) for the contract + ipfs data (also schema validation) with optional storage
  3. I will also provide a simple RESTful API that platforms can deploy to expose the indexed data (also docker container)

That is it.

Now, it all being open source and very simple makes it possible to expand and improve it together. If we would want to add support for social media account ownership proofs, we could expand the profile schema to include a proofs section. Centralized oracles could verify ownership and provide zero knowledge proofs. A user could add these proofs to the proofs section of their profile. ← This is NOT part of this proposal, but would be possible to add later.

1 Like

The profiles have no value is there is no proof of Authenticity (given by any Oracle, social account provider, etc …)
It is not just a feature it is the core of the solution

Well… I obviously disagree with that :sweat_smile:

I have built many solutions on Tezos over the years and it’s annoying to always have to either roll my own profile system, use a centralized solution or mess around with tzprofiles. And as I said it will be modular and can be expanded with proofs and other things we might want. But it’s a fair position to think it’s not a valuable proposal, you are free to not vote for it :wink: :+1:

I wish you the best

1 Like

Just thought I would add a link to the project that is created for this proposal :blush:

Still WIP :muscle: Will post back when I consider goals complete :heart:

If you have questions or ideas or feature requests, please add to relevant GitHub repos.



Congratulations on the funding. Appreciate the transparency on the Github update.