Contact tracing plays a major role in fighting the pandemic. With privacy being a major concern many users fears to install the apps with centralized architecture. Hence, this project started as a proof of concept for the contact tracing using blockchain. It was initially built with hyperledger and flutter, using bluetooth to trace contacts passed in proximity.

What it does

Exchangeable ID is a unique random generated id in the network. It works as an inbound address for the authorized clients who holds that address at that particular period of time.


  • Exchangeable ID is being primarily developed for Covid Contact tracing but not limited to it.
  • Decentralized push notification
  • Decentralized advertising medium
  • Decentralized Happn and many more

Workflow for Contract Tracing

  • Specialized nodes / Authority node generates an Exchangeable ID for a variable cost (cost is inversely proportionate to the number of IDs of the node in use)
  • UUID is derived from the Exchangeable id and added to the pool in offchain storage.
  • When a user registers, uuids are assigned by the authority node from the pool.
  • uuids have very limited validity and are rotated among the clients connected to that node.
  • Using bluetooth these uuids are broadcasted.
  • If any two uuids comes into proximity an extrinsic is invoked to store the contact details such as uuids and timestamp and the blockhash is stored in the node offchain local storage.
  • Blockhashes of the contacts are removed from the offchain storage periodically after 14 days.
  • If a user tests positive for covid, his contacts are retrieved using blockhash stored in offchain local storage and the authority node notifies the network of the uuids and block numbers where the uuids meet.

How I built it

I build using substrate, node and flutter.

Challenges I ran into

As a rust noob it was very difficult.

What's next for Exchangeable ID

This project is in its early development stage. All contributions, big or small, are warmheartedly welcome!

Run Contact Tracing node:

docker run -d -p 9944:9944 --name contact-tracing-node muhammedirfan/contact-tracing-node:latest

Stop Contact Tracing node:

docker stop contact-tracing-node

As of now nodejs is being used to implement backend logic which will eventually be moved to offchain workers.

Built With

Share this project: