Creating NFTs, Drops and Packs on

Hive Digital
19 min readJul 21, 2022


We recently launched our very own creator tool, which initially enabled our users to mint and manage their own NFT collections. Over time, we added feature upon feature, refined workflows, and the overall user experience. Today we’d like to take a moment and provide an in-depth guide on how to use it, from minting your first NFT to dropping your own packs.

Before we start

A wallet is required to use the editor, as it enables you to interact with the WAX blockchain in general. For starters, we recommend the official WAX cloud wallet. You can create one on

Setting up our first collection

Our very first point of entry will be, which we can also always find via ‘Editor’ in our main menu. The editor is entirely designed around the concept of collections, so that’s the first thing we’ll have to create.

The editor will help us with the information we’ll have to enter. One common question we hear a lot is: How do you upload pictures? Most of the pictures and videos you see in NFTs are hosted on ipfs, the InterPlanetary File System. Think of it as a decentralized distributed network of servers, hosted by people all around the world. To get your picture on there, you can use a service like pinata allows you a contingent of free uploads once you create an account. Just copy the ipfs hash that’s being displayed after uploading your picture, and paste it into our editor. Please note however that it may take several minutes after the upload until the image has propagated around ipfs servers around the world (including ours), so the image may not appear in the editor immediately.

Once we’ve filled out all the necessary information for our collection, we can hit ‘Save Changes’ at the bottom. We will be taken back to the main editor overview, and since it can take a few seconds for our collection to be created on the blockchain, we may need to hit refresh after a couple of seconds.

Once our collection is live, we should hit ‘Collection Editor’ to populate it with some NFTs, before we start to worry about drops and packs. Scroll down to the bottom, and you’ll see the option to create schemas:

So what’s a schema? Schemas are part of the atomicassets contract our editor is built upon. This ensures compatibility with other marketplaces, first and foremost the atomichub marketplace. Schemas are a concept that allows us to break our collection down into smaller subcategories. The most important thing to keep in mind is that all NFTs from the same schema will share a set of attributes we can define ourselves. We’ll explore this concept further by building a small sample schema. Let’s say our collection is game-centric, and the NFTs within represent items the player will be able to use in it. We’ll choose a fantasy setting, and we will create two different schemas: weapons and armor.

Once we hit the “New Schema” button, we are greeted with a new form, in which we can define the name and attributes of the schema. “name” and “image” are default attributes, they are the bare minimum for any schema must have. We add some more attributes that will come in later when we’re going to mint our NFTs. “type” is a text attribute, “damage” and “range” will be numeric, and “twohanded” will either be true or false. Armor will have a “weight” and a “rating” for its effectiveness.

Going back to the collection, we can now see that our schemas have been created:

We forgot something! A very common attribute in the NFT space is the ‘rarity’ attribute, which indicates how hard it will be to acquire the NFT. Luckily, we can still add further attributes to our schemas:

There’s a ‘Common Attributes’ dropdown ready for these. It’s also possible to select multiple attributes and add them at once, but we just need “rarity” for now. After we’ve updated our schemas, we’re ready to mint!

We’ll start with weapons, by clicking the “New NFT Template” button at the bottom:

This will take us to the next dialogue.

We’ll begin with a common fantasy trope starter item. As you can see, we can now enter values for the attributes we just defined in our schema. But wait, we’re still not minting NFTs, but we’re creating something called a template now? A template is a blueprint for the actual NFTs. It is also stored on the blockchain, and it can be used in the next step to create actual NFTs. Let’s see what happens when we are creating a template.

As you can see, there’s one more option. The ‘Max Supply’ allows us to limit the amount of actual NFTs that will be in circulation later on. Our wooden sword is supposed to be an item every new player gets when they start their journey, so we’ll mint these when a new player signs up, and we don’t want to limit ourselves here. We’ll leave Max Supply at 0, which means there won’t be any limits on how many we’ll be able to mint of these.

We’ll create one more weapon, the legendary Blue Flame Daikatana:

This one is different. Only one will ever be made, and it will be awarded to the most comitted player.

These values are also displayed in the overview:

