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.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)
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)
Sismo protocol
A complete overview of the protocol is available in our documentation
Deployed contracts
Deployed contracts can be found here
Usage
Installation
yarn
Compile contracts
Compile contracts using hardhat
yarn compile
Test
Launch all tests
yarn test
Print storage layout
yarn storage-layout
Deploy on local chain
Terminal tab 1
yarn chain
Terminal tab 2
yarn deploy:local
Create a new Attester
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
!
License
Distributed under the MIT License.
Contribute
Please, feel free to open issues, PRs or simply provide feedback!