---
# System prepended metadata

title: Gitcoin Snapshot Validation - Preliminary Specs

---

# Supporting Materials

<div style="position: relative; padding-bottom: 61.70960187353629%; height: 0;"><iframe src="https://www.loom.com/embed/7f2197cafb9347068ad1f111b815e9ac?sid=cd046623-34e7-4fbc-8ccb-9a47b4e01cd2" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen style="position: absolute; top: 0; left: 0; width: 100%; height: 100%;"></iframe></div>

- Documentation I mention in the video: https://docs.snapshot.org/user-guides/strategies/validation-strategies#validation-strategy-example-gitcoin-passport
- The strategy we need updated: https://github.com/snapshot-labs/snapshot-strategies/blob/master/src/validations/passport-gated/README.md

# Outline/Overview of the Problem

1. **Context**:
   - Snapshot has integrated with Gitcoin passport.
   - Within Snapshot, users can gate who can create proposals and vote on them using the passport.
2. **Issue**:
   - The current integration does not use the passport effectively to prevent spam proposals or votes.
   - The integration lacks sybil defense.
   - The current validation strategy checks for individual verifiable credentials instead of stamps.
   - The system does not check for a passport score derived from the collection of stamps held by a user.
3. **Snapshot Validation**:
   - The snapshot strategies repository contains the validation strategies.
   - The passport gated strategy is the one that needs fixing.
   - The current validation checks for individual verifiable credentials and not stamps.

# What is Missing and Needs to be Built

1. **Migrate to Stamps**:
   - The current system checks for verifiable credentials instead of stamps.
   - Stamps are a collection of one or more verifiable credentials.
   - The system should check if a user holds a particular stamp, not just individual credentials.
2. **Implement Passport Score**:
   - The system should check for a passport score derived from the collection of stamps a user holds.
   - The score ranges from 0 to 100, with a good score typically being over 20.
3. **Update Schema**:
   - The current schema lists verifiable credentials instead of stamps.
   - Some of the listed credentials are outdated or incorrect.
   - The schema should allow users to select a list of stamps from the passport.
   - Users should be required to set a passport score.
4. **Update Validation Logic**:
   - The validation logic should check for the set score and any required stamps.
   - The logic should return true if the requirements are met and false if they are not.

# Task List for the Dev

1. **Review the Current System**:
   - Familiarize yourself with the snapshot strategies repository.
   - Understand the current passport gated strategy.
2. **Update the Schema**:
   - Replace the list of verifiable credentials with a list of stamps from the passport.
   - Add a required field for setting a passport score.
3. **Modify the Validation Logic**:
   - Extract the set score and any required stamps from the parameters.
   - Update the logic to check if the user meets the set score and holds the required stamps.
   - Return true if the user meets the requirements and false if they do not.
4. **Test the Updated System**:
   - Use the examples provided in the examples.json file to test the updated validation.
   - Ensure that the system correctly checks for stamps and the passport score.
5. **Review Documentation**:
   - Since the documentation is not comprehensive, review other strategies to understand the implementation.
   - Update any relevant documentation to reflect the changes made.
6. **Submit a Pull Request**:
   - Once the updates are complete and tested, submit a pull request to the snapshot strategies repository.
   - Ensure that the pull request is merged by the snapshot team by the end of August.
7. **Seek Feedback**:
   - Communicate with the client or team to address any questions or feedback.
   - Make any necessary revisions based on feedback received.

# Potential Issues Identified for the Dev

1. **Lack of Comprehensive Documentation**:
   - The existing documentation for Snapshot is not thorough. This lack of clarity can make it challenging to understand the system's intricacies and implement the necessary changes effectively.
2. **Time-Intensive Code Exploration**:
   - Due to the limited documentation, you might need to spend a significant amount of time reading through other strategies and the existing codebase to understand how to implement the required changes.
3. **Complex Schema Implementation**:
   - The schema needs to be updated to reflect the use of stamps instead of verifiable credentials. Implementing this change might be challenging, especially given the lack of clear documentation on how to structure the schema.
4. **Validation Logic Complexity**:
   - The validation logic needs to be updated to check for both the passport score and any required stamps. Implementing this dual-check might be complex, especially if the dev is not familiar with the existing system.
5. **Migration Concerns**:
   - The dev needs to ensure that the transition from the current system to the updated one is smooth. There might be challenges in ensuring that existing users and their data are not adversely affected by the changes.
7. **Tight Deadline**:
   - The client expects the pull request to be merged by the Snapshot team by the end of August. This might be a tight deadline, especially if the dev encounters unforeseen challenges during the implementation process.
8. **Potential Collaboration Challenges**:
   - The dev might need to collaborate with the Snapshot team or other stakeholders to get the changes approved and merged. This could introduce delays or require additional revisions based on feedback. The cleric and monk will run support on this.