Make sure they can get in....
Picture the scene: you're ready to drop, and you've come up with a great way to get your brand out there!
There are some amazing NFT communities that you want to get onboard. You're going to allowlist these communities, so holders of these NFTs get a discount, or maybe even something for free?!
But there is a BIG problem. These NFTs are valuable, and most holders keep them locked up tight in cold wallet vaults. And these communities are relentlessly targeted by scammers, so holders are very reluctant to connect their cold wallets to apps in order do anything, including minting new NFTs.
Your allowlist is mostly cold wallets. And while your project is going to be huge, it's relatively unknown right now. Many people aren't going to take the risk of connecting their cold wallet to your minting app.
But hey, what else can you do?
You can use EPS...
EPS allows people to connect with a hot wallet with a handful of wei in and still prove that they own 480 bored apes in a cold wallet.
But you know that already, right? If not, read up here.
EPS and merkle tree allowlists fit together like they were made for each other. Because, uh, they were.
Add EPS to your merkle tree check in under 60 seconds or your money back
First of all the bad news: you're paying nothing for EPS, so there is no money for you to get back.
But, I truly believe you can add this to your contract in under a minute.
I am assuming you have a contract with a merkle tree allowlist check in there already. This article doesn't cover how you do that, just how you add EPS into the mix. If you really want an article on how to use a merkle tree for allowlist minting hit me up on twitter @eternalproxy and I'll think about writing one.
To add EPS to an existing merkle tree allowlist check do this:
This provides a valid EPS object. (EPS is at the same address on all supported chains, no need to hunt through docs to find the right address to add to your constructor, it's already taken care of).
We are going to use the getAddresses view in the EPS portal to tell us if the connected wallet has an EPS cold wallet associated.
Immediately before your merkle check add the following call:
(address coldWallet, , ) = epsPortal.getAddresses(msg.sender);
If the connected wallet has an EPS cold wallet you will now have that address in variable coldWallet. If it doesn't have an EPS cold wallet the connected wallet address is now in coldWallet. This makes this call 100% backwards compatible.
What do I do with 'coldWallet'?
Just pass coldWallet into your merkle check and you will be able to allowlist all those webaverse / ape / punk / wassie holders that have cold wallets on your allowlist and who have their cold wallet ledger devices buried in 3 feet of reinforced concrete.
(A note - cold wallets on an EPS record can't call getAddresses directly, they must operate through the hot wallet. This is important, otherwise they could mint through an EPS hot wallet call (returning the cold wallet address), and interacting directly. That would be double-dipping and just not fair, so we don't allow it).
Wait, am I all done?
You contract changes are done!
You need to make sure that you are passing in the right merkle proof from your front-end app. This means you need to check for the cold address in your front-end and calculate the proof for the cold wallet you get back for the hot (you can call the same function as above to get the cold wallet address).
Surely there is more?
No, you are done. Go touch grass friend.
But I want there to be more!
OK, if you want to go next level and delight and amaze your new community make the call to getAddresses do this:
(address coldWallet, address deliveryWallet, ) = epsPortal.getAddresses(caller_);
The variable deliveryWallet now has the address that the holder has said they want new assets to go to. If you mint directly to this address you are allowing your new holder to get new assets directly where they want them. Maybe even to that ledger buried in 3 feet of reinforced concrete.
They don't have to shuffle from hot to cold. And now that your NFT is in their vault they will probably just hold it forever.
Which is what you both want, right?
Stay safe out there.