0.2.2 • Published 1 year ago

@allowlist/dev v0.2.2

Weekly downloads
-
License
MIT
Repository
-
Last release
1 year ago

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>
  </>
}
0.2.2

1 year ago

0.2.1

1 year ago

0.2.0

1 year ago

0.1.0

1 year ago

0.0.7

1 year ago

0.0.6

1 year ago

0.0.5

1 year ago

0.0.4

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago