How the Bored Apes Yacht Club Can Mint Unlimited Apes and Why That’s a Bad Thing

(Thanks to Dan Thomas for drawing my attention to this issue, and Matthias who appears to have been the first person to notice this, but was ignored.)

Blank Slates

In the 1970s, Salvador Dali was found to have signed tens of thousands of blank sheets of lithograph paper. Naturally, numerous Dali art owners and dealers were distraught. The potential value of their investments in the Spanish surrealist artist’s work was a risk, because anyone who got their hands on those sheets could print off reproductions that would indistinguishable from the originals, or even create new works authenticated by the artist’s signature.

The great thing about NFTs is that through the magic of blockchain and smart contracts, that kind of thing can never happen in the digital art world.

Or can it?

History Can Repeat Itself

The Bored Apes Yacht Club (current floor price 138.5 ETH), which can be found here, contains the following function:

/*
* Set some Bored Apes aside
*/
function reserveApes() public onlyOwner {
uint supply = totalSupply();
uint i;
for (i = 0; i < 30; i++) {
_safeMint(msg.sender, supply + i);
}
}

This function can only be called by the owner of the contract (due to the onlyOwner keyword), who is currently 0xaBA7…4D03. This address is still active — only 19 days ago the address was used to call the LooksRare Royalty Fee Setter contract, presumably to ensure that transfers of apes on the LooksRare NFT platform results in royalty payments for the Apes creators.

Translated into English, what this code does is

  1. determine how many tokens currently exist, and then
  2. mint 30 more in a loop.

And that’s it.

I followed the trail through _safeMint() to _mint(), and there are no checks ensuring that the maximum supply of Bored Apes is not being exceeded.

In short, the reserveApes() function can be used to mint thirty more apes at any time.

Compare this to the beginning of the mintApe() function, which contains not one, but two checks that the total supply of 10,000 apes cannot be exceeded:

/*
* Mints Bored Apes
*/
function mintApe(uint numberOfTokens) public payable {
require(saleIsActive, "Sale must be active to mint Ape");
require(numberOfTokens <= maxApePurchase, "Can only mint 20 tokens at a time");
require(totalSupply().add(numberOfTokens) <= MAX_APES, "Purchase would exceed max supply of Apes");
require(apePrice.mul(numberOfTokens) <= msg.value, "Ether value sent is not correct");

for(uint i = 0; i < numberOfTokens; i++) {
uint mintIndex = totalSupply();
if (totalSupply() < MAX_APES) {
_safeMint(msg.sender, mintIndex);
}
}

The checks are conducted on the lines containing the MAX_APES constant, and I guess there are two of them because back in those days the gas prices were less of a concern. Either one of those lines ensures ordinary mortals cannot mint more apes, thereby ensuring scarcity.

And scarcity is one of the hallmarks of value in the art world.

The MAX_APES value was set to 10 000 at the creation of the Bored Apes NFT contract (just look for 2710 in the contract creation parameters, which is hexadecimal for 10 000). But as we can see above, the contract owner can mint as many more as like, with the only limit being the amount of ETH they are willing to burn.

And presumably the contract owner has a lot of ETH. After all, they launched one of the most successful NFT tokens in existence.

Faceless Apes

Ah, but the metadata for the bored apes is locked down! So although the owner of the contract can create thirty more apes any time they like, they won’t have their own metadata file, and so there won’t be an image that they point to. There will just be an error, like this one:

ipfs resolve -r /ipfs/bafybeihpjhkeuiq3k6nqa3fkgeigeri7iebtrsuyuey5y6vy36n345xmbi/10001: no link named "10001" under bafybeihpjhkeuiq3k6nqa3fkgeigeri7iebtrsuyuey5y6vy36n345xmbi

And that means that any future bored apes won’t have traits, and they won’t have faces.

Or will they?

Well, at the moment, yes. Any newly created apes won’t show up properly on places like OpenSea.

But the Bored Apes contract also contains a function for setting something known as the “base URI” for the token metadata locations. Base URIs are like web addresses, pointing to a web server folder where all the files referred to by each token live. In the case of the BAYC, this URI is ipfs://QmeSjSinHpPnmXmspMjwiXyN6zS4E9zccariGR3jxcaWtq/ which is on the InterPlanetary File System.

This makes the files “immutable”, unlike files on a traditional web-server.

As a result, OpenSea reports the bored apes as “frozen”:

See — OpenSea clearly states that each bored ape’s metadata was “permanently locked and stored in decentralized file storage”.

So let’s have a look at this base URI setting function:

function setBaseURI(string memory baseURI) public onlyOwner { 
_setBaseURI(baseURI);
}

Again, the function can only be called by the contract owner, but allows that owner to change the base URI.

And so the contract owner can generate a new IPFS folder with all the 10 000 existing ape metadata and image files, and another 30 metadata and image files for the new apes. And then point the apes contract at that new IPFS folder.

The only thing that would reveal a new bored ape to be a later addition to the cohort is the fact that its token number will be greater than #10000. Presumably there are many people out there that wouldn’t care about that.

After all, an ape is an ape.

I would guess the probable effect of further minting would drive the price down. However, given the weird way in which prices are determined for NFTs — the mass psychology of art buyers — it’s even possible that those apes would be worth more than the originals.

Probably Nothing

In the end, Salvador Dali releasing reams of signed blank pages onto the market had no discernible impact on the historical value of his body of work, with original paintings still selling for millions.

Signed prints, on the other hand, can be picked up for less than a hundred dollars. Uncertainty about the quantity and authenticity of lithographs put a severe dent in the market for them.

What the effect of the reserveApes() function will have on the market value of Bored Apes remains to be seen.

It does, however, yet again cast serious questions as to the meaning and significance behind NFT Art.

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Keir Finlow-Bates

Keir Finlow-Bates

CEO and co-founder of Chainfrog Oy, a Finnish startup researching and developing advanced blockchain technologies.