Skip to content

Commit

Permalink
Add demo && Update readme
Browse files Browse the repository at this point in the history
  • Loading branch information
DaevMithran committed Nov 16, 2024
1 parent 6cd4519 commit 275c307
Show file tree
Hide file tree
Showing 13 changed files with 6,162 additions and 237 deletions.
288 changes: 63 additions & 225 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,32 @@
# attestation-sdk
# Sign x Lit

### demo
### Demo

#### on chain
![alt text](./signxlit.gif)

### Approach: Integrating Lit Protocol with Sign Protocol's SDK

This section outlines the steps and approach I followed to integrate the Lit Protocol with the Sign Protocol SDK for gated access and encrypted attestations. The focus was on ensuring compatibility while enhancing functionality with Lit's encryption capabilities.

#### Key Steps in the Integration

- Migration to TSC Builder
- Replaced the Rollups builder in the sp-sdk with the native TypeScript (TSC) builder.
- This change resolved compatibility issues between the sp-sdk and Lit Protocol SDK.
- The migration ensures smoother builds and aligns with the evolving requirements of the SDK ecosystem.

#### Support for Gated Access

- Added additional arguments in options like gated, accessControlConditions in create, get and revoke attestations
- Currently, this feature is limited to on-chain attestations only, with plans for broader support in future iterations.

#### Handling Encrypted Attestations

- When an attestation is marked as encrypted the base64 encrypted string and data hash are securely stored on-chain.
- These encrypted values can only be decrypted using the access conditions specified at the time of creation.
- The integration with Lit Protocol ensures robust encryption and access control, leveraging its advanced encryption capabilities.

#### On chain gated attestations

```tsx
import {
Expand All @@ -12,254 +36,68 @@ import {
delegateSignAttestation,
delegateSignRevokeAttestation,
delegateSignSchema,
} from '@ethsign/sp-sdk';
import { privateKeyToAccount } from 'viem/accounts';
const privateKey = '0xabc'; // optional
} from "@ethsign/sp-sdk"
import { privateKeyToAccount } from "viem/accounts"
const privateKey = "0xabc" // optional

const client = new SignProtocolClient(SpMode.OnChain, {
chain: EvmChains.sepolia,
account: privateKeyToAccount(privateKey), // optional
});
})

//create schema
const createSchemaRes = await client.createSchema({
name: 'xxx',
data: [{ name: 'name', type: 'string' }],
});
name: "xxx",
data: [{ name: "name", type: "string" }],
})

// delegation create schema
const delegationPrivateKey = '0xaaaaa';
const delegationPrivateKey = "0xaaaaa"
const info = await delegateSignSchema(
{
name: 'xxx',
data: [{ name: 'name', type: 'string' }],
name: "xxx",
data: [{ name: "name", type: "string" }],
},
{
chain: EvmChains.sepolia,
delegationAccount: privateKeyToAccount(delegationPrivateKey),
}
);
)
const delegateCreateSchemaRes = await client.createSchema(info.schema, {
delegationSignature: info.delegationSignature,
});
})

// create attestation
const createAttestationRes = await client.createAttestation({
schemaId: '0x3',
data: { name: 'a' },
indexingValue: 'xxx',
});

// delegation create attestation
const delegationPrivateKey = '0xaaaaa';
const info = await delegateSignAttestation(
const createAttestationRes = await client.createAttestation(
{
schemaId: '0x1',
data: { name: 'a' },
indexingValue: 'xxx',
schemaId: "0x3",
data: { name: "a" },
indexingValue: "xxx",
},
{
chain: EvmChains.sepolia,
delegationAccount: privateKeyToAccount(delegationPrivateKey),
gated: true, // Enable gated
accessControlConditions: [
{
contractAddress: "0xC5E9dDebb09Cd64DfaCab4011A0D5cEDaf7c9BDb",
standardContractType: "ProofOfHumanity",
chain: "ethereum",
method: "isRegistered",
parameters: [":userAddress"],
returnValueTest: {
comparator: "=",
value: "true",
},
},
], // specify access control conditions
}
);

const delegationCreateAttestationRes = await client.createAttestation(
info.attestation,
{
delegationSignature: info.delegationSignature,
}
);

//revoke attestation
const revokeAttestationRes = await client.revokeAttestation('0x3', {
reason: 'test',
});

//delegation revoke attestation

const delegationPrivateKey = '0xaaaaa';
const info = await delegateSignRevokeAttestation(attestationId, {
chain: EvmChains.sepolia,
reason: 'test',
delegationAccount: privateKeyToAccount(delegationPrivateKey),
});
const delegationRevokeAttestationRes = await client.revokeAttestation(
info.attestationId,
{
reason: info.reason,
delegationSignature: info.delegationSignature,
}
);
```

