Removing the ICO Rush

Killer Success

Many of the popular token sales / ICOs have run into the same issue:

  • There are only a limited amount of tokens for sale
  • The sale worked on a first-come-first served basis
  • Demand significantly exceeded supply

The above combination resulted in a network congestion, as people rushed in and flooded the network with transactions. This, in some cases, caused a day-long network slowdown.

This will get fixed once sharding and the other scalability features are implemented, but that will take some time.

But even until then there are some valid strategies that can be applied to keep all parties happy, including the ethereum network.

Guaranteed Participation

This strategy lets everyone in, and if demand exceeds supply, then everyone gets less tokens, and will get their excess ETH returned to them during the token distribution phase.

Let’s assume that the ICO is selling TKN tokens, and 1 TKN = 1 ETH. The total supply is 100 TKN.

If the ICO does not get oversubscribed, and you send in 10 ETH, then you will get your 10 TKN after the end of the sale.

If the ICO gets oversubscribed by 200% (200 ETH comes in during the sale period), and you sent in 10 ETH, then you will get back 5 TKN and 5 ETH. Similarly, every participant will get back 50% of their contribution, and the amount of TKN that is warranted by the non-returned contribution.

A few scenarios:

Original     | ICO          | Final        | Returned |# of TKNs |
contribution | subscription | contribution | amount | |
amount | % | amount | | received |
10 | 100% or less | 10 | 0 | 10 |
10 | 200% | 5 | 5 | 5 |
10 | 1000% | 1 | 9 | 1 |

Extra ETH would be returned at the token distribution phase, together with the tokens.

This method seems fair, but it has a significant problem. A person with a large amount of funds could squeeze out everyone else, without any risk. Given the above scenario, one with 100,000 ETH could get 99.9999% of the TKNs, without paying any premium.

Big Fish — Small Fish

There is another way to remove the need for the rush, and at the same time make it more difficult for high rollers to squeeze out the smaller contributors. Below I will describe the idea. Please note that while the method is solid, the details will have to be refined. I am currently working on a simple reference implementation. I will share the git repo as soon as I am done.

The process goes like this:

  1. Write a script that will use a pseudo-random way to sort all the incoming transactions. This script is off chain.
  2. Once written, hash it and push that hash onto the blockchain. Make sure to do this before the start of the token sale.
  3. Start the sale. Transactions will start coming in. No time pressure, sending a transaction earlier will not grant it any special status. Leave the sale open for conveniently long, so anyone can participate. (2 weeks?)
  4. After closing the sale, reveal the script publicly and execute it.
  5. Take the first transaction from the list produced by the script in step 4, and process it. Keep processing the list until the goal of the token sale has been reached. Refund all other transactions.

6. Profit.

The above process removes the benefit of coming in early, thus eliminates the need for the rush. There is no guarantee that a particular contribution will receive any tokens, but it guarantees that every transaction will be considered equally.So yes, it is possible that you will not get any tokens. But you have equal chances.

Yes, it is possible that a whale will take all the tokens with a single transaction. But that transaction has the same chance than any other transaction.

The method can be gamed by creating large amount of small transactions. But that can be easily countered by limiting the size of the minimum transaction to 1 ETH, and mandating that 0.05 ETH from every transaction will be donated to

Interestingly, how the script in step 4 works does not really matter, as long as it is kept secret until the end of the sale. One of the several strategies is to hash all the transactions one by one, and compare the resulting hash to a pre-determined value. The closer a hash to this value, the sooner it will get processed.

Another way is to simply generate a random list of numbers between 1 and 1000. Then all transactions of the sale will be processed in that order.

Embrace Your Whales

Source: wikimedia

It is important to highlight that it is not our goal to exclude whales. What we want to do is to describe a fair method of participating in an ICO, by removing the rush at the beginning of the project. That said, it is also desirable to provide a way for people with smaller budget to participate.

In order to achieve that, it might be desirable to do a pre-sale, where bigger players can satisfy their appetite without rush. It can be simply achieved by creating a pre-sale, where a certain percentage of the tokens can be offered with the same rules as above, but with a sufficiently high minimum amount. (For example 100ETH instead of 1 ETH). That would significantly increase the chance of participation of the larger players.

That’s it. Any commentary and critique is appreciated.

Show your support

Clapping shows how much you appreciated Andras Kristof’s story.