The Max Supply value is displayed on all marketplaces, it is definite proof that this NFT is something very special and desirable. But hold on, there is no actual NFT yet! Let’s finally mint it, by clicking the “View / Mint” button, we get to a view that looks very similar to the template creation view, but now there’s an actual mint button. Clicking it reveals the next dialogue option:

Ignoring the nfthivedrops option for now, we are going to mint 1 NFT into our wallet. And that’s it! You can view the asset here if you like:

We’ll do the same for a bunch of wooden swords and armor sets, but since the process is nearly identical, we’re not going to document it here.

Creating a Drop

Now that we have some NFTs, it’s time to get them in the hands of people. We could just list them on the market, but lately, it’s all about drops! A drop is a kind of special sale that we can set a start time for, and link to on our socials. It’s a one-stop-shop and we don’t have to advertise for each NFT individually. So let’s dive into drops. We’ll click on “Manage Drops” back in the collection overview.

We are greeted with a new view, which allows us to create new drops:

So let’s hit “New Drop” to get going.

We are greeted with a message that tells us that we need to authorize the nfthivedrops contract to interact with our collection. There’s a button that lets us do just that, so we’re going to allow that.

Next up, we have a pretty substantial choice to make. Drops can either be “Mint on demand” or “Premint”. What does that mean? And which one is better? Both varieties have their pros and cons. Mint on demand means that we let the nfthivepacks contract do the minting for us. All we need for that is to tell the contract which template to use, and how many drops there should be available in total. That means the NFTs don’t exist before our buyer hits the “buy” button, they’re minted in that instant instead. We do need to provide some RAM since NFTs take up RAM on the blockchain.

Since we already have minted our NFTs ourselves, we’ll choose the “Premint” option. By doing so we have full control over all the details of which NFTs will end up in the drop, and we don’t need to provide RAM for the contract, since the NFTs already exist on the chain.

The next important bit of configuration is the purchase limits and restrictions. Offscreen we already have minted 5 Armor NFTs which we want to sell in this drop, so there will be 5 drops in total. Each drop must have the same kinds of NFTs in it, so we can’t say our drop will be made up of 3 pieces of armor and 2 swords.

We also make sure that any user can only buy one of the items, and we don’t introduce a cooldown since it’s not required in this case.

As stated above, every drop contains the same kind of NFT, and with this setting, we can tell the editor which one to use. Note that we could also throw a weapon in here, then each of the 5 claimable drops would include a piece of armor and a weapon.

We then get to name our drop anything we like, and also set a description that will tell the user what to expect and what he can do with the NFTs.

This next step is purely optional. We have the option to set a start and/or end date for our drop (or none at all). Setting a start date will result in a timer being displayed on the drop page, and hinders everyone from buying a drop until the specified start date. This is a great way to generate hype around a drop and allows us to link to it before the sale starts.

We can then define what a drop will cost the buyer, and optionally if we want to split up the profits. This is useful for collaborations, and you can also define the splits themselves. The editor will tell you how much goes to each account according to the splits you have defined.

The final option we have is that we can restrict drop purchases. We can’t set the rules up at this moment, but we’ll do that in a minute.

Once we hit “Create Drop” we can go back to the overview. And as we can see, the drop has appeared in our list of drops. From here we can edit several aspects of the drop, and we also find the link to the actual drop page. So let’s check out how our drop looks for other users.

The drop looks pretty much ready to go. This is the link we would share on our socials to make people aware we have something to sell. But we have to go back and do two more things:

When we created the drop, we enabled account restrictions. So back on the overview, we click on the “Update” button in the “User Verification” column, and we are taken to another menu. But why would we restrict who can buy our drop in the first place?

There are two common scenarios. Some collections use whitelists to allow people to buy the drop. Whitelists contain the wallets that are allowed to buy the drop, and usually, these spots can only be won in a raffle of sorts. Think like asking your followers to retweet a link to your game, completing a certain challenge within the game, etc. This approach can generate more hype around your drop, and increase the visibility of your project on social networks. The other scenario is, that the user has to have a certain NFT in their wallet to be allowed to buy the drop. Think for example a VIP pass that they purchased earlier, with which they get exclusive access to certain drops.