#### off chain

```tsx
import {
SignProtocolClient,
SpMode,
EvmChains,
OffChainSignType,
} from '@ethsign/sp-sdk';
import { privateKeyToAccount } from 'viem/accounts';
const privateKey = '0xabc'; // optional
const client = new SignProtocolClient(SpMode.OffChain, {
signType: OffChainSignType.EvmEip712,
account: privateKeyToAccount(privateKey), // optional
});

//create schema
const schemaInfo = await client.createSchema({
name: 'xxx',
data: [{ name: 'name', type: 'string' }],
});

//create attestation
const attestationInfo = await client.createAttestation({
schemaId: 'xxxx', //schemaInfo.schemaId or other schemaId
data: { name: 'a' },
indexingValue: 'xxx',
});
)

//revoke attestation
const attestationId = 'xxx';
const revokeAttestationRes = await client.revokeAttestation(attestationId, {
reason: 'test',
});
const getAttestationRes = await client.getAttestation("0x3", {
gated: true,
}) // specify gated to decrypt attestation
```

#### index service

```tsx
import { IndexService } from '@ethsign/sp-sdk';

async function getSchemaListFromIndexService() {
const indexService = new IndexService('testnet');
const res = await indexService.querySchemaList({ page: 1 });
}

async function getSchemaFromIndexService() {
const indexService = new IndexService('testnet');
const res = await indexService.querySchema('onchain_evm_80001_0x1');
}

async function getAttestationListFromIndexService() {
const indexService = new IndexService('testnet');
const res = await indexService.queryAttestationList({ page: 1 });
}
async function getAttestationFromIndexService() {
const indexService = new IndexService('testnet');
const res = await indexService.queryAttestation('onchain_evm_80001_0x1');
}
```

### Changelog

#### 0.7.0

- Added support for celo and celo testnet

#### 0.6.1

- delegate utils support rpcUrl

#### 0.6.0

- Added support for bnb

#### 0.5.0

- Added support for arbitrum one
- update zetachain smart contract address

#### 0.4.4

- create attestation support extraData

#### 0.4.0

- Added support for cyber mainnet

#### 0.3.31

- Added support for xlayer chain

#### 0.3.30

- Added support for gnosis chain
- Added support for degen chain

#### 0.3.27

- Added support for arbitrum sepolia
- remove polygon mumbai

#### 0.3.24

- offchain mode support config wallet client

#### 0.3.19

- support for index service

#### 0.3.18

- add config wallet client

#### 0.3.14

- Added support for sepolia

#### 0.3.7

- Added support for base sepolia

#### 0.3.4

- Added support for base

#### 0.3.2

- Added support for scroll sepolia

#### 0.3.3

- Added support for scroll

#### 0.3.0

- Upgrade contract

#### 0.2.3

- Improved error handling.
- General optimization.

#### 0.2.2

- Improved encoding for attestation data.

#### 0.2.0

- Added support for delegate schema registration.

#### 0.1.11

- Added support for ZetaChain mainnet.

#### 0.1.10

- Added support for opBNB testnet.

#### 0.1.9

- Added support for attestation revocation.

#### 0.1.5

- Added support for delegate attestation.

#### 0.0.1
### Developer Feedback

- Initial release.
A detailed feedback can be found [here](https://github.com/EthSign/ethglobal-bangkok-2024-tracker/issues/4)
3 changes: 3 additions & 0 deletions demo/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
node_modules/
dist/
.env
Loading

0 comments on commit 275c307

Please sign in to comment.