SeaDrop
SeaDrop is a contract for conducting primary NFT drops on evm-compatible blockchains.
Table of Contents
Background
SeaDrop is a contract to perform primary drops on evm-compatible blockchains. The types of drops supported are public drops, allow list stages, token gated drops, and server-side signed mints. An implementing token contract should contain the methods to interface with SeaDrop
through an authorized user such as an Owner or Administrator.
Future SeaDrop contracts are envisioned to contain additional functionality like descending dutch auction mechanisms and payment in ERC20 tokens.
Deployments
Network | SeaDrop 1.0 |
---|---|
Ethereum | |
Goerli | |
Sepolia | |
Polygon | |
Polygon Mumbai | |
Klaytn | |
Klaytn Baobab | |
Optimism | |
Optimism Goerli | |
Arbitrum One | |
Arbitrum Nova | |
Arbitrum Goerli | |
Avalanche C-Chain | |
Avalanche Fuji | |
BSC | |
BSC Testnet | |
Gnosis Chain |
To be deployed on other EVM chains:
- Skale
- Celo
- Fantom
- RSK
To deploy to a new EVM chain, follow the steps outlined here.
Diagram
This diagram shows the logic flow in the case that a drop is hosted on OpenSea, with an optional mint hosted elsewhere. Note that a fee recipient is not required to integrate with SeaDrop, and a fee recipient may be any address.
Docs
Install
To install dependencies and compile contracts:
git clone --recurse-submodules https://github.com/ProjectOpenSea/seadrop && cd seadrop
yarn install
yarn build
Usage
To run hardhat tests written in javascript:
yarn test
yarn coverage
To profile gas usage:
yarn profile
Foundry Tests
SeaDrop also includes a suite of fuzzing tests written in solidity with Foundry.
To install Foundry (assuming a Linux or macOS system):
curl -L https://foundry.paradigm.xyz | bash
This will download foundryup. To start Foundry, run:
foundryup
To install dependencies:
forge install
To run tests:
forge test
To run gas snapshot:
forge snapshot
The following modifiers are also available:
- Level 2 (-vv): Logs emitted during tests are also displayed.
- Level 3 (-vvv): Stack traces for failing tests are also displayed.
- Level 4 (-vvvv): Stack traces for all tests are displayed, and setup traces for failing tests are displayed.
- Level 5 (-vvvvv): Stack traces and setup traces are always displayed.
forge test -vv
For more information on foundry testing and use, see Foundry Book installation instructions.
To run lint checks:
yarn lint:check
Lint checks utilize prettier, prettier-plugin-solidity, and solhint.
"prettier": "^2.5.1",
"prettier-plugin-solidity": "^1.0.0-beta.24",
Audits
SeaDrop was audited after development by Spearbit, read the report here.
Contributing
Contributions to SeaDrop are welcome by anyone interested in writing more tests, improving readability, optimizing for gas efficiency, or extending the protocol with new features.
When making a pull request, ensure that:
- All tests pass.
- Code coverage remains at 100% (coverage tests must currently be written in hardhat).
- All new code adheres to the style guide:
- All lint checks pass.
- Code is thoroughly commented with natspec where relevant.
- If making a change to the contracts:
- Gas snapshots are provided and demonstrate an improvement (or an acceptable deficit given other improvements).
- Reference contracts are modified correspondingly if relevant.
- New tests (ideally via foundry) are included for all new features or code paths.
- If making a modification to third-party dependencies,
yarn audit
passes. - A descriptive summary of the PR has been provided.
License
MIT Copyright 2022 Ozone Networks, Inc.