The editor supports both scenarios, but they are mutually exclusive; you can’t have a whitelist with additional proof of ownership requirements. We’ll use the proof of ownership mechanism here, the user needs to have at least one wooden sword. As mentioned above, every new player gets one, and this way we can make sure only players with an account can purchase the drop.

After saving the Authentication rules, we go back to the overview and finally hit the “Add Assets” button. So far we only established that the drop is a premint drop and that it will contain armor NFTs. However, the actual NFTs are still in our inventory, and we need to transfer them to the drop contract so that the user can receive the NFTs. The menu that presents itself lets us handpick the individual NFTs (by their mint numbers). We have to select the same amount of assets per template, as we want drops to be there. In this case, we determined we want 5 drops, and we only minted 5 NFTs, so we can just select all of them, and confirm at the bottom of the page. We also need to separately click “Finish Drop”, and then we’re done.

The individual assets we added to the drop also have become visible on the drop page now.

Packs — The next level

While drops are a great improvement over basic market listings, we can go a step further with packs. So what are packs? Think of packs like the actual trading card packs you may have bought as a kid at a store. You only knew what could be inside them, but not what exactly would be inside them. What made those packs so attractive is that they were usually pretty cheap, but may have contained cards that were far more valuable. The same experience has since been ported to the web3, with packs that can contain a variety of different NFTs. We’re going to create a set of packs, step by step, but for now, let’s get some terminology and core concepts out the way before we dive in. Packs are not quite as straightforward as drops. First of all, we introduced the concept of Releases. A release can have multiple packs in them. For example cheaper common packs, with few NFTs in them, and more expensive and more exclusive packs, with more NFTs and higher chances of getting better NFTs in them. Currently, only preminting packs are available, which means we must take care of minting those NFTs ourselves. We can then define pools, in which we put our NFTs. Usually, those pools are grouped by rarity (like a common pool with lots of common NFTs, a rare pool with a few rare NFTs, and an epic pool with a handful of epic NFTs).
We call the order of which NFTs are pulled from the pack slots. Slots pick NFTs from the pools in order of the pools’ creation. That means the first NFTs in a pack will be from the most common pools, then we draw from the rare pool and towards the end, we draw from the epic pool. Depending on how many NFTs are in the pools, the odds for each slots vary. Imagine an easy scenario. You have packs with 10 NFTs in them and you have created 3 pools with 70 and 20 and 10 NFTs. That means, the first 7 slots will draw from the common pool, slot 8 and 9 from the rare pool and slot 10 from the epic pool. If 80 NFTs are in the common pool, 15 in the rare and 5 in the epic pool, you’ll have a 50:50 chance of drawing an item from the rare pool or the epic pool on the 10th slot. With that you can very easily create interesting mechanics on how NFTs appear from your packs. If you want to have slight chance of pulling rare items from the first slots, you can achieve that by adding some rare NFTs to the common pool. NFTs from one pool will be pulled at random, so rare NFTs have a chance of appearing on the first slots when you mix them into the pools.

Now before we set up a pack, we need to create a template for an NFT that represents the pack itself — yes, the pack is an NFT, that will contain other NFTs. So we go back to our collection editor and create a new schema called “packs”.

As soon as we type in the schema name, the editor auto-suggests the attribute “unpack_url”. This is a common attribute and will contain the link the user can later visit to unpack the actual pack. We’ll leave it at this for now and create the schema.

Next up, we create the template itself. The unpack_url is auto-filled with a link that will work for the user later on. The Image we are using for this NFT should indicate that this is a pack, and not just use the image of an NFT that will be inside of it. We can create this template as is for now, and set the max supply of this pack to 5, as we intend to create exactly 5 packs later on.

We can now head back to the collection overview.

This time we click on “Manage Packs” to start with the actual setup process of the pack.

Once again we are looking at a new menu and an empty table. We’ll create and aforementioned release by clicking the “New Release” button.

The table now has an entry, and the first thing we should do is create a pack. We can click on the “Show” button in the Packs column, and find yet another empty table. So we’ll click the “Add” button right next to it.

The first thing we have to do here is select which template represents our pack. We’ll pick the weapons pack template we just created in the step before.

