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 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)
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 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
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 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!