Skip to main content

Creating an Edition Drop Contract

In this section, we'll show how to:

  • Create the smart contract that will be used to store our NFTs.
  • Configure the metadata such as the name, image, description, and royalty fees of the Edition Drop.
  • Deploy the contract to a test network, and set up our claim phases.

Creating an Edition Drop Contract

To create an Edition Drop contract, head to the dashboard and connect your wallet.

Then click on the Deploy New Contract button.

Create a new contract

Since we want to lazy mint our NFTs, as well as use the same asset for many NFTs, the Edition Drop contract is best suited for this.

Select Edition Drop from the list of contracts and click Deploy Now.

Select Edition Drop Contract

You can configure the Name, Symbol, Description, Image, and Royalty fees in the settings before you deploy your Edition Drop.

I'll call my Edition Drop Shape Club Membership Card and stick with the default values for the rest of the fields, but feel free to go wild and configure this to your liking!

Configure Edition Drop Contract Metadata

Once you're happy, let's deploy this Edition Drop onto the Mumbai (MATIC) Test network.

Deploy onto Mumbai

This will prompt you to accept a transaction in MetaMask (or whatever wallet you connected with), and deploy your smart contract onto the Mumbai Test network!

You might notice that the transaction is requesting to Deploy a Proxy.

If you want to learn more about proxy contracts, check out our documentation on How thirdweb pre-built contracts work.

Now we're ready to create our NFT inside this Edition Drop.

Creating the Membership NFT

Let's create our NFT inside the Edition Drop by clicking the Create button.

Create Membership NFT

Enter a name, media file, description, properties, and advanced metadata for your Membership card NFT.

Configure Edition NFT

Once you're happy, click Create Edition Drop and confirm the Lazy Mint transaction.

Configuring Claim Phases

Claim Phases are conditions we can configure to define when and how users can claim NFTs from our Edition Drop.

For example, a popular claim phase pattern is to have one claim phase where allow-listed wallets can claim, then another claim phase after that, where any wallet can claim.

In the Edition Drop contract, you can set different claim phases per NFT inside the edition.

From the dashboard, click Settings on the NFT we just created to bring up the Claim Phase configuration.

Click on Add Phase, and configure it to your liking!

Configure Claim Phases

I will change the How many NFTs can be claimed per transaction? to be 1 and accept the default values for the other fields.

Update Claim Phases

Once you're happy with your claim phase(s), click Update Claim Phases and approve the transaction!

Now you're ready for users to claim the NFT!

Bonus Tip: SDK Deployments

You can do everything we just did in code using the SDK too!

Deploy the NFT Drop contract:

const sdk = useSDK();

const contractAddress = await sdk.deployer.deployEditionDrop({
name: "My Edition Drop",
primary_sale_recipient: "your-address",
});

Set Claim Conditions:

const presaleStartTime = new Date();
const publicSaleStartTime = new Date(Date.now() + 60 * 60 * 24 * 1000);
const claimConditions = [
{
startTime: presaleStartTime, // start the presale now
maxQuantity: 2, // limit how many mints for this presale
price: 0.01, // presale price
snapshot: ['0x...', '0x...'], // limit minting to only certain addresses
},
{
startTime: publicSaleStartTime, // 24h after presale, start public sale
price: 0.08, // public sale price
}
]);

const tokenId = 0; // the id of the NFT to set claim conditions on
await contract.claimConditions.set(tokenId, claimConditions);