GithubHelp home page GithubHelp logo

hatseligibilitymodules's Introduction

HatsEligibilityModules

HatsEligibilityModules is a repo containing a number of separate eligility modules for Hats Protocol. The modules are summarized below:

  • AddressEligibility: check if addresses are on a whitelist that admins can edit
  • DecentralistEligibility: checks if an address is on a Decentralist list
  • ERC20Eligibility: checks if addresses meet a minimum balance of an ERC20 token
  • ERC721Eligibility: checks if addresses meet a minimum balance of an ERC721 token
  • ERC1155Eligibility: checks if addresses holds at least one minimum balance of a set of ERC1155 token Ids

All contracts are based on the Hats Protocol's repo: hats-module

Note: The contracts in this repo have not been audited - use at your own risk.

Deployments

For Eligibility Module deployments, see Releases.

Development

This repo uses Foundry for development and testing. To get started:

  1. Fork the project
  2. Install Foundry
  3. To compile the contracts, run forge build
  4. To test, run forge test. The tests require a private key and a valid mainnet rpc API KEY. A .env.example file is provided.

hatseligibilitymodules's People

Contributors

gershido avatar pumpedlunch avatar

Watchers

 avatar

Forkers

gershido

hatseligibilitymodules's Issues

Optimize for loops

The following optimizations and cleaner code can be achieved in for loops:

  1. Since i is set to a known value, incrementing i can be done without over- or underflow checks.
  2. ++i is slightly cheaper than i++
  3. Solidity uints are initialized by default to 0, so when beginning a loop at i = 0, its not necessary to explicitly initialize i to be 0.

These three changes can be applied to blocks like the following...

for (uint256 i = 0; i < len; i++) {
     isEligible[_addresses[i]] = true;
}

...to get:

for (uint256 i = 0; i < len; ) {
     isEligible[_addresses[i]] = true;

     unchecked { 
          ++i;
     }
}

These optimizations can be applied to AddressEligibilityModule.sol

Normalize module naming convention

While ERC20EligibilityModule and ERC721EligibilityModule derive eligibility from a single token, ERC1155EligibilityModule derives eligibility from one of multiple tokens. Using the same naming scheme for both single and multi token modules creates some confusion.

I'd suggest changing to MultiERC1155EligibilityModule.

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.