2 ETH giveaway and flattening the FOMO ramp

CryptOrchids is my first crypto or NFT project and it's been an incredibly fun one to build, launch and support. I did a ton of research on other NFTs and communities to understand how other they approached things like pricing, promotion and contract details. I joined a ton of Discord servers, read as many NFT contracts as I could find, and for the most part found a truly welcoming and helpful community of folks more knowledgeable than me who were willing to help point me in the right direction. But this didn't stop me from making mistakes, and this is a story about two big ones and how I'm attempting to fix them.

Mistake 1: No LINK drain

When I first settled on the idea for CryptOrchids and started building, I didn't have the notion of seeds. Flowers would be determined on minting, not before. And I didn't like the idea of mutable tokenURIs to do some sort of reveal. But I eventually learned the difficulty of trying to randomize things on a public blockchain. I found Chainlink VRF, saw they were doing a hackathon and decided to join and use VRF to generate a random number.

The next problem was also a new but fun challenge. My minting function was doing way too much - I'm not good at Solidity yet and couldn't get the whole minting, transferring, random number generating and species selecting process under gas limits. I solved it by coming up with Seeds, and breaking up the parts into multiple transactions.

With all of that and the other pieces in place, I contacted Chainlink about mainnet usage and was surprised by the pricing. But I'm happy I decided to use VRF after seeing some recent RNG exploits, and the sticker shock turned into satisfaction as I understood the pricing model and later received a refund. Every time a seed is germinated, CryptOrchids sends 2 LINK to a Chainlink VRF node. The node operator does their job and makes a request back to the CryptOrchids contract to fulfill the random number request. The 2 LINK I send covers the gas used by the node operator to perform that work, and at the end of each month Chainlink returns the difference between the 2 LINK and gas spent in ETH.

It would be expensive to deploy the contract and I wanted to get out ahead of the LINK needs. I ran a "seed round" to generate some profits that I could convert to LINK and fund the contract. The presale went great and I was feeling confident and excited about the project. I took a bunch of ETH and swapped it for LINK - 2 LINK for every seed sold - and put it on the contract. But I have no way to get it out.

I had much bigger expectations of buyers wanting to plant seeds - I hugely underestimated how many bought seeds and with no intention to plant them. I didn't really fully understand gas and gas prices, or how much it would actually cost to water plants beyond some vague idea of expensive, say $50 - $100 USD?

Such an idiotic rookie mistake, first with the contract, and then to be so confident and egotistical and careless with a nice little sack. I try to convince myself that it was ethically and morally the right thing to do. Every seed owner should know that they are able to plant their seed, without having to trust me to fund the contract. But the 330 LINK on the contract stares at me every day.

Mistake 2: FOMO ramp

The confidence and ego after the seed round had a hint of greed as well. I'd sold a few hundred seeds and figured once they were planted and rares started popping up there'd be more interest in the project. And I had implemented what I understood as a bonding curve and which some are now calling a FOMO ramp. Prices simply increased as more seeds were sold. I'd seen similar in many of the projects and perceived it as a crypto-native thing that every project did. I can admit marveling at the money being made by projects like Chubbies and dreamt of that myself, and saw some hokey cheap-trick marketing value that might help with virality.

Seeds are still at the base price of 0.04 ETH and when I had initially factored in the 2 LINK and contract deployment costs I needed to sell 167 seeds to break even. I did end up getting most of the LINK back, so my numbers were off, but I sold 316 seeds so far, leaving 184 before the next price level.

I've since seen more discussion of this pricing model on Twitter and in some Discord servers, and have been exploring my motivations and decision-making that led to my current predicament. I certainly didn't make CryptOrchids as a cash grab and am really excited about some of the ideas I'm exploring with it that can make the game more playable. But it's not playable if it's not affordable, and if I can get more flowers growing, make enough to support myself and pay some other folks to help build some cool stuff, that's really all I need.

CryptOrchidsCoupon: An onchain giveaway and FOMO ramp destroyer

I wrote a new contract that I think can get two birds stoned at once.

I've been impressed by VeeFriends recently and the idea of access tokens caught on with me. I also don't really like seeing projects do things like retweet giveaways on Twitter - it's a low rent move with diminishing returns that also violates ideas of decentralization and trust. But of course giveaways are good marketing, and I'm at the point where I need you to plant seeds so we spend the LINK and I get a refund.

So here's how this promotion works. Each Seed germinated between now and June 1 gives the owner the ability to claim a 0.02 ETH rebate, supplies allowing. That rebate can be claimed immediately or staked in a raffle, where each rebate gives the owner one entry to a winner-take-all drawing. The promotion starts with 2 ETH on the contract, enough to claim or stake 100 rebates. So it's a fun little experiment to see if seed owners want to take the risk or cash out with the rebate, which with the skyrocketing ETH prices is nearly 100% of the cost of the original seed.

Once the 2 ETH budget is exhausted and / or reserved for the draw, the promotion pauses. If the contract is funded, more rebates become available. The contract won't offer more rebates than it's safe balance can cover based on refunds and drawing entries.

The state of the contract is communicated throughout the website - it tells you about it on the nursery before you uy a seed, on each plant that's eligible, and the contract always tells you how many rebates are currently available. It can't be perfect, but I do make every effort to communicate how this works and would love feedback to make it easier.

So here's where the FOMO ramp kicks in. If enough seeds get sold to hit further pricing levels, the rebate adjusts to effectively give the buyer a seed at the floor price. If the price hits 0.16 ETH, the rebate becomes 0.12 ETH. Everyone gets a flower at the same price if they choose. But they can also stake that increased rebate for one drawing ticket, potentially increasing the prize pool at a larger rate the more tokens are sold, which is a small reward for the early backers.

This is all handled by the smart contract, and while not audited it's well-tested and I'm getting better at Solidity. If this doesn't work, no problem - after June 1 and a winner is selected I can withdraw the funds that aren't redeemed. If 3 people stake rebates, the pot is 0.06 ETH, and whatever is left over I'll take back.

It's not a perfect system. I'll need to manually move funds around if the promotion is successful, so it will take some trust and might create some disappointment in the process. The status of the promotion contract is always clearly shown throughout the dApp and of course on the contract itself, but you could buy seeds under the assumption you will get a rebate, and then the rebates will be gone before you get a chance to redeem yours. If you're not comfortable with not being guaranteed a rebate, be sure to only buy seeds when there are a lot of rebates available.

My hope is that this helps gin up some sales and I will absolutely reload the promotion contract with more ETH to make more rebates available. I'm not wealthy by any means, but as the refund for LINK comes back at the end of each month, plus just moving from the CryptOrchids contract to the promotion contract I'll be able to make more rebates available. So hopefully an on and off thing. This contract ends June 1, but it's easily deployable again and with other parameters. No promises, not because I don't want to make any, but because you shouldn't trust any.