{"title": "C\u2013ATTS, Composite Attestations", "logoImg": "bafkreiestd54wa6bilkk5nm6ujwmktzlykdw53nerqupyj32g4khuunqbu", "website": "https://catts.run", "bannerImg": "bafkreihax5nfhcxy7gvqwflonmc7g33xita6d64scfallzcedfnyq2pube", "createdAt": 1712733382777, "userGithub": "kristoferlund", "credentials": {"github": {"type": ["VerifiableCredential"], "proof": {"jws": "eyJhbGciOiJFZERTQSIsImNyaXQiOlsiYjY0Il0sImI2NCI6ZmFsc2V9..Ni0YNDhXMm6kYKkyj7hGoq63nljfw5989gtD2BU-J08mGCerhQ4_jnMGA2HzBZMEKfqBarDSqUdNXpfgEvFDDw", "type": "Ed25519Signature2018", "created": "2024-04-10T07:18:37.940Z", "proofPurpose": "assertionMethod", "verificationMethod": "did:key:z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC#z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC"}, "issuer": "did:key:z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC", "@context": ["https://www.w3.org/2018/credentials/v1"], "issuanceDate": "2024-04-10T07:18:37.940Z", "expirationDate": "2024-07-09T07:18:37.940Z", "credentialSubject": {"id": "did:pkh:eip155:1:0xa32aECda752cF4EF89956e83d60C04835d4FA867", "hash": "v0.0.0:/8ZzB3vgfWDOv3OdxOYQb5s+8/GnTwz0KeVCUlefkgw=", "@context": [{"hash": "https://schema.org/Text", "provider": "https://schema.org/Text"}], "provider": "ClearTextGithubOrg#c-atts#9698363"}}, "twitter": {"type": ["VerifiableCredential"], "proof": {"jws": "eyJhbGciOiJFZERTQSIsImNyaXQiOlsiYjY0Il0sImI2NCI6ZmFsc2V9.._L2H4sfAy_YUf6qFa40rTFg5csVLfHhOiisUSIv-JGL3p1zamYuJgalP-7qylJ3a1HKzl7qPwEf5l_2Jgv3FCA", "type": "Ed25519Signature2018", "created": "2024-04-10T07:18:51.767Z", "proofPurpose": "assertionMethod", "verificationMethod": "did:key:z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC#z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC"}, "issuer": "did:key:z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC", "@context": ["https://www.w3.org/2018/credentials/v1"], "issuanceDate": "2024-04-10T07:18:51.767Z", "expirationDate": "2024-07-09T07:18:51.767Z", "credentialSubject": {"id": "did:pkh:eip155:1:0xa32aECda752cF4EF89956e83d60C04835d4FA867", "hash": "v0.0.0:3Uv97O9W/OPCoFvVUzH1W27qWSqeKHD3G8Dd92PlVto=", "@context": [{"hash": "https://schema.org/Text", "provider": "https://schema.org/Text"}], "provider": "ClearTextTwitter#c_atts"}}}, "description": "Composite attestations are a new type of attestation combining data from multiple sources to form a unified and verifiable credential.\n\nThe [Ethereum Attestation Service](https://attest.org) (EAS) is an infrastructure public good for making attestations onchain or offchain about anything. Attestations can represent identity, reputation, knowledge, and much more. EAS is a tokenless and free service that is available on mainnet, several L2s, and various testnets. EAS is a great service! It is tokenless and free for anyone to use. This means it is being used. A lot!\n\nThere is a universe of attestation data out there. EAS provides an API that allows you to query that data which makes integration into websites and apps easy.\n\nLet\u2019s say I, as an app, want to offer membership to users that meet certain criteria. I my backend, I can use the EAS API to query all attestations that are relevant to my use case. Then, I write some custom logic to process the data and let the outcome of that logic determine if a user is eligible for membership. Easy!\n\nBut, what if I need to show a proof of the outcome of my logic? What if I need to create an attestation that says \u201cThis user is eligible for membership\u201d? I can of course easily create that attestation. But, without knowledge of the data I processed or about the processing logic I ran on the data, how can anyone verify that the attestation I created is correct?\n\nWouldn\u2019t it be great if there was a way to create attestations based on the result of custom queries and processing logic and have the result of that logic be independently verifiable? That\u2019s where **C\u2013ATTS**, the Composite Attestations Engine comes in.\n\nCATTS allows for the creation of **composite attestations** based on custom queries and processing logic. Running on the Internet Computer (ICP) as a smart contract canister, it leverages data from existing attestations via the EAS GraphQL API, ensuring that the creation and verification of attestations are both reliable and transparent. The processing logic is defined as a piece of arbitrary JavaScript code, which is executed securely within the canister environment. The engine also provides a receipt for each run, detailing the settings used, which aids in verifying the correctness of the composite attestations.\n\n## Planned features\n- Custom queries: Fetch data from the EAS GraphQL API using custom queries.\n- Custom processing logic: Define custom processing logic to create composite attestations based on the result of the queries.\n- Secure execution: The processing logic is executed securely within the canister environment.\n- Receipts: A receipt is created for each run, detailing the settings used, which aids in verifying the correctness of the composite attestations.\n- Chain agnostic: Run queries on one chain or on multiple chains.\n- Verifiable: The result of the processing logic is independently verifiable.\n- Open: The engine is open source and free to use. Anyone can create and run recipes.\n- Cost effective: Attestation runs can be simulated before they are run. This ensures that the cost of running the canister is minimized.\n\n## Future features\n- Advanced settings:\n  - Allow query chain settings to be overridden on a per run and per query basis.\n  - Allow users to \u201cclaim\u201d their composite attestations:\n- Transfers cost of creating attestations to the user.\n  - Allow the user to claim an attestation using multiple addresses.\n- Even more chain agnostic:\n  - Allow the creation of attestations on multiple chains.\n  - Allow querying other attestation services, not just EAS.\n- ZK attestations:\n  - Allow the creation of zero knowledge attestations.", "logoImgData": {}, "bannerImgData": {}, "projectGithub": "c-atts", "projectTwitter": "c_atts"}
C–ATTS, Composite Attestations
Composite attestations are a new type of attestation combining data from multiple sources to form a unified and verifiable credential.