Next up is the pack name and description. This is very similar to drops. The name is auto-filled with the name of the template we chose before, but can be changed.

If we have an unpack animation ready and on IPFS, we can apply it in the next step. The animation will be played in fullscreen when the user opens the pack. It is optional, and for this tutorial, we won’t include one.

We can then define how many packs there will be (the total pack amount is auto-filled with the max supply of the pack), and we can also define the number of slots in each pack. In this case, we’ll set it to one, which means every pack will contain exactly one NFT. Usually, this number would be higher, but for the sake of this tutorial, we’ll leave it at that.

Finally, we can set an unlock time if we want. If we do, users will have to wait until then to open their packs. We will not set a start date here and create our pack directly instead.

Back in the overview, we can now see that the pack has been created. We will now set up pools this pack can pick from. For that, we’ll click the “Add” button in the Pools column.

Pools also have names, and those must be chosen upon creation. We’ll start with a common pool, which contains the most common items.

The pool appears immediately in the table, and we’ll now add some items to it by clicking the “Add / Remove Assets” button.

The next screen can be overwhelming at first. Most of the design decisions here have been driven by the extremely large amount of templates and assets some people have in their collections. We simply cannot guarantee that we’ll be able to load all assets at once, as that may crash the page for some users. So every action here will trigger a load in the background.

First, we want to add 4 wooden swords to the pool. So we expand the “weapons” schema, click the “Edit” button, and wait until the analytics data has been loaded. What we’re seeing now can be confusing. On the one hand, it says that 4 wooden swords have already been minted, at the same time, zero assets have been added to any pools yet, and no swords are available to be put into this pool. That’s because those 4 minted swords are still in our wallet, and the pack editor can only move assets into pools which are in the ownership of the “nfthivepacks” contract. So we have two options here. We can either transfer the four swords from our inventory to the contract, or we can mint new swords directly into the contract. Since wooden swords are in no short supply, we’ll mint some fresh new ones into the contract. For that, we can use the “Mint” button.

We are taken to the familiar editor that we have used before. We click on “Mint” once again but make some changes in the process. We enable the “Use in a pack” toggle, which changes the receiver to “nfthivepacks”, and we set the amount to mint to 4. After minting the NFTs, we can simply use the back button in our browser to go back to our pool.

Now we see that there are 8 assets in total, of which 4 are currently “unassigned”, which means we can add those. We increase the number to add to 4, scroll to the button and click “Update Pool”.

Back in the overview, we can now verify that there are four assets in the common pool. We’ll create another pool called “epic”. This one is supposed to hold our 1 of 1 “Blue Flame Daikatana”. But, we already minted that, and it has a max supply of 1, which means we cannot simply mint a new one into the contract! We have no choice but to transfer it to the contract.

We’ll go to our inventory, find the asset, select it and use the quick transfer function. The name of the receiver is “nfthivepacks” and the memo must be “deposit”.

And voila! The Blue Flame Daikatana becomes available as well. We can add it to the pool, just like before.

We now have set up 5 packs with 1 slot each, which means we want to distribute 5 NFTs in total, and we have set up two pools with 5 NFTs in total, so the math checks out! We can now hit the “finish” button to mark this pack as ready to be sold.

The status has been updated to “Unlocked” and the “Finish” button is no longer clickable.

But how do we sell our pack now? We just created a “Weapons Pack” template, we haven’t yet minted them. Well, we could just mint them and put them up for sale, or we could create a drop for them, a so-called pack drop.

So let’s do that. We are going to mint the packs first, and this time, use the “Use in a drop” toggle.

After we successfully minted the assets, we go back to the drop editor, create a new drop, and set it up. We are going to set the max claimable drops to 5, and select the “Weapons Pack” template.

And just like before, we add the assets to the drop after we have created it, and to preserve this drop for future reference, we also restrict the buyers to a whitelist that only includes this account. You can check out the drop here if you want:

Once the user has claimed the drop, a pack will appear in his inventory. In contrast to other NFTs, this one has an “Unpack” button. Hitting it will open the pack, burn it, and transfer its contents into the user’s wallet.

Lucky me.

If you have any open questions or suggestions, please talk to us on our discord! We’re always happy to hear from You!