Code Monkey home page Code Monkey logo

sismo-hub's Introduction


Logo

Sismo Hub

Made by Sismo


What is Sismo?

Sismo leverages zero-knowledge proofs (ZKPs) and privacy-preserving technologies to enable users to aggregate and selectively disclose personal data to applications.

check out the docs here.

Sismo Hub

The Sismo Hub is the repository for integrations on Sismo, where you can create:


If you want to contribute to Sismo Hub, check out the Contributing Guide here.


On top of Groups, you can create:

While the apps are independent of the Sismo Hub, the ZK Badges are built on it, through the Factory. Here is a tutorial to build your own ZK Badge from the factory in 5 minutes: https://docs.sismo.io/sismo-docs/tutorials/create-your-zk-badge-in-5-minutes-factory

That's why you can still also create a ZK Badge, edit its metadata, or add a custom flow directly through the Sismo Hub.


The Sismo Hub is powered by an off-chain infrastructure that:

  • Creates & Manage Groups: A Group bundles Source of Data that share some reputational or historical characteristics, anyone can build a new Group through the Sismo Hub. The infrastructure periodically generates off-chain Groups that aim to be reusable and sent on-chain for attesters like the HydraS1AccountboundAttester.
  • Creates ZK Badges from a Group: The infrastructure will send the Groups on-chain to the right attester so your generated Group becomes the eligible Group for a specific badge.
  • Manages ZK Badges metadata

Architecture

Here are the 2 main folders you will use when you want to contribute to the Sismo Hub:

And here are the other folders more related to ZK Badges:

  • badges-metadata/ : it contains the metadata of each ZK Badges
  • flows/ : it contains all the customs flow of the ZK Badges. (i.e. is all the data associated with the minting experience of a ZK badge)
  • static/ : it contains mainly all the images used in the Sismo Hub such as ZK Badge images or Data Provider logos

Usage

Installation

yarn

Generate a Group in local

yarn generate-group <name-of-the-data-group>

# if you want to add additional data sources to your group
yarn generate-group local-group --additional-data 0x123...def

Make sure the data group exists. More details at Sismo Hub Group Generator.

Setup the API in local

yarn api:watch

You can go to http://localhost:8000/static/rapidoc/index.html to see the main endpoints of the Sismo Hub API

To access the Group data, go to: http://localhost:8000/file-store/group-snapshots-data/{groupId}/{timestamp}.json

To access the Group metadata, go to: http://localhost:8000/groups/{groupId}?timestamp={timestamp}

  • groupId: id of a group you generated. It will be written on your terminal after the group generation.
  • timestamp: timestamp of a group generation. You can find all the group generations timestamps by using this endpoint: http://localhost:8000/groups/{groupName}

Setup Data Providers API Keys

Some Data Providers require an API Key in order to be used, here is how to setup:

# you are in sismo-hub root
cp .example.env .env

Add your own API key by adding a new line to this file or fill an already existing Data Provider with an API key:

# in the .env file
export YOUR_DATA_PROVIDER_API_KEY="<API_KEY>"

Export the API key:

source .env

Contribute

Interested in contributing? Check out our CONTRIBUTING guide for a comprehensive guide on how to get started.

Requests

If you have a need for additional Data Providers in your Group Generators, please feel free to open an issue. We also encourage you to share your idea on Discord for further discussion. A submission template is available on CONTRIBUTING.

License

Distributed under the MIT License.

Contact

Send us a message in Telegram or Discord


bottom

sismo-hub's People

Contributors

0xbulma avatar 0xmme avatar 996fighter avatar alexandrupele avatar aloeveruschka avatar andyswx avatar ca8888 avatar curelycue avatar dependabot[bot] avatar gabin54 avatar guha-rahul avatar jragosa avatar kevinyum avatar leosayous21 avatar lovis-kauf avatar martingbz avatar mwyatt896 avatar nicolas-geniteau avatar omahs avatar sampolgar avatar sismobot avatar souravinsights avatar sparqet avatar thebeyondr avatar timbeiko avatar turantuu avatar vicglarson avatar wslyvh avatar yum0e avatar zk-pay avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sismo-hub's Issues

[Proposal] Integrate Rep3 as a Data Provider

Integrate Rep3 as a Data Provider will enable to create new Groups from holders of a specific Rep3 Badge NFT.

Specifications