The [Ethereum Attestation Service](https://attest.org) (EAS) is an infrastructure public good for making attestations onchain or offchain about anything. Attestations can represent identity, reputation, knowledge, and much more. EAS is a tokenless and free service that is available on mainnet, several L2s, and various testnets. EAS is a great service! It is tokenless and free for anyone to use. This means it is being used. A lot!

There is a universe of attestation data out there. EAS provides an API that allows you to query that data which makes integration into websites and apps easy.

Let’s say I, as an app, want to offer membership to users that meet certain criteria. I my backend, I can use the EAS API to query all attestations that are relevant to my use case. Then, I write some custom logic to process the data and let the outcome of that logic determine if a user is eligible for membership. Easy!

But, what if I need to show a proof of the outcome of my logic? What if I need to create an attestation that says “This user is eligible for membership”? I can of course easily create that attestation. But, without knowledge of the data I processed or about the processing logic I ran on the data, how can anyone verify that the attestation I created is correct?

Wouldn’t it be great if there was a way to create attestations based on the result of custom queries and processing logic and have the result of that logic be independently verifiable? That’s where **C–ATTS**, the Composite Attestations Engine comes in.

CATTS allows for the creation of **composite attestations** based on custom queries and processing logic. Running on the Internet Computer (ICP) as a smart contract canister, it leverages data from existing attestations via the EAS GraphQL API, ensuring that the creation and verification of attestations are both reliable and transparent. The processing logic is defined as a piece of arbitrary JavaScript code, which is executed securely within the canister environment. The engine also provides a receipt for each run, detailing the settings used, which aids in verifying the correctness of the composite attestations.

## Planned features
- Custom queries: Fetch data from the EAS GraphQL API using custom queries.
- Custom processing logic: Define custom processing logic to create composite attestations based on the result of the queries.
- Secure execution: The processing logic is executed securely within the canister environment.
- Receipts: A receipt is created for each run, detailing the settings used, which aids in verifying the correctness of the composite attestations.
- Chain agnostic: Run queries on one chain or on multiple chains.
- Verifiable: The result of the processing logic is independently verifiable.
- Open: The engine is open source and free to use. Anyone can create and run recipes.
- Cost effective: Attestation runs can be simulated before they are run. This ensures that the cost of running the canister is minimized.

## Future features
- Advanced settings:
  - Allow query chain settings to be overridden on a per run and per query basis.
  - Allow users to “claim” their composite attestations:
- Transfers cost of creating attestations to the user.
  - Allow the user to claim an attestation using multiple addresses.
- Even more chain agnostic:
  - Allow the creation of attestations on multiple chains.
  - Allow querying other attestation services, not just EAS.
- ZK attestations:
  - Allow the creation of zero knowledge attestations.
C–ATTS, Composite Attestations