npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@allowlist/dev

v0.2.2

Published

The easiest and most-flexible library for adding Allowlists to Solidity smart contracts.

Downloads

27

Readme

Allowlist.dev SDK + Contracts

The easiest and most-flexible library for adding Allowlists to Solidity smart contracts.

For a complete guide on installation and usage, visit https://allowlist.dev.

Quickstart

1. Add the Allowlist packages.

npm add @allowlist/dev

2. Generate your allowlist.json

allowlist gen winners.csv 
? Enter your BIP39 mnemonic seed phrase: ...

This will generate an allowlist.json file in the current directory, and tell you which signer addresses to use:

Generated the following allowlist groups:

Group:   0x12345...
Wallets: 1234

Note - if you need to generate a BIP39 mnemonic, use:

allowlist bip39

3. Add functions and modifiers to your Smart Contract

Add the mint groups to your contract, and use the allowlist helpers for your mint function.

// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.13;

import "@allowlist/dev/contracts/AllowList.sol";
import "erc721a/contracts/ERC721A.sol";

contract MyNFT is ERC721A, AllowList {
    constructor() ERC721A("My NFT", "NFT") {
        _addAllowList(
            address(0x12345...), // group address
            0.1 ether,           // the mint price
            1672552800,          // start timestamp
            1675231200,          // end timestamp
            1                    // max per wallet
        );
    }

    function allowListMint(
        address _address,
        uint256 _count,
        bytes calldata _signature,
        uint256 _nonce
    ) 
      external 
      payable 
      useSignature(_address, _count, _signature, _nonce) 
    {
        _mint(_address, _count);
    }
}

4. Mint from your Frontend

Call the mint function from your frontend of choice.

Example with React + wagmi:

import { useAccount, useContract } from 'wagmi'
import { useSignature } from "@allowlist/dev"

const signatures = require("path/to/allowlist.json")
 
function MyComponent() {
  const contract = useContract({
    address: '0x...',
    abi: [ /* ... your abi ... */ ] 
  })
  const { address } = useAccount()
  const sig = useSignature(address)
  
  const handleMint = () => {
    if (!sig) return
    const amountToMint = 1 // or mint the full allotment of sig.n
    contract
      .allowListMint(address, amountToMint, sig.s, sig.n)
      .then((tx) => tx.wait())
      .then((receipt) => {
        console.log("Mint Successful, tx: ", receipt.transactionHash)
      })
      .catch((err) => {
        console.error("Mint Failed", err)
      })
  }

  return <>
    <button onClick={handleMint}>Mint</button>
  </>
}