Launchpad Specification

About Launchpad

Launchpad allows NFT projects to host their primary sales on

How it works

When a user makes a purchase order on Galler's Launchpad, our smart contract will call your minting function. Both our smart contracts will interact.

There are 3 functions that have to be implemented from the project side,
mintTo(address to, uint256 size).

Let's dive deeper!

Inside the contract folder on our github, there are 2 smart contracts that help projects understand how it works.

file namedescription
LaunchpadNFT.solA template for NFT project, would have to implement 3 functions which are getMaxLaunchpadSupply(), getLaunchpadSupply() and mintTo(address to, uint256 size)
Launchpad.solThis is how Galler's smart contract interacts with yours.

Before we're able to onboard your collection to our launchpad, please go through these 2 files, make sure your smart contract fit our requirement.

From our side, we will have to know about the quantity of NFTs and call your mint function to complete the transaction.

About Quantities

In case a project decides to host their primary sales on multiple platforms (including their own website), they can reserve a certain quantity for Galler. And that's where getMaxLaunchpadSupply() is used for.

As for getLaunchpadSupply() will be counted when a mint is triggered.

function mintTo(address to, uint size) external onlyLaunchpad {
        require(to != address(0), "can't mint to empty address");
        require(size > 0, "size must greater than zero");
        require(LAUNCH_SUPPLY + size <= LAUNCH_MAX_SUPPLY, "max supply reached");

        for (uint256 i=1; i <= size; i++) {
            _mint(to, ERC721Enumerable.totalSupply() + i);

About transactions

For every transaction made through our launchpad, our side distributes the price received to your address. Please note that we will charge a fee when a transaction is made.

This part is been emit from our smart contract which you can check from "Launchpad.sol"

// transfer token and mint
        ILaunchpadNFT(contractAddress).mintTo(msg.sender, batchSize);

        emit Mint(campaign.contractAddress, campaign.payeeAddress, batchSize, campaign.price);
        // return
        uint256 valueLeft = msg.value - totalPrice;
        if (valueLeft > 0) {

Launchpad is small and simple, it work as a sell proxy, collect mint fee and mint your NFT for user.
Your contract needs to support Galler NFT Protocol Standard and implement some special interfaces.

Quick summary: these are the 3 functions you have to build in your smart contract

interface ILaunchpadNFT {
    // return max supply config for launchpad, if no reserved will be collection's max supply
    function getMaxLaunchpadSupply() external view returns (uint256);
    // return current launchpad supply
    function getLaunchpadSupply() external view returns (uint256);
    // this function need to restrict mint permission to launchpad contract
    function mintTo(address to, uint256 size) external;



You are responsible to handle the tokenId for each mint action, so you can hold a special range of tokenId as reserve.

Helpful links

Launchpad deployed address



BSC Testnet




ETH Rinkeby