This is an overview of the SeaDrop protocol and how it is used for NFT Primary Drops.


SeaDrop is a smart contract used 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

Our SeaDrop protocol contract provides the latest in NFT Primary Drop functionality, including:

  • Extending ERC721A to make minting multiple tokens in a single transaction gas-efficient
  • Support for a public sale and multiple pre sales using Merkle Tree -based allowlists
  • And all the functionality needed to integrate with OpenSea’s Drops program using SeaDrop

Many creators find that they require some special functionality on their smart contracts for their drops. Our SeaDrop repository has extensions for implementations of a burnable contract and a random offset contract. If you require functionality that is not available in our pre-made contracts, feel free to extend the ERC721SeaDrop contract and add additional functionality. To ensure users have a seamless experience minting your drop on OpenSea, please don’t modify any of the minting functionality.

Notable Links

Deploying a SeaDrop-compatible contract

To deploy a SeaDrop-compatible custom contract, start with ERC721SeaDrop. Clone the repository and install Foundry with the instructions in the ReadMe. To deploy the contract, run

forge create --rpc-url $RPC_URL --private-key $PRIV_KEY --constructor-args "ExampleToken" "ExTkn" \\[0x00005EA00Ac477B1030CE78506496e8C2dE24bf5]

If you don’t need to make any customizations, deploy ERC721SeaDrop as-is with the constructor argument of allowedSeaDrop of 0x00005EA00Ac477B1030CE78506496e8C2dE24bf5. This will allow the SeaDrop contract to have permission to mint on your token contract. If you've already deployed your contract without setting the allowedSeaDrop in the constructor, you can call updateAllowedSeaDrop, available on the token contract interface.

You can customize ERC721SeaDrop by inheriting it and extending it with your own contract functionality. To make sure users have a seamless experience minting your drop on OpenSea, we don't recommend modifying any of the minting functionality.

If you have or would like to deploy an upgradeable contract, see the readme in src-upgradeable for more details. For technical questions related to the SeaDrop minting experience and capabilities, you can reference our Developer FAQ.