Bancor ICO, USD 150 million in 2.5 hours, canceling transactions

CodeTract
4 min readJun 14, 2017

--

Another day, another ICO on the Ethereum network. This time Bancor raised over 390,ooo ether or about USD 150 million in 2.5 hours. This ICO is significantly longer than the BAT ICO (24 seconds) that we covered previously and they have introduced some new mechanisms in an attempt to improve the sale process.

In the BAT ICO we have seen skyrocket gasPrice that benefit miners and hinder other non ICO transactions. This time Bancor had introduced a maximum gasPrice of 50 shannon.

uint256 public constant MAX_GAS_PRICE = 50000000000 wei;assert(tx.gasprice <= MAX_GAS_PRICE);

This would mean you could send a non ICO transaction with 50.0001 shannon and it should be confirmed before all the ICO transactions. However that did not stop users from sending high gasPrice transactions to the ICO that were destined to be rejected. The highest gasPrice sent was 200,000 shannon, paying 27.2 ether ($10,000) as transaction fees. Unfortunately for this user, the transaction was rejected due to the gasPrice cap and it was also sent late.

The y axis categorize the gasPrice and the x axis shows the blocks after the ICO per 25 blocks. Due to the maximum gasPrice cap of 50 shannon, high gasPrice transactions were all rejected. The bigger the circle, the more count of transactions in that gasPrice category and the darker the color the higher the value of the transactions. The network was congested with many 50 shannon gasPrice transactions but relatively low gasPrice transactions were still able to join.

In the BAT ICO there was a huge backlog of transactions that did not get in due to the funding cap meaning less funds were collected than demand. This time Bancor had set a very high cap of 1,000,000 ether for the first hour before the real cap is revealed later (turns out to be 250,000 ether). This in theory would allow everyone who wanted to join to be accepted. However during the ICO, they extended the first hour to three hours. When sending the transaction to end the ICO, they sent it at the 2.5 hours mark, mistakenly believing it would take about 30 minutes for it to be confirmed. The transaction was confirmed quickly as it had a gasPrice of 100 shannon, relatively high compared to other queued transactions thus missing out on 30 minutes of funding.

Ethereum transactions can be canceled

What?!
More accurately, transactions can be replaced by a new one before it is confirmed in a block. In our previous article, we have discussed the constituents of a transaction. The most relevant input here is

nonce the count of the number of outgoing transactions, starting with 0

Transactions are strictly ordered, so a transaction with nonce 1 cannot be confirmed before a transaction with nonce 0. But what happens if you send 2 different transactions with the same nonce? Most likely the transaction with a higher gasPrice will be confirmed and the other will be discarded although this is not enforced. Therefore if your ICO transaction is still not confirmed after the ICO ends, you can send another transaction with the same nonce but higher gasPrice to “cancel” your ICO transaction and save on transaction fees. This will also reduce the congestion on the network. However currently most clients do not offer an easy way to do this.

For this ICO, an accepted transaction use about 90,000 gas, however if it is rejected for any reason, it will consume all the supplied gas. In this case the average supplied gas is about 210,000. The simplest and cheapest transaction you can create to replace a destined to fail ICO transaction is a 0 ether transfer to the same sending address, it will use 21,000 gas. This means a 90% savings on transactions fee and significant reduction in network congestion.

Here we look at the gasPrice of all transactions that were mined on the network during this period and the % gas consumption used by this ICO.

As observed, during the ICO, most confirmed transactions had a gasPrice of 50 shannon. However even after the ICO ended, significant gas is still used for rejected transactions which could have been canceled to reduce network congestion.

One of our functions is building analytics on Ethereum,
Contact us at contact@codetract.io
Visit us at https://codetract.io
Follow us on Twitter and Medium for more updates!

--

--

CodeTract

https://codetract.io/ CodeTract is a startup focused on building smart contracts enforced by blockchains