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
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
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
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
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.