{
  "name": "Rep3",
  "iconUrl": "",
  "providerClassName": "Rep3Provider",
  "functions": [
    {
      "name": "Get holders of badge NFT",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all holders of a specific Rep3 badge",
      "args": [
        {
          "name": "address",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "TODO",
          "description": "A specific contract address"
        },
        {
          "name": "level",
          "argName": "TODO",
          "type": "TODO",
          "required": "true",
          "example": "5",
          "description": "A specific level 0-256"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

Rep3 Badges are transferrable ERC-721 NFTs minted on these contract addresses.

The easiest way to extract the list of addresses is by using Rep3 API.

Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.

Have fun!

[Proposal] Add functions to Snapshot Data Provider

Adding functions to Snapshot Data Provider will enable to create new Groups from a more granular set of Snapshot participants.

Specifications

{
  "name": "Snapshot",
  "iconUrl": "",
  "providerClassName": "SnapshotProvider",
  "functions": [
    {
      "name": "Get followers of space",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all followers of a specific space on Snapshot",
      "args": [
	{
          "name": "space",
          "argName": "TODO",
          "type": "string",
          "example": "sismo.eth",
          "description": "A specific space identifier"
        },
	{
          "name": "date",
          "argName": "TODO",
          "type": "TODO",
          "required": "false",
          "example": "02/28/2023",
          "description": "Since a specific date MM/DD/YYYY"
        }
      ]
    },
    {
      "name": "Get authors of space",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all authors of a specific space on Snapshot",
      "args": [
        {
          "name": "space",
          "argName": "TODO",
          "type": "string",
          "example": "sismo.eth",
          "description": "A specific space identifier"
        }
      ]
    },
    {
      "name": "Get admins of space",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all admins of a specific space on Snapshot",
      "args": [
        {
          "name": "space",
          "argName": "TODO",
          "type": "string",
          "example": "sismo.eth",
          "description": "A specific space identifier"
        }
      ]
    },
    {
      "name": "Has voted min [x] times",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all voters that voted min [x] times on Snapshot",
      "args": [
        {
          "name": "number of votes",
          "argName": "TODO",
          "type": "TODO",
          "example": "3",
          "description": "A minimum number of votes"
        },
        {
          "name": "space",
          "argName": "TODO",
          "type": "string",
          "required": "false",
          "example": "sismo.eth",
          "description": "A specific space identifier"
        }
      ]
    },
    {
      "name": "Made at least [x] proposals",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all authors of at least [x] proposals on Snapshot",
      "args": [
        {
          "name": "number of proposals",
          "argName": "TODO",
          "type": "TODO",
          "example": "3",
          "description": "A minimum number of proposals"
        },
        {
          "name": "space",
          "argName": "TODO",
          "type": "string",
          "required": "false",
          "example": "sismo.eth",
          "description": "A specific space identifier"
        },
        {
          "name": "state",
          "argName": "TODO",
          "type": "TODO",
          "required": "false",
          "example": "Active | Pending | Closed | Successful",
          "description": "A specific state of the proposals"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

The easiest way to extract addresses for each proposed Snapshot factory function is by using Snapshot API.

Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.

Have fun!

[Proposal] Integrate Layer3 as a Data Provider

Integrate Layer3 as a Data Provider will enable to create new Groups from holders of a specific Layer3 Quest NFT.

Specifications

{
  "name": "Layer3",
  "iconUrl": "",
  "providerClassName": "Layer3Provider",
  "functions": [
    {
      "name": "Get holders of quest NFT",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all holders of a specific Layer3 quest",
      "args": [
        {
          "name": "quest",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "TODO",
          "description": "A specific quest identifier"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

Layer3 NFTs are transferrable ERC-1155 NFTs minted on Polygon with this contract address.

They don’t have an API, so the easiest way to extract the list of addresses is by using BigQuery and the associated Token Id per quest.

Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.

Have fun!

[Proposal] Create a Group from kycDAO Token holders

A kycDAO Token is a non-transferable ERC-721 NFT that is the on-chain representation of an off-chain KYC verified identity.

Creating the kycDAO Token Group will enable to generate new sybil-resistant Groups from members that are unique humans verified by a KYC.

Specifications

Expected Group: list of all addresses holding a kycDAO Token.

Tips on how to create the Group

kycDAO Token is currently available on these chains.

kycDAO smart contracts should be called to confirm that the address's kycNFT token is still valid.

The easiest way to extract the list of addresses is by using BigQuery.

Have a look at Sismo documentation to understand how to generate a Group.

Have fun!

[Proposal] Integrate ERC20 as a Data Provider

Integrate ERC20 as a Data Provider will enable to create new Groups from holders of an ERC-20 above a min amount.

Specifications

{
  "name": "ERC20",
  "iconUrl": "",
  "providerClassName": "ERC20Provider",
  "functions": [
    {
      "name": "Get holders of ERC-20",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all holders of a specific ERC-20 above a min amount (capped at 100k addresses)",
      "args": [
        {
          "name": "chain",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "Ethereum | BSC | Polygon | Avalanche | Gnosis | Fantom | Arbitrum One | Arbitrum Nova | Celo | Harmony | Optimism | Moonbeam | Metis | Cronos | Boba | Goerli | Base Goerli",
          "description": "A specific chain"
        },
        {
          "name": "address",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "TODO",
          "description": "A specific contract address"
        },
        {
          "name": "amount",
          "argName": "TODO",
          "type": "TODO",
          "required": "true",
          "example": "500",
          "description": "A minimum amount"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

The chains supported are: Ethereum, BSC, Polygon, Avalanche, Gnosis, Fantom, Arbitrum One, Arbitrum Nova, Celo, Harmony, Optimism, Moonbeam, Metis, Cronos, Boba, Goerli and Base Goerli.

The easiest way to extract the list of holders’ addresses of a specific ERC-20 is by using BigQuery & Etherscan.

For now, the number of addresses returned will be capped at 100k.

Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.

Have fun!

[Proposal] Create a Group from GitPOAP Token holders

GitPOAP is a contributor recognition platform that integrates POAP issuance into GitHub.

Creating the GitPOAP Token Group will enable to generate new Groups from members that own a GitPOAP.

Specifications

Expected Group: list of all addresses holding a GitPOAP Token.

Tips on how to create the Group

A GitPOAP Token is a transferrable ERC-721 NFT minted on Gnosis Chain.

The easiest way to extract the list of addresses is by using GitPOAP API.

Have a look at Sismo documentation to understand how to generate a group.

Have fun!

Error when generating group

After follow tutorial topic, when i want to generate group :

$ node -v    
v18.11.0

$ yarn generate-group 0xdigger_lens_followers
yarn run v1.22.19
$ node --require ts-node/register/transpile-only src/cli/cli.ts generate-group 0xdigger_lens_followers
Generating groups (0xdigger_lens_followers)
/opt/homebrew/var/www/blockchain/sismo-hub/src/topics/group-generator/group-generator.ts:116
    const groups = await generator.generate(context, this.groupStore);
                                   ^
TypeError: Cannot read properties of undefined (reading 'generate')
    at GroupGeneratorService.generateGroups (/opt/homebrew/var/www/blockchain/sismo-hub/src/topics/group-generator/group-generator.ts:116:36)
    at async DataSourcesCmd.generateGroup (/opt/homebrew/var/www/blockchain/sismo-hub/src/topics/group-generator/group-generator.commands.ts:47:3)
    at async Command.parseAsync (/opt/homebrew/var/www/blockchain/sismo-hub/node_modules/commander/lib/command.js:917:5)
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

[Proposal] Integrate Paragraph as a Data Provider

Integrate Paragraph as a Data Provider will enable to create new Groups from collectors of a specific Paragraph post NFT.

Specifications

{
  "name": "Paragraph",
  "iconUrl": "",
  "providerClassName": "ParagraphProvider",
  "functions": [
    {
      "name": "Get collectors of post",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all collectors of a specific Paragraph post",
      "args": [
        {
          "name": "address",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "TODO",
          "description": "A specific contract address of the post NFT"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

Paragraph NFTs are ERC-1155 minted on Polygon with this contract address.

The easiest way to extract the list of addresses from a collected post NFT is by using BigQuery.

Here is a tutorial on using GraphQL to get data from Arweave.

Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.

Have fun!

[Question] Badges based on onchain activity

Hi, Aaron from Philand here.

I was wondering if it is possible to create a badge based on a connected account's activity, e.g. "Swapped 50 times on Uniswap v3".

edit: Reading back on past issues & PRs, I noticed there was a Dune resolve but it was recently removed. I was hoping to run this query which gives the desired addresses - https://dune.com/queries/2443489

[Proposal] Integrate Kleoverse as a Data Provider

Integrate Kleoverse as a Data Provider will enable to create new Groups from holders of a specific Kleoverse proof of talent NFT.

Specifications

{
  "name": "Kleoverse",
  "iconUrl": "",
  "providerClassName": "KleoverseProvider",
  "functions": [
    {
      "name": "Get holders of proof of talent NFT",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all holders of a specific proof of talent",
      "args": [
        {
          "name": "token",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "TODO",
          "description": "A specific token identifier"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

A Kleoverse Token is a non-transferrable ERC-721 NFT minted on Polygon Chain with this contract address.

The easiest way to extract addresses for each Kleoverse NFT is by using BigQuery.

Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.

Have fun!

[Proposal] Integrate Yup as a Data Provider

Integrate Yup as a Data Provider will enable to create new Groups from Yup users having top on-chain social value.

The Yup Score provides a reputation metric by aggregating on-chain actions and ranking between 1-100. The weight of each action is determined by its social value.

Specifications

{
  "name": "Yup",
  "iconUrl": "",
  "providerClassName": "YupProvider",
  "functions": [
    {
      "name": "Get users",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all Yup users above a global min score or min score of a specific adapter",
      "args": [
        {
          "name": "score",
          "argName": "TODO",
          "type": "TODO",
          "required": "false",
          "example": "80",
          "description": "A minimum Yup score 1-100"
        },
        {
          "name": "adapter",
          "argName": "TODO",
          "type": "TODO",
          "required": "false",
          "example": "TODO",
          "description": "A specific adapter identifier"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

The easiest way to extract the list of addresses of Yup users is by using Yup API.

To get the global Yup score and the score for each Adapter, you can use their Yup Score API.

Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.

Have fun!

[Proposal] Integrate Tally as Data Provider

Tally is a platform to manage DAOs on-chain. Integrate Tally as a Data Provider will enable to create new Data Groups from governance voters, delegators and proposers.

Specifications

Here is the interface-schema.json that represents the specifications of the Data Provider:

 {
  "name": "Tally",
  "iconUrl": "",
  "providerClassName": "TallyProvider",
  "functions": [
    {
      "name": "Get voters of proposal",
      "functionName": "getProposalVoters",
      "countFunctionName": "getProposalVotersCount",
      "description": "Returns all voters of a specific proposal on Tally.",
      "args": [
         {
          "name": "DAO",
          "argName": "governance",
          "type": "string",
          "example": "aave",
          "description": "A specific DAO"
        },
        {
          "name": "proposal ID",
          "argName": "proposalId",
          "type": "number",
          "example": "193",
          "description": "A specific proposal identifier"
        }
      ]
    },
    {
      "name": "Get voters of a DAO",
      "functionName": "getGovernanceVoters",
      "countFunctionName": "getGovernanceVotersCount",
      "description": "Returns all voters of a specific governance on Tally. The values of the accounts correspond to their number of votes.",
      "args": [
        {
          "name": "DAO",
          "argName": "governance",
          "type": "string",
          "example": "aave",
          "description": "A specific DAO"
        }
      ]
    },
    {
      "name": "Get delegates of a DAO",
      "functionName": "getGovernanceDelegates",
      "countFunctionName": "getGovernanceDelegatesCount",
      "description": "Returns all delegates of a specific governance. The values of the accounts correspond to their number of votes.",
      "args": [
        {
          "name": "DAO",
          "argName": "governance",
          "type": "string",
          "example": "aave",
          "description": "A specific DAO"
        }
      ]
    },
    {
      "name": "Get proposers of a DAO",
      "functionName": "getGovernanceProposers",
      "countFunctionName": "getGovernanceProposersCount",
      "description": "Returns all proposals proposers of a specific DAO on Tally. The values of the accounts correspond to their number of proposal proposed.",
      "args": [
        {
          "name": "DAO",
          "argName": "governance",
          "type": "string",
          "example": "aave",
          "description": "A specific DAO"
        }
      ]
    },
  ]
}

Tips on how to integrate the Data Provider

The easiest way to integrate Tally is to use their API:

➡️ Tally general documentation: https://docs.tally.xyz/
➡️ Tally API documentation: https://apidocs.tally.xyz/

You will need an API key to make the requests, get one here: https://docs.tally.xyz/tally-api/welcome#get-an-api-key

Test easily your queries with https://api.tally.xyz/playground

See the Sismo documentation to understand what a Data Provider is, and the tutorial to learn how to create one.

Please don’t hesitate to ping the team in this GitHub issue if you have any questions.
You can also contact us on Telegram or Discord.

Have fun!

[Proposal] Integrate GitPOAP as a Data Provider

Integrate GitPOAP as a Data Provider will enable to create new Groups from GitPOAP holders of a specific Repository.

Specifications

{
  "name": "GitPOAP",
  "iconUrl": "",
  "providerClassName": "GitPOAPProvider",
  "functions": [
    {
      "name": "Get holders of repository",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all holders of any GitPOAP of a specific repository",
      "args": [
        {
          "name": "repository",
          "argName": "TODO",
          "type": "string",
          "example": "ethereum-org-website",
          "description": "A specific repository identifier - gitpoap.io/repos"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

A GitPOAP Token is a transferrable ERC-721 NFT minted on Gnosis Chain.

The easiest way to extract the list of addresses is by using GitPOAP API.

Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.

Have fun!

[Proposal] Integrate Guild as a Data Provider

Integrate Guild as a Data Provider will enable to create new Groups from members of a specific Guild or Guild Role.

Specifications

{
  "name": "Guild",
  "iconUrl": "",
  "providerClassName": "GuildProvider",
  "functions": [
    {
      "name": "Get members of Guild",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all members of a specific Guild",
      "args": [
        {
          "name": "guild",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "our-guild",
          "description": "A specific guild urlName - https://api.guild.xyz/v1/guild"
        }
      ]
    },
    {
      "name": "Get members of role",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all members of a specific Guild role",
      "args": [
        {
          "name": "guild",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "our-guild",
          "description": "A specific guild urlName - https://api.guild.xyz/v1/guild"
        },
        {
          "name": "role",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "1937",
          "description": "A specific role identifier - https://api.guild.xyz/v1/urlName"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

To get all Guilds’ urlName, you can use this.

To get Role Ids, you can use https://api.guild.xyz/v1/guild/GUILDSLUG (where the GUILDSLUG is the urlName of the chosen Guild)

To extract addresses of a specific Role Id, you can use https://api.guild.xyz/v1/role/ROLEID (where the ROLEID is the id of the chosen Guild Role)

Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.

Have fun!

[Proposal] Create a Group from Galxe Passport Token holders

A Galxe Passport Token is a non-transferable ERC-721 NFT that is the on-chain representation of an off-chain KYC verified identity.

Creating the Galxe Passport Token Group will enable to generate new sybil-resistant Groups from members that are unique humans verified by a KYC.

Specifications

Expected Group: list of all addresses holding a Galxe Passport Token.

Tips on how to create the Group

Galxe Passport Token is minted on BNB Chain with this contract address.

The easiest way to extract the list of addresses is by using BigQuery.

Have a look at Sismo documentation to understand how to generate a group.

Have fun!

[Proposal] Integrate NFT1155 as a Data Provider

Integrate NFT1155 as a Data Provider will enable to create new Groups from holders of a specific ERC-1155 with a min balance and a certain attribute.

Specifications

{
  "name": "NFT1155",
  "iconUrl": "",
  "providerClassName": "NFT1155Provider",
  "functions": [
    {
      "name": "Get holders of NFT",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all holders of a specific ERC-1155 with a min balance and a certain attribute",
      "args": [
        {
          "name": "chain",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "Ethereum | BSC | Polygon | Avalanche | Gnosis | Fantom | Arbitrum One | Arbitrum Nova | Celo | Harmony | Optimism | Moonbeam | Metis | Cronos | Boba | Goerli | Base Goerli",
          "description": "A specific chain"
        },
        {
          "name": "address",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "TODO",
          "description": "A specific contract address"
        },
        {
          "name": "token",
          "argName": "TODO",
          "type": "TODO",
          "required": "false",
          "example": "TODO",
          "description": "A token identifier"
        },
        {
          "name": "amount",
          "argName": "TODO",
          "type": "TODO",
          "required": "false",
          "example": "2",
          "description": "A minimum amount"
        },
        {
          "name": "attribute",
          "argName": "TODO",
          "type": "TODO",
          "required": "false",
          "example": "TODO",
          "description": "An attribute identifier"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

The chains supported are: Ethereum, BSC, Polygon, Avalanche, Gnosis, Fantom, Arbitrum One, Arbitrum Nova, Celo, Harmony, Optimism, Moonbeam, Metis, Cronos, Boba, Goerli and Base Goerli.

The easiest way to extract the list of holders’ addresses of a specific NFT is by using BigQuery & Etherscan.

Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.

Have fun!

[Proposal] Integrate RabbitHole as a Data Provider

Integrate RabbitHole as a Data Provider will enable to create new Groups from holders of a specific RabbitHole Quest NFT.

Specifications

{
  "name": "RabbitHole",
  "iconUrl": "",
  "providerClassName": "RabbitHoleProvider",
  "functions": [
    {
      "name": "Get holders of quest NFT",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all holders of a specific RabbitHole quest",
      "args": [
        {
          "name": "quest",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "TODO",
          "description": "A specific quest identifier"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

RabbitHole NFTs are non-transferrable ERC-721 NFTs.

All contracts are deployed with the same addresses on Goerli, Mainnet and Optimism.

It is important to rely on the Quest Id from RabbitHole Receipt NFT contract address to extract the list of addresses.

They don’t have an API, so the easiest way is by using BigQuery & Etherscan.

Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.

Have fun!

[Proposal] Create a Group from CyberConnect ccProfile holders

A ccProfile is a non-transferable ERC-721 NFT representing the on-chain profile of a CyberConnect user.

Creating the CyberConnect ccProfile Group will enable to generate new Groups from CyberConnect users.

Specifications

Expected Group: list of all addresses holding a ccProfile Token.

Tips on how to create the Group

CyberConnect ccProfile is minted on BNB Chain with this contract address.

The easiest way to extract the list of addresses is by using BigQuery.

Have a look at Sismo documentation to understand how to generate a group.

Have fun!

[Proposal] Create a Group from UnstoppableDomains holders

The Unstoppable Name Service is a transferrable ERC-721 NFT representing ownership of an Unstoppable Domain Name Service.

Creating the UnstoppableDomains Group will enable to generate new Groups from UnstoppableDomains Name Service holders.

Specifications

Expected Group: list of all addresses holding an Unstoppable Name Service.

Tips on how to create the Group

Unstoppable Name Service is minted on Ethereum and can be transferred to Polygon, with these contract addresses and the corresponding list of network IDs.

The easiest way to extract the list of addresses is by using BigQuery and the on-chain Token ID.

Have a look at Sismo documentation to understand how to generate a group.

Have fun!

[Proposal] Integrate Noox as a Data Provider

Integrate Noox as a Data Provider will enable to create new Groups from holders of a specific Noox Badge NFT.

Specifications

{
  "name": "Noox",
  "iconUrl": "",
  "providerClassName": "NooxProvider",
  "functions": [
    {
      "name": "Get holders of badge NFT",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all holders of a specific Noox badge",
      "args": [
        {
          "name": "badge",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "TODO",
          "description": "A specific badge identifier"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

Noox Badges are non-transferrable ERC-1155 NFTs minted on Ethereum with this contract address.

They don’t have an API, so the easiest way to extract the list of addresses is by using BigQuery.

Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.

Have fun!

[Proposal] Integrate Otterspace as a Data Provider

Integrate Otterspace as a Data Provider will enable to create new Groups from holders of a specific Otterspace Badge NFT.

Specifications

{
  "name": "Otterspace",
  "iconUrl": "",
  "providerClassName": "OtterspaceProvider",
  "functions": [
    {
      "name": "Get holders of badge NFT",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all holders of a specific Otterspace badge",
      "args": [
        {
          "name": "badge",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "TODO",
          "description": "A specific badge identifier"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

Otterspace Badges are non-transferrable ERC-4973 NFTs minted on Optimism.

The easiest way to extract the list of addresses is by using their Subgraph.

Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.

Have fun!

[Proposal] Integrate Unlock as a Data Provider

Integrate Unlock as a Data Provider will enable to create new Groups from holders of a specific Lock NFT.

Specifications

{
  "name": "Unlock",
  "iconUrl": "",
  "providerClassName": "UnlockProvider",
  "functions": [
    {
      "name": "Get holders of lock NFT",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all holders of a specific lock",
      "args": [
        {
          "name": "lock",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "TODO",
          "description": "A specific lock contract address"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

The easiest way to extract addresses for each Lock NFT is by using Unlock Subgraph.

Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.

Have fun!

[Proposal] Integrate NFT721 as a Data Provider

Integrate NFT721 as a Data Provider will enable to create new Groups from holders of a specific ERC-721 with a min balance and a certain attribute.

Specifications

{
  "name": "NFT721",
  "iconUrl": "",
  "providerClassName": "NFT721Provider",
  "functions": [
    {
      "name": "Get holders of NFT",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all holders of a specific ERC-721 with a min balance and a certain attribute",
      "args": [
        {
          "name": "chain",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "Ethereum | BSC | Polygon | Avalanche | Gnosis | Fantom | Arbitrum One | Arbitrum Nova | Celo | Harmony | Optimism | Moonbeam | Metis | Cronos | Boba | Goerli | Base Goerli",
          "description": "A specific chain"
        },
        {
          "name": "address",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "TODO",
          "description": "A specific contract address"
        },
        {
          "name": "amount",
          "argName": "TODO",
          "type": "TODO",
          "required": "false",
          "example": "2",
          "description": "A minimum amount"
        },
        {
          "name": "attribute",
          "argName": "TODO",
          "type": "TODO",
          "required": "false",
          "example": "TODO",
          "description": "An attribute identifier"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

The chains supported are: Ethereum, BSC, Polygon, Avalanche, Gnosis, Fantom, Arbitrum One, Arbitrum Nova, Celo, Harmony, Optimism, Moonbeam, Metis, Cronos, Boba, Goerli and Base Goerli.

The easiest way to extract the list of holders’ addresses of a specific NFT is by using BigQuery & Etherscan.

Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.

Have fun!

[Proposal] ENS Subdomain Provider

Create a data provider to enable users to create groups based on ENS Subdomains.
This data provider will accept a .eth address e.g. sismo.eth and return a list of all subdomain holders e.g. alice.sismo.eth, bob.sismo.eth

A small typo on the badge explorer page

Description

A small typo on the badge explorer page: Eligiblity instead of Eligibility

Steps to Reproduce

Change Eligiblity to Eligibility

Expected Behavior

Eligibility

Actual Behavior

Eligiblity

Screenshots (if applicable)

Screenshot 2023-03-06 at 01 36 04

Screenshot 2023-03-06 at 01 36 32

Additional Information

Node version: [e.g. v18.13.0]
Browser and version: [e.g. Chrome 88.0.4324.96]
Operating system: [e.g. MacOS Monterey ]

[Proposal] Create a Group from Yup users

Yup is extracting the best of Farcaster, Lens, Mirror, NFTs, Twitter, and all of web3 in one curated feed.

Creating the Yup Group will enable to generate new Groups from Yup users.

Specifications

Expected Group: list of all addresses using Yup.

Tips on how to create the Group

The easiest way to extract the list of addresses is by using Yup API.

Have a look at Sismo documentation to understand how to generate a group.

Have fun!

[Proposal] Create a Group from Humanbound Token holders

A Humanbound Token is a non-transferable ERC-721 NFT that is the on-chain representation of an off-chain KYC verified identity.

Creating the Humanbound Token Group will enable to generate new sybil-resistant Groups from members that are unique humans verified by a KYC.

Specifications

Expected Group: list of all addresses holding a Humanbound Token.

Tips on how to create the Group

Humanbound Token is currently available on 4 chains: Ethereum, Polygon, Arbitrum and Optimism. Verified users are free to mint Humanbound Token on the 4 chains.

Humanbound Token is not account-bound, but for each human it is the same Token Id across chains. It is important to rely on the unicity of the Token Id to extract the corresponding unique wallet address.

We invite you to check their documentation for more information, especially contract addresses.

They don’t have an API, so the easiest way to extract the list of addresses is by using BigQuery (do no support Arbitrum & Optimism yet) & Etherscan.

Have a look at Sismo documentation to understand how to generate a Group.

Have fun!

[Proposal] extend support for current alchemy provider

Current Alchemy Provider only supports 1 specific API call (getOwnersForCollection) only for Ethereum.
This update should

extend support for current getOwnersForCollection (Gets all owners for a given NFT contract) Ref

  1. support different chains e.g. optimisim, arbitrum
  2. support paging via pageKey

add support for getNFTsForCollection (Gets all NFTs for a given NFT contract.) Ref

  1. support different chains e.g. optimisim, arbitrum
  2. support paging via startToken and Limit
  3. support metadata tag true/false

[Proposal] Create 3 Groups from Parallel Token holders

A Parallel Identity Token is a non-transferrable ERC-721 NFT that is the on-chain representation of an off-chain KYC, accreditation and international sanctions verification.

Creating the Parallel Identity Token Group will enable to generate new sybil-resistant Groups from members that are unique humans verified by a KYC, accredited investors and safe from sanctions.

Specifications

Expected Group n°1: list of all addresses holding a Parallel Identity Token.

Expected Group n°2: list of all addresses holding a Parallel Identity Token and verified as accredited investors.

Expected Group n°3: list of all addresses holding a Parallel Identity Token and verified as safe from international sanctions.

Tips on how to create the Group

Parallel Identity Token is minted on Ethereum with this contract address.

Group n°1: the easiest way to extract the list of addresses is by using BigQuery.

Group n°2 & Group n°3: you can use their on-chain data or API to verify the status.

Have a look at Sismo documentation to understand how to generate a group.

Have fun!

Unify API output

Currently all outputs of the Hub API look like :

interface APIOuptut<T> {
  items: T[]
}

except:

  • badges/:network/:collectionId.json (normal as it's follows the ERC1155 metadata interface)
  • badges/:network/details/:collectionId

It would be convenient if the badges/:network/details/:collectionId endpoint could return the same output as the other endpoints.

Add possibility to cancel a request in Sismo Factory

Description

Once a user submits a request to generate their Sismo Badge, during the waiting period (up to 48h), the user might change their mind and wish to cancel (or modify) the request. However, currently there seems to be no button to do so.

Expected Behavior

Add a cancel button for pending requests (with a "are you sure to want to cancel" confirmation step) to Sismo Factory interface. Cancel the associated pull request and refund the funds.

Actual Behavior

The user must wait (and can't change anything).

Screenshots (if applicable)

image

[Proposal] Integrate Enzyme as a Data Provider

Enzyme is a platform that allows people to invest in DeFi with very little management. Users deposit tokens in vaults that generate income through DeFi strategies.
Integrate Enzyme as a Data Provider will enable to create new Data Groups from Vaults depositors.

Specifications

Here is the interface-schema.json that represents the specifications of the Data Provider:

 {
  "name": "Enzyme",
  "iconUrl": "",
  "providerClassName": "EnzymeProvider",
  "functions": [
    {
      "name": "Get the depositors of a vault",
      "functionName": "getVaultDepositors",
      "countFunctionName": "getVaultDepositorsCount",
      "description": "Returns all the depositors of a specific vault on Enzyme. The value of each group member is the total amount they have deposited in the vault.",
      "args": [
         {
          "name": "Vault ID",
          "argName": "vaultId",
          "type": "string",
          "example": "0x9cfe227cab5ed97cd6781aee5f7ed6401f566355",
          "description": "The ID of the vault"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

The easiest way to integrate Enzyme is to use their subgraph: https://thegraph.com/hosted-service/subgraph/enzymefinance/enzyme-core

You can find easily the depositors by using this query for instance:

query {
  vault(id: "0x9cfe227cab5ed97cd6781aee5f7ed6401f566355") {
    id
    deposits {
      id
      depositor {
        id
      }
      shares
      since
    }
    depositCount
    counter
  }
}

FYI: another subgraph exists: https://thegraph.com/hosted-service/subgraph/enzymefinance/enzyme feel free to explore it if you can't find what you want in the first given subgraph.

You are also free to use any other way to fetch this data, for example you can use the BigQuery Data Provider.


Remember that the aim is to get the all the depositors in a vault, but that the value of each depositor must be the total amount he has deposited.
Here’s an example of the object that your Data Provider needs to return:

{
  "0x123": "20000000000000000000",
  "0x456": "140000000000000000000", 
  "0x789": "1000000000000000000" 
}

⚠️ The amount deposited can’t be a decimal value (because for now we don’t support this). To avoid this: convert the decimal number in Wei (20 ETH <=> 20000000000000000000 wei)


See the Sismo documentation to understand what a Data Provider is, and the tutorial to learn how to create one.

Please don’t hesitate to ping the team in this GitHub issue if you have any questions. You can also contact us on Telegram or Discord.

Have fun!

[Proposal] Integrating Dune Analytics as a Data Provider

Integrating Dune Analytics as a Data Provider

Dune Analytics has recently launched an API that we believe would be perfect for integrating with Sismo Hub. The API is robust, reliable and provides an easy-to-use interface for querying, executing and checking the status of executions.

https://dune.com/docs/api/quick-start/api-js/#getting-set-up

Incorporating Dune Analytics into the Sismo Hub would bring several benefits for Group Generators as it provides a new way to access and query data.

Interface

Generic Interface

It should be very easy to retrieve and use the data from the query directly inside our group generator.

Proposed interface:

// declare the dune analytics provider 
const duneAnalytics = new dataProviders.DuneAnalyticsProvider();

// declare your query id
const queryId = 156895;

// Retrieve the data from the query. The retrieved Data will be an array typed with the type template T
const queryData: T[] = await duneAnalytics.executeQuery<T>(queryId);

Integration in the factory

We should be able to use the Data Provider inside the Sismo Factory.
For instance, we could create a function that retrieves addresses from a query.

Proposed factory function: Get addresses of query
With 2 inputs:

  • Query Id: the query id of the query you want to retrieve your data from
  • Address Column Name: the column you want to use as the account identifier for the group

Handling API Key

Currently, we utilize environment variables to manage API Keys. An illustration of how to handle API Keys using the SubgraphDecentralizedServiceProvider can be found at https://github.com/sismo-core/sismo-hub/blob/main/group-generators/helpers/data-providers/subgraph/decentralized-service.provider.ts#L21

Example interface

Example use case: NounsDAO auction winners Let's consider a practical scenario: we want to create a group that consists of all the Nouns DAO auction winners using the Dune analytics provider. NounsDAO currently has a Dune Dashboard at https://dune.com/aaaaaaaaaa/NounsDAO, which has a Query that meets our needs directly: https://dune.com/queries/156895 This query has an Id: `156895`.

Within our Group Generator, we can write the following code:

const generator: GroupGenerator = {
  generationFrequency: GenerationFrequency.Daily,
  
  generate: async (context: GenerationContext): Promise<GroupWithData[]> => {
  
    const duneAnalytics = new dataProviders.DuneAnalyticsProvider();

    // Let's define the result type of the query
    type DailyAuctionType = {
      date: string;
      nounId: number;
      winner: string;
      paid: number;
    }

    // Set the Query ID
    const nounsDailyAuctionQueryId = 156895;

    // Retrieve data from Dune Analytics
    const dailyAuctionData = await duneAnalytics.executeQuery<DailyAuctionType>(nounsDailyAuctionQueryId);

    // Use the data in the Group Generator
    const data: FetchedData = {};
    for(const auction of dailyAuctionData) {
      data[auction.winner] = 1;
    }

    return [
      {
        name: "nouns-daily-auction",
        timestamp: context.timestamp,
        data,
        valueType: ValueType.Score,
        tags: [Tags.User, Tags.Mainnet, Tags.NFT],
      },
    ];
  },
};

[Proposal] Create a Group from SismoENS holders

ENS Token is a transferable ERC-721 NFT that assigns human-readable addresses to ethereum wallets.

Creating the SismoENS Group will enable to generate new Groups from members holding a sismo.eth subdomain (e.g: dHadrien.sismo.eth).

Specifications

Expected Group: list of all addresses holding a ENS sismo.eth subdomain.

Tips on how to create the Group

ENS Token is minted on Ethereum Chain.

Have a look at Sismo documentation to understand how to generate a group.

Have fun!

[Proposal] Integrate Gateway as a Data Provider

Integrate Gateway as a Data Provider will enable to create new Groups from holders of a specific Gateway Credential NFT.

Specifications

{
  "name": "Gateway",
  "iconUrl": "",
  "providerClassName": "GatewayProvider",
  "functions": [
    {
      "name": "Get holders of credential NFT",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all holders of a specific Gateway credential",
      "args": [
        {
          "name": "credential",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "TODO",
          "description": "A specific credential identifier"
        }
      ]
    },
    {
      "name": "Get holders of organization",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all holders of any Gateway credential of a specific organization",
      "args": [
        {
          "name": "organization",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "TODO",
          "description": "A specific organization identifier"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

Gateway NFTs are non-transferrable ERC-721 NFTs minted on Polygon with this contract address.

They don’t have an API, so the easiest way to extract the list of addresses is by using BigQuery & Arweave.

Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.

Have fun!

[Proposal] Create a Group from Binance Account Bound Token holders

A Binance Account Bound Token is a non-transferable ERC-721 NFT that is the on-chain representation of an off-chain Binance KYC verified identity.

Creating the BinanceAccountBound Token Group will enable to generate new sybil-resistant Groups from members that are unique humans verified by a KYC.

Specifications

Expected Group: list of all addresses holding a Binance Account Bound Token.

Tips on how to create the Group

Binance Account Bound Token is minted on BNB Chain with this contract address.

The easiest way to extract the list of addresses is by using their API.

Have a look at Sismo documentation to understand how to generate a group.

Have fun!

[Proposal] Integrate Mirror as a Data Provider

Integrate Mirror as a Data Provider will enable to create new Groups from collectors of a specific Mirror post NFT.

Specifications

{
  "name": "Mirror",
  "iconUrl": "",
  "providerClassName": "MirrorProvider",
  "functions": [
    {
      "name": "Get collectors of post",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all collectors of a specific Mirror post",
      "args": [
        {
          "name": "address",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "TODO",
          "description": "A specific contract address of the post NFT"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

The easiest way to extract the list of addresses from a collected post NFT is by using BigQuery.

Here is a tutorial on using GraphQL to get data from Arweave.

Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.

Have fun!

Subgraph endpoint update required

Hey team,

We've noticed that you're referencing a subgraph deployed on The Graph's hosted service in this repository. Just a heads-up: after June 12th, hosted service subgraph endpoints will no longer be available as the offering is being deprecated.

If you are the subgraph owner or maintainer, it's time to upgrade your subgraph to the network. This ensures everything keeps running smoothly and you get access to all the latest features and improvements. Here is a quick guide with all the upgrade steps.

If you're not the subgraph owner or maintainer, check Graph Explorer to see if the subgraph development team has already upgraded to the network. If you don’t find an upgraded subgraph, a friendly nudge to the subgraph development team would be greatly appreciated—it's a quick process that benefits everyone. Here's the upgrade guide with all the necessary steps for the subgraph development team.

Once the subgraph is upgraded to the network, you can create an API key and updated query URL in Subgraph Studio then update this repository to query from the new endpoint, https://api.studio.thegraph.com/query/<ID>/<SUBGRAPH_NAME>/<VERSION>

Need more support or have more questions? Feel free to reach out to [email protected]. We're here to help!

Cheers,

Paka

[Proposal] Integrate Galxe as a Data Provider

Integrate Galxe as a Data Provider will enable to create new Groups from holders of a specific Galxe Campaign NFT.

Specifications

{
  "name": "Galxe",
  "iconUrl": "",
  "providerClassName": "GalxeProvider",
  "functions": [
    {
      "name": "Get holders of campaign NFT",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all holders of a specific Galxe campaign",
      "args": [
        {
          "name": "campaign",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "TODO",
          "description": "A specific campaign identifier"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

The easiest way to extract addresses for each Galxe Campaign NFT is by using Galxe API.

Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.

Have fun!

[Proposal] Create a Group from POAP Event Token holders

Creating the POAP Event Token Group will enable to generate new sybil-resistant Groups from members that own a POAP Event.

Specifications

Expected Group: list of all addresses holding a POAP Event Token.

Tips on how to create the Group

A POAP Event Token is a transferrable ERC-721 NFT minted on Gnosis Chain.

The easiest way to extract the list of addresses is by using POAP API.

Have a look at Sismo documentation to understand how to generate a group.

Have fun!

[Proposal] Integrate Orange as a Data Provider

Integrate Orange as a Data Provider will enable to create new Groups from holders of a specific Orange Protocol Campaign NFT.

Specifications

{
  "name": "Orange",
  "iconUrl": "",
  "providerClassName": "OrangeProvider",
  "functions": [
    {
      "name": "Get holders of campaign NFT",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all holders of a specific Orange Protocol campaign",
      "args": [
        {
          "name": "campaign",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "TODO",
          "description": "A specific campaign identifier"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

Orange Protocol Badges are transferrable ERC-721 NFTs.

The easiest way to extract the list of addresses is by using Orange Protocol API.

Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.

Have fun!

[Proposal] Integrate 101 as a Data Provider

Integrate 101 as a Data Provider will enable to create new Groups from holders of a specific 101 Course NFT.

Specifications

{
  "name": "101",
  "iconUrl": "",
  "providerClassName": "101Provider",
  "functions": [
    {
      "name": "Get holders of course NFT",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all holders of a specific 101 course",
      "args": [
        {
          "name": "course",
          "argName": "TODO",
          "type": "string",
          "required": "true",
          "example": "TODO",
          "description": "A specific course identifier"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

A 101 Course Token is a non-transferrable ERC-721 NFT minted on Polygon or Celo Chain with these contract addresses.

The easiest way to extract addresses for each 101 Course NFT is by using 101 Subgraph.

Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.

Have fun!

Api watch crash

CPU : M1 ARM
OS : 12.5.1

When use yarn api:watch command, result :

yarn run v1.22.17
$ nodemon src/cli/cli.ts api
[nodemon] 2.0.19
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: ts,json
[nodemon] starting `ts-node src/cli/cli.ts api`
/opt/homebrew/var/www/blockchain/sismo-hub/src/infrastructure/file-store/s3-file-store.ts:12
        this.bucketName = options.bucketName ?? "local";
                                              ^

SyntaxError: Unexpected token '?'
    at wrapSafe (internal/modules/cjs/loader.js:915:16)
    at Module._compile (internal/modules/cjs/loader.js:963:27)
    at Module.m._compile (/opt/homebrew/var/www/blockchain/sismo-hub/node_modules/ts-node/src/index.ts:1618:23)
    at Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
    at Object.require.extensions.<computed> [as .ts] (/opt/homebrew/var/www/blockchain/sismo-hub/node_modules/ts-node/src/index.ts:1621:12)
    at Module.load (internal/modules/cjs/loader.js:863:32)
    at Function.Module._load (internal/modules/cjs/loader.js:708:14)
    at Module.require (internal/modules/cjs/loader.js:887:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at Object.<anonymous> (/opt/homebrew/var/www/blockchain/sismo-hub/src/infrastructure/file-store/index.ts:3:1)
[nodemon] app crashed - waiting for file changes before starting...

[Proposal] Integrate DegenScore as a Data Provider

Integrate DegenScore as a Data Provider will enable to create new Groups from holders of a Beacon Token above a min score and with a specific trait.

A Beacon Token is a non-transferable ERC-1155 NFT that is the on-chain proof of achievement of a DegenScore > 700, ensuring that holders are top crypto on-chain users.

Here is how you can get your Beacon Token. More detail on Beacon traits here.

Specifications

{
  "name": "DegenScore",
  "iconUrl": "",
  "providerClassName": "DegenScoreProvider",
  "functions": [
    {
      "name": "Get holders of beacon",
      "functionName": "TODO",
      "countFunctionName": "TODO",
      "description": "Returns all holders of a beacon above a min score and with a specific trait",
      "args": [
        {
          "name": "score",
          "argName": "TODO",
          "type": "TODO",
          "example": "730",
          "description": "A minimum beacon score"
        },
        {
          "name": "trait",
          "argName": "TODO",
          "type": "TODO",
          "example": "TODO",
          "description": "A specific trait identifier"
        }
      ]
    }
  ]
}

Tips on how to integrate the Data Provider

Beacon Token is minted on Ethereum with this contract address.

The easiest way to extract addresses of Beacon holders is based on their unique Token ID, and verify that the Beacon is still true by using DegenScore API.

To get the score, you can get the balance of ERC-1155 NFTs of a Beacon holder corresponding to this Token ID.

To get the traits, you have to look at the attributes of the unique Token ID of the Beacon holder.

Have a look at Sismo documentation to understand what is a Data Provider, and checkout the tutorial to know how to integrate a Data Provider.

Have fun!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.