This repository contains the smart contracts of the Sismo Protocol.
There are three core contracts:
core/AttestationsRegistry.sol: The registry stores all attestations. It is owned by the governance that authorizes/unauthorize issuers to record in itcore/Attester.solThe 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.solReads the registry. Stateless Non Transferable Token view of attestations (ERC1155)
It also contains implementations of attester in attesters/:
HydraS1SimpleAttester.sol: ZK Attester using the Hydra S1 Proving Scheme and the notion of nullifiers. Users must provide a ZK Proof along with their request to generate attestationsHydraS1AccountboundAttester.sol: Accountbound version of the Simple Hydra S1 Simple Attester. (Users can update at will where the attestation is stored)
A complete overview of the protocol is available in our 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
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 our 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!