So you may have noticed that CryptoKitties kind of blew up this weekend — in a good way. You may also have noticed that the Ethereum network also kind of blew up — in a not-so-good way. We want to make sure that CryptoKitties works well for everyone, and the most important way we can do this is to make sure that the network stays stable.

The TL;DR Version

The excitement and adoption we’ve seen this week has been overwhelming and we couldn’t be happier! However, the Ethereum network is completely full. The only way to keep CryptoKitties from lagging is to increase the gas prices so that all transactions can complete quickly. We know that increased prices will mean that some of you will need to slow down your breeding regimen, and we are incredibly disappointed by that. But who knows? Maybe this slowdown will just mean that you’ll love the Kitties you already have that much more.😺

Please double-check all future transactions in Dapper before sending them to be sure you aren’t spending more than you expect.

The Changes

  • Suggested gas prices on all transactions have been increased to 25 gwei. You can always override this, but we really don’t recommend it unless you have a lot of experience with Ethereum. It’s very easy to get your entire account stuck behind one low-price transaction.
  • The birthing fee (paid whenever you breed two cats, even two cats of your own) is going from 0.002 ether up to 0.015 ether. We understand that this is a significant increase, and we wish there were another solution. This fee goes directly to the gas costs of birthing a cat. (See below for the details on this.)
  • You should expect these costs to go down whenever possible, and to rise whenever it’s necessary. We promise to communicate large changes (more than 50% increase), but keep an eye on your Dapper transactions for smaller changes. All of these fees go to running the Ethereum network that secures your Kitties, it doesn’t go into our bank account.

The Long Version

As of this morning (Monday, December 4), CryptoKitties has more than 27k registered users, and our Ethereum network usage topped out over 25% over the weekend, making CryptoKitties the most used smart contract in the world. To be honest, we didn’t expect things to blow up this fast, and we are absolutely thrilled at how much fun you folks are having. Unfortunately, the Ethereum network is having some problems keeping up with all these Kitties!

The upshot of this is that all CryptoKitties transactions need a higher gas price in order to finish in a timely fashion. For user-initiated transactions, this is straightforward, and we can simply increase the default price in Dapper.

However, the “birthing fee” requires a bit more explanation. Breeding Kitties is a two step process: First, two Kitties are paired up as Sire and Dame, and then the gestation period begins. Then, after the gestation period is complete, the genes of the Sire and Dame are combined to produce the the genetics of the baby Kitty in a smart contract function called giveBirth(). This smart contract function (particularly the genetic combination aspect of it) is the single-most complex operation in the CryptoKitties contract, requiring over 250,000 gas. (That’s more than 10x the cost of a simple Ether transfer which takes 21,000.)

Because this giveBirth() function includes a random element, it is critical that it is called quickly after the expected birthing time (within 250 blocks, or about 30 minutes). If the call takes any longer, it provides the opportunity for bad actors to “re-roll” the random element of their genetic combination and gain an unfair advantage against other breeders. To keep this from happening, we allow anyone to call giveBirth() and we give the entire birthing fee to the first caller that successfully births the new kitten. This ensures that, even if our own servers fail or lag, there is an incentive for other people in the community to ensure that all births are happening quickly.

This was all working as expected on Friday. We had a “failsafe” server of our own that was calling giveBirth() if no one else did, but most births were actually being handled in a decentralized fashion, with several community members running their own “auto-birth daemons” (think of it as mining Kitties!). On Saturday, however, gas prices increased to the point that calling giveBirth() became a losing proposition and those community auto-birthers had to shut down. 😿

We are currently filling that gap ourselves by paying the current high gas prices to birth user’s Kitties, but this makes the birthing process dangerously centralized. The only sure way to protect the fairness of the breeding process is to increase the breeding fee to a point where community members are incentivized to run their auto-birth daemons again.

You can see a recent transaction called by our own auto-birth daemon here. If you are familiar with Ethereum transactions, you’ll see that we are paying about 13 finney (0.013 ETH) in gas costs, and are being “rewarded” with the birthing fee of 2 finney, representing a net loss of 11 finney. By increasing the birthing fee to 15 finney for everyone, we expect the decentralized auto-birth network will re-form. If gas prices continue to grow, we will need to grow the birthing fee with them, and if gas prices drop down again, we can reduce that fee again. We have some ideas about how to automate this calculation, but it will probably remain manually adjusted in the near term.

From the bottom of our kitty hearts, thank you for making CryptoKitties such a success. And another huge thanks for your patience as we work these things out. If you have any questions about this, or anything else, we’re on Twitter and Discord. Or if you’re old-school, you can always send us an email.