Ethereum Speed Up Transactions: How They Work and What They Mean For Dapps

Blocknative

By Blocknative in blockchain, usability, UX Best Practices on October 4, 2019


Recently, we published a post covering Canceled Transactions and How They Break Dapp UX. Based on the positive feedback we received from the community, we are excited to dive into the world of Ethereum Speed Up Transactions β€” what they are, how they are different than Cancels, and the implications for your Dapp. [We recommend first reviewing our Cancel Post.]

What are Speed Up Transactions? 

Speed Up transactions are virtually identical to Cancel transactions – with one critical difference. Specifically: 

  • On Ethereum, a Speed Up transaction is an attempt to overwrite a currently pending transaction with a new transaction.
  • Just like Cancels, Speed Ups are a convention and not a standard.

The big difference?

Whereas a Cancel transaction is an attempt to overwrite a pending transaction with a zero value replacement, a Speed Up is an attempt to accelerate a pending transaction.

In other words, you still want the transaction to happen; you just want it to happen faster. Therefore, a typical Speed Up transaction will have: 

  1. An identical nonce,
  2. From the same Wallet address, 
  3. At least a 10% higher gas fee, and
  4. The identical value, plus
  5. Gets signed-and-successfully-submitted before the original transaction is confirmed.

You might notice that step 4 is the only difference between a Cancel and a Speed Up. They both work on the identical principle: since miners are incentivized to prioritize transactions with more gas, the identical nonce Speed Up transaction should be confirmed before the original transaction – even though it entered the mempool later. In other words, Speed Up transactions are kind of like probabilistic afterburners.

 
How are Speed Up Transactions Created? 

MetaMask is the best-known (only?) end-user wallet with an explicit UI to initiate a Speed Up. Other wallets, including MyCrypto and MyEtherWallet, offer knowledge-base articles that provide instructions for manually constructing and submitting both Speed Up and Cancel transactions. But these are not for faint of heart. 

To issue a Speed Up on MetaMask, click on a currently pending transaction shown in the Queue. This will reveal the transaction details and the Cancel button. Don't see the Speed Up button? Just wait. It usually shows up after a few seconds. See below for this behavior in action: 

Meta-Mask-Speed-Up

The Speed Up user experience in MetaMask 7.2.1.

As you can see, Speed Ups are an advanced capability and meant to be used by sophisticated users. You might expect them to be relatively uncommon.

However, we find that – during periods of network congestion – more than 10% of the entire mempool consists of Speed Ups and Cancels. 😲 

Where do they come from? 

 
Which User Segment(s) Generate All of These Speed Ups? 

We've learned from experienced builders (more precisely, our customers and partners) that frequent use of Speed Ups and Cancels is correlated with the transaction volume. In other words, whales and traders. As in, the most active – and presumably profitable – users in the ecosystem. 

This is not that much of a surprise. The more transactions someone is conducting, the more susceptible they are to changing gas prices. This is not just the Gas fees themselves, but also the losses that can accrue from delayed transaction confirmations. In fact, sophisticated traders have built custom bots to automatically manage gas in efforts to ensure that all of their trades are quickly executed. 

 
How are Speed Ups and Cancels Different? 

Speed Ups and Cancels are similar in that they originate from the wallet and use the same nonce as the transaction that was originally sent. Aside from that, they are 'normal' Ethereum transactions that have been crafted to achieve a specific outcome. Which is where things can start to get fun: 

  • Yes, you can Speed Up a Cancel.
  • Yes, you can Speed Up a Speed Up.
  • Yes, you can Cancel a Speed Up.
  • And yes, you can even Cancel a Cancel. πŸ€”

Go ahead. Try it. 

Just remember that Speed Ups and Cancels are purely probabilistic. They represent an attempt and not a guarantee. The original transaction can get confirmed despite your best efforts to replace it. However, the consequences of this are wildly different depending on the context: 

  • If your Speed Up fails to replace the original transaction, you save a little gas. And that's it. Because you wanted the original transaction to confirm quickly. Outcome: No problem!
  • However, if your Cancel fails to replace the original transaction... well, the original transaction is confirmed, and of course, all of the associated value moves with it. Which is precisely what you were trying to avoid by attempting to Cancel in the first place. Outcome: Ouch. 

So the next time your transaction is stuck, and you are not sure what to do, issue a Speed Up. Easy enough. For the User? Sure. For the Dapp? Not so much.

 
How do Speed Ups Impact Dapp UX?

Speed Ups and Cancels both originate at the wallet. They both reuse a nonce. But because they change constituent elements of the transaction – the gas fee specifically – these replacements transactions will have new transaction hashes.

Dapp Transaction Flow

How Dapps Get Confused by Speed Up and Cancel Transactions

Since Dapps are out-of-the-loop when a Speed Up or Cancel gets created, the Dapp has no way to connect-the-dots between the two transaction hashes. This tends to break the Dapp UX because the new transaction hash is not picked up by the UI. For the end-user, that usually means the Dapp will show their transaction as permanently. And the new transaction hash, once it is Confirmed, will not be displayed on the Dapp.

πŸ˜‘ 

As transactions on Ethereum increase, we can expect Speed Ups will become more common. So it is important for Dapps to build a robust front-end that can handle these situations cleanly. 

Blocknative can Help! 

Blocknative operates a robust Ethereum transaction monitoring platform that provides real-time notifications via our lightweight Notify API. Built for Dapp developers and wallet providers, Notify emits API events describing every state change for every relevant transaction, including: 

  • New pending transaction detected. 
  • Pending transaction confirmed. 
  • Pending transaction failed. 
  • Pending transaction Canceled.
  • Pending transaction Sped Up.
  • And much more. 

To accomplish this, we run a global node monitoring infrastructure that is high scale, high availability, and low latency.

We built Notify to help you connect the dots for your users. So you can focus on delivering a great experience and your users can transact with confidence.

Providing your users real-time updates on the full spectrum of blockchain transactions increases engagement, improves retention, and drives growth. 

To learn more, click below to schedule a live demo.

This post was co-authored by Matt Cutler, Sean O'Connor, and Chris Meisl. If you've encountered a Dapp that does a great job of handling Speed Up transactions, please let us know. 

Click Here to Book a Demo