This repository contains the smart contracts of the Proof Of Talent Protocol. The architecture is forked from Sismo Protocol. We have created new attesters and supporting skill badge contract.
See the whole documentation at https://proofoftalent.org.
There are three core contracts:
core/AttestationsRegistry.sol
: The registry stores all attestations. It is owned by the governance that authorize/unauthorize issuers to record in itcore/Attester.sol
The standard abstract contract must be inherited by attesters. Attesters are issuers of attestations. They verify user requests and build attestations that will be recorded in the registrycore/Badges.sol
Reads the registry. Stateless Non Transferable Token view of attestations (ERC1155)
Proof of talent attesters in attesters/
:
SignatureAttester.sol
: Signature Attester verify via Ecrecover that the message was correctly signed by the address of the centralized service that verify the claim based on another centralised service API like github, discordIdentityMerkleAttester.sol
: Identity Merkle Attester issues attestations to users with a userId of identity that's part of an identity accounts merkle treeSkillAttester.sol
: Skill Attester issues attestations to users with based on skill points fetched fromSkillBadge.sol
Badges:
periphery/badges/SkillBadge.sol
: Stores weights for Cred Badges from POT protocol and external ERC721/ERC1155 contracts for different skills to calculate skill points.
A complete overview of the protocol is available in Sismo's documentation
Deployed contracts can be found here
yarn
Compile contracts using hardhat
yarn compile
Launch all tests
yarn test
yarn storage-layout
Terminal tab 1
yarn chain
Terminal tab 2
yarn deploy:local
To develop a new attester, you must inherit the core/Attester.sol
abstract contract and implement the following functions:
_verifyRequest(request, proofData)
: You must implement the user request verification against the proof provided by the userbuildAttestations(request, proofData)
: You must build the attestations that will be recorded from a verified user request
There are other optional hook functions that can be implemented:
_beforeRecordAttestations(request, proofData)
_afterRecordAttestations(request, proofData)
The /attesters/hydra-s1/HydraS1SimpleAttester.sol
is a good example of an attester implementing those functions.
A guide is offered in Sismo's documentation.
Feel free open a PR with your new attester in /attester
!
Distributed under the MIT License.
Please, feel free to open issues, PRs or simply provide feedback!