MillionDollarTokenPage.com (MDTP) was born almost exactly 1 year ago in an ETHGlobal hackathon ⏳. We released the first version of MDTP in September 2021 and A LOT has happened since then.
Having worked as devs on big projects like Sprite Club, Creepz and Mint Calendar, we've learned a lot and have begun to incorporate these learnings into MDTP and will continue to do so with everything we do moving forward 🏎!
As a business, we have a bunch of things on the roadmap and we are keen to share them all with you. We've recently incorporated our company and in the next week we're launching a brand new idea called Frames, so keep your eyes peeled (or jump in our discord!) to learn more 👀.
Today, the focus is on our updated contract.
Optimising our contract
The biggest update to MDTP is that it's now super gas efficient. When we started with v1 we hadn't really thought too much about gas - the NFT market was roaring away and people were minting projects without too much concern about how much it cost. Since then, lots of projects have realised that optimising gas can play a significant part in the cost of a project. We've learnt a lot and we even created our own standard ERC-721S for Sprite Club (named after Azuki's ERC-721A) which is incredibly gas efficient.
We've brought all these learnings over to MDTP and we can see the benefits here:
This is measured with a gas price of 50 gwei and eth at $3452. So minting a single token (
mintToken above) goes from ~$25 to ~$18 which is a saving of ~25%! Minting a group of 9 tokens (
mintTokenGroup above) goes from costing ~$150 to $48 only, saving almost 66%!! Doesn't that sound good 💪💪
We know many (most?) of our community members are product builders themselves so we've got a blog post coming up going as deep as we can into understanding gas costs, how to balance that with product and how we actually save gas costs wherever possible. Join our discord to get a first peak at that!
We've also added a bunch of (now) common sense things we didnt know to add to the first contract. Pausability and a bit more flexibility in minting and transferring are the biggest additions here. Go read the new contract and come ask us any questions you have 📜
Saying no to upgrade-ability
When we started planning for the new MDTP contract we immediately realised this may be needed again. It's tough in the smart contract game because you can't fix mistakes, especially coming from a world where I was deploying to production many, many times everyday!
So we seriously considered looking into upgradable contracts. They are used by some very big projects like Uniswap v3 Router and 0x Exchange Protocol, which both use upgradable contracts (two of the most used smart contracts on Ethereum). If you don't know much about upgradable contracts, here's a great primer by Moralis. In essence, it allows the storage and logic of the smart contract to be decoupled so that the logic can be updated in the future.
But this comes at a big cost. It means the developers can update the logic at any moment so means that as minters you would have to trust us to not do anything bad. For example, a bad dev could update the contract such that the
ownerOf function just returns their own address for all tokens 😱.
Whilst we would love for all our users to have the utmost faith in us, we don't like the idea of going against things we believe in. We love that smart contracts allow a decentralised, trust-less operation across millions of accounts and we're keen to uphold that. We had originally implemented MDTP v2 as upgradable but are proud to say we've now stripped that out entirely.
We may use upgradable contracts in the future but they will only be in cases where a non-upgradable contract points to a purely logical upgradable contract that cannot have an impact on users, purely on internal mechanics. If you're curious about this, jump into our discord we'd love to dive deeper!
So, we now have two live contracts on the Ethereum mainnet. The old v1 and the brand new v2. So there's a few things we need to update as a team and as a community going forward.
Here are the three main parts to our migration:
The first is the dapp thats running at MillionDollarTokenPage.com. By the time you are reading this that would have already happened. It's as simple as pointing the page to the new contract and making sure it's using the new function names we've given. We've added a few cool markers to show our love for people that minted before v2, go find them!
Since both contracts will exist at the same time, there will actually be 20k MDTP tokens in the world right now - 10k from the old contract and 10k from the new one. But we only have 10k spaces on the dapp. So the dapp only looks at the new contract to set its content.
However, we need to make sure the owners of the old tokens still have access to their space on the new version. We definitely can't sell the new token that's created representing that space. So we've created a proxy in the new contract which points to the old one for specific tokens. So any tokens bought in v1 will still have the same content and be managed by their owners. New tokens will be bought and updated purely through the new contract.
If someone was to mint old v1 tokens today, they wouldn't really be able to do anything with them since the new contract won't proxy for them.
Another key factor here is marketplaces - someone going to OpenSea or LooksRare would see an MDTP token from the old collection looking the same as one from the new collection. To combat this we are updating the metadata on the old contract so any tokens that were not minted before our snapshot will be rendered invalid. The metadata will have something really obvious on the marketplaces so people know they aren't valid anymore.
The next challenge is for the owners of v1 to become owners of their corresponding v2 tokens. We want to make sure this is done in a safe and secure way; we call it Token Migration.
The process will be for v1 holders to transfer their token into the v2 contract. The v2 contract will only accept the transfers for tokens minted before v2 started, so no cheating!
There's no rush for current holders to migrate - they will get the benefits of frames immediately. They'll definitely want to migrate in the future tho when we get our next big project going *ahem*METABUCKS*ahem*.
For individual tokens you can click the migrate button on the page. For token groups it requires etherscan for now and if you're keen to do it now we'd be glad to take you through it, just send a message to us in the Discord and we will help!
Also, anyone that minted v1 tokens will get special traits on their tokens and frames that will never go away. We'll add more utility to the OG trait over time so you know we love you :)
That was a lot, anything else?
Now that we have v2 launched we're committed to building in public. In that vein here are the things we will be announcing over the next few weeks
- Frames + PFPKit (announcement this week, launching in 2 weeks)
- Company rebrand to TokenPage (~3 weeks)
- Discord re-structure (~4 weeks)
- SpriteClub TokenPage UI (~4 weeks)
These dates are purely speculative but if as we work through these projects in public you'll know if there are delays happening on our discord.
We have a bunch more ideas we haven't discussed publicly yet but follow us on twitter and jump in our discord to be the first to hear about them. All we can say for now is that everything we build going forward will generate value for MDTP NFT holders in some way, so now is always the best time to grab some :)