A standard for decentralized user authentication using smart-contracts and off-chain storage
The Cabal Protocol allows for users to control and monitor which services are using their data, and allows for developers to easily and quickly authenticate users to improve their onboarding experience and reduce friction.
The cabal protocol lets users encrypt and store data off-chain, then grant access to share it with services. Only the service/contract and the user will be able to decrypt the information, but the user will always have the ability to revoke access to their data. This, combined with an SDK, will allow users to “sign up with cabal” and provide the required information to the site, but take it away later if they desire. The SDK also helps remove liability from developers because they won't have to set up their own authentication system. The Cabal web client gives users a dashboard to upload and store important information about themselves. They can also manage which services are accessing which pieces of data, and revoke access to specific data fields or to all data from each service.
For this project we wanted to create a smooth experience for every user, for that reason, we build our main website using Next.js and React.js. We wanted to make our project accessible for everyone and multi-chain, so we stated by using @rainbowkit for the wallet connect, allowing us to make a wallet connection process that allows to use 4 of the most famous wallets; Metmask, WalletConnect, Rainbow, and Coinbase Wallet. We initialized our truffle environment and developed 4 smart contracts, DATAToken.sol, DataType.sol, DataTypeW.sol, and Oath.sol. DATAToken works as a regular ERC20 and it will be used as a reward mechanism for users when sharing data, DataType.sol is a standard for users to build different Data Types attached to their identity, DataTypeW.sol is an implementation of DataType.sol but adds the WorldCoin verification to it, allowing the user to share the WorldCoin proof seamlessly, and Oath.sol is the brain for Cabal, we like to call it a connection provider, it allows entities to subscribe to user's data and it also allows users to revoke the access from the entities. We deployed these smart contracts in 3 different networks; Kovan Network, Optimistic Kovan Network, and Polygon Mumbai testnet Network. The deployment on these 3 networks allows Cabal to be multi-chain. For developers to implement Cabal in their platform, we developed an SDK, "cabal-js-sdk". In this library we allow developers to easily interact with all smart contracts, and perform encryption for data and IPFS data access. It provides all the necessary tools to allow entities to subscribe to data, for allowing users to revoke access, and managing IPFS CIDs.