Verifying user uniqueness on Snapshot

We support snapshot for voting and provide a backend for it. Projects are then able to choose e.g. quadratic voting as a voting system as it is susceptible to sybil attacks as uniqueness is required for voting. See also: https://docs.snapshot.org/proposals/voting-types#quadratic-voting.

For every vote and every update all votes and connected ethereum addresses need to be sent to the backend. This is provided by the general API-Post strategy from snapshot https://github.com/snapshot-labs/snapshot-strategies/tree/master/src/strategies/api-post.

Are you a DAO and do you want to enable 1 person 1 vote or quadratic voting? No problem, we have you covered:

Using the strategy in your Snapshot settings

To use the API strategy you have to select it in the settings of snapshot: setup

After that you edit the post command to include our endpoint: https://snapshot.zkportal.io/verify_eth_addresses

setup2

Further you can edit the symbol and decimals if needed.

Caution:

The snapshot strategy does not verify the TEE report yet! If enough community support exists we can merge a custom made strategy which would allow us to also provide a report in the response to the snapshot query to verify its source.

Letting users prove their uniqueness

All that is left, is for your DAO members to prove their uniqueness, you can point them to the instructions here!

Technical details

By default, addresses which are queried are given a score of 0. If a user proves their uniqueness with zkportal and links an address, the score will be set to 1. Even when users generate and link multiple addresses, only one address will get a score of 1.

Example Response from our backend:

{
  "score": [
    {
      "score": 1,
      "address": "0xEA2E9cEcDFF8bbfF107a349aDB9Ad0bd7b08a7B7"
    },
    {
      "score": 0,
      "address": "0x3c4B8C52Ed4c29eE402D9c91FfAe1Db2BAdd228D"
    },
    {
      and so on
    }
  ]
}