Create a WAX NFT
In this example, we'll write a smart contract that creates a WAX NFT Sticker using the simpleassets smart contract.
WAX NFT Sticker (Example)
Get Set Up
Use our Docker Quickstart to start a new interactive bash session. From the command line, navigate to the wax directory (or the local directory that you shared with your Docker container).
cd wax
If you haven't done so already, create a smart contracts directory. For this tutorial, we'll use a folder named mycontracts.
mkdir mycontracts
Navigate to this new directory:
cd mycontracts
From the command line, create a folder named waxnft and navigate to this new directory.
mkdir waxnft && cd waxnft
Create and Compile Your NFT Smart Contract
In the waxnft folder, create a file named waxnft.cpp and paste the following code into your NFT smart contract:
#include <eosio/eosio.hpp>
using namespace eosio;
CONTRACT waxnft : public eosio::contract{
public:
using contract::contract;
ACTION createnft() {
//assign asset attributes
name author = get_self();
name category = "sticker"_n;
name owner = "waxnftowner1"_n;
std::string idata = R"json({"name": "WAX Developer Hive", "desc" : "WAX Developer Hive Sticker" })json";
std::string mdata = R"json({"color": "black", "img" : "https://developer.wax.io/img/wax_sticker.png" })json";
bool requireClaim = false;
//call the simpleassets create action
action(
{ author, "active"_n },
"simpleassets"_n,
"create"_n,
std::tuple(author, category, owner, idata, mdata, requireClaim)
)
.send();
}
};
EOSIO_DISPATCH(waxnft, (createnft))Save your changes. This contract creates a WAX NFT Sticker with the same author and owner account. Because the
requireClaim
flag is set to false, your smart contract account is charged the RAM and the asset is instantly assigned to the owner (you).- idata includes key/value pairs that can not change.
- mdata includes key/value pairs that you can update.
From the command line, use WAX-CDT to build your NFT smart contract:
eosio-cpp -abigen waxnft.cpp -o waxnft.wasm
Your NFT smart contract is now ready to be deployed to the WAX mainnet.