This whitepaper describes the MNM Token and MNM NFT contracts and their relationship with one another.

The name MNM was chosen based upon the initials of the author's first child. The base image was inspired by the initials' similarity to a certain popular confection, but is in no way affiliated with any trademarked product.

This work was inspired by the desire to create an NFT that exists entirely on the blockchain and that can be retrieved and viewed without any special or proprietary decoding. Another desire was to have a mechanism where NFTs can be created or destroyed at-will while also maintaining a maximum upper bound to the number of NFTs that can exist at once.

0x539b2828649caa0e096bcfba05dda12d316c6298

The MNM Token contract conforms to the ERC-20 standard. Currently the only purpose of the token is as a utility which allows the minting of MNM NFTs. There may be additional uses implemented for this token in the future.

The number of tokens is fixed at 100,000 whole tokens. This number cannot increase but the total supply will decrease by the amount of tokens used to mint MNM NFTs. When an MNM NFT is melted the number of tokens used to mint it will be credited to the owner of the NFT and returned to the total supply.

0x3be1ac5505f2772d2062dede461f467d46f23974

The MNM NFT contract conforms to the ERC-721 standard. MNM NFTs are all algorithmically generated from a common base image. The algorithm uses an ordered list of 9 parameters, each with a range from 0 to 255. The list of parameters must be unique for each NFT. When an NFT is minted the parameters may be pre-selected, otherwise, they will be randomly generated. In order for an NFT to be minted the owner must supply at least 1 MNM Token for a randomly generated NFT and at least 9 MNM Tokens for a custom selected NFT. The number of tokens that are supplied are taken out of circulation and are bound to the minted NFT.

The 9 parameters which define an NFT are used by the generative algorithm
to produce the image for the NFT. The algorithm applies the following
formula to each palette entry in the base image:
NFT_{C} = ((Palette_{C} ^ MX_{C}) + MA_{C}) * MM_{C}
where Palette_{C} is the Palette
value in the base image for a given color C,
MX_{C} is the Xor parameter
for a given color C,
MA_{C} is the Add parameter
for a given color C, and
MM_{C} is the Multiply parameter
for a given color C. Each palette entry and Xor, Add, and Multiply
parameter has fields for red, green, and blue. The order of the NFT parameters is
MA_{Red}-MA_{Green}-MA_{Blue}-MX_{Red}-MX_{Green}-MX_{Blue}-MM_{Red}-MM_{Green}-MM_{Blue}.

When an NFT is randomly generated the number of parameters that are mutated corresponds with the number of tokens which are supplied. If less then 4 tokens are supplied the only the MA parameters will be mutated. If less than 7 tokens are supplied then only the MA and MX parameters will be mutated. Parameters that are not mutated will have a default value of 0 for MA and MX parameters and 1 for MM parameters. If more than 9 tokens are supplied then the generation of parameters will behave the same as if 9 tokens were supplied.

The total number of MNM NFTs is limited by the number of MNM Tokens.
Since at least one MNM Token is required to mint an MNM NFT, the naive
maximum would be 100,000. However, since a single token will produce
an NFT that has only one of the first three parameters mutated, there
can only be 256 * 3 = 768
possible NFTs created using a single token. An NFT
that is minted using two tokens will have two of the first three
parameters mutated. This means that there are 256 ^{2} * 3 = 196,608
possible NFTs to be created from two tokens, which would easily exhaust the
100,000 MNM Tokens that exist. This means that the theoretical
maximum number of MNM NFTs that can exist at once is (100,000 - 768) / 2 + 768
= 50,384. Of course this is the theoretical maximum because it assumes that
the absolute minimum number of tokens are used to mint each NFT. In actuality
any number of tokens greater than one could be used to mint an NFT, so it is
technically possible for all 100,000 tokens to be bound to a single NFT.

Given that there are 9 parameters each with a range of 0 to 255, the
total number of unique permutations is
256 ^{9} = 4,722,366,482,869,645,213,696.
Each NFT that exists must have a different set of parameters, but it
is possible for two different sets to produce the same image. This is
due to the nature of the generative algorithm that was selected. For
example, each NFT that has 0 for all of the MM parameters will produce
an all black image because the multiplication operation is performed
after the xor and add operations and therefore the result would be 0
for each palette entry.