Skip to main content

Transaction Flow

GasHawk will handle your transactions just as your default RPC would, with a few differences:

🔑 Sign-in required

We currently require that each wallet that interacts with GasHawk needs to sign in. Please follow the instructions.

If GasHawk did not accept your transaction, this might have to do with the account in use not being set up yet. In this case, you will see the following message.

Failed transaction Transaction 0 failed! [ethhs-query] while formatting outputs from RPC '{"value":{"code":-32603,"data":{"code:-32004,"message":"Unauthorized"}}}'

⏱️ Transactions will stay in "Pending" for longer time

When you use GasHawk, the transactions can take a bit longer to go through: This is because GasHawk will look out for the cheapest time to submit it (up to the deadline that was set in your settings)

🎛️ Cancel transactions will take a while

In order to cancel a transaction that is already in your GasHawk queue, you can either cancel it through your TX Dashboard or using a Cancel transaction. A Cancel TX is characterized by sending 0 ETH to yourself. However: MetaMask (and any other wallet) has an internal state for their pending transactions. Our only way to keep MetaMask from re-submitting the "pending" transactions is to fake the transaction count for a while (background). This can take up to 5 minutes - so please be patient.

If you think that something is off, you can reset the nonce-tweak manually.

🧟 Troubleshooting

Manually reset pending TX in MetaMask

Please double-check on your TX Dashboard that the transaction is also dismissed there - otherwise GasHawk could still submit it.

In case that you want to stop MetaMask from trying to re-submit any transactions, you can dismiss all pending transactions from the list shown in MetaMask:

  1. Open MetaMask
  2. Click the Icon in the top right
  3. Select Settings -> Advanced
  4. Click on Clear activity tab data
  5. Visit your TX Dashboard and see whether there are pending transactions that are not shown by MetaMask anymore.
Check your TX Dashboard

Any transaction sent to GasHawk will stay in the queue until it is either submitted or deleted by you. Sometimes it can happen that the wallet and your TX Dashboard are out of sync. We recommend to regularly visit the Dashboard in order to review the status of your transactions, adjust your default settings and stay informed about new features of GasHawk.


The following paragraph describes how GasHawk handled the TX before. This documentation will be removed soon.

Old Transaction Flow

Immediately after sending a transaction, Metamask will tell you that it failed. Most likely it didn't.

When using GasHawk, Metamask is connected to the GasHawk RPC. When sending transactions, Metamask sends them to the RPC node again and again until the response is "success" or "failed". Because GasHawk does not immediately put the transaction in the ethereum mempool, it would be wrong to reply with a "success" status. Therefore the only way to stop Metamask from sending the transaction repeatedly is answering with "failed".

In order to check on the real status of the transaction, please go to the GasHawk dashboard. You will find it there, along with several options on what to do.

Sadly, this issue messes up the "Activity"-section in Metamask:

Hovering over the "Failed" status will show you the message from GasHawk, see below.

Check out Transaction history for the recommendation to take a look at etherscan.

Status messages

Once you send the transaction with Metamask, a message will pop up on your screen and tell you that the transaction failed. By hovering over the message with your mouse pointer, you can access additional information.

GasHawk now handles this transaction

If the transaction failed successfully, meaning it is now handled by GasHawk as expected, you will see this message.

Failed transaction Transaction 0 failed! [ethhs-query] while formatting outputs from RPC '{"value":{"code":-32603,"data":{"code:-32004,"message":"GasHawk now handles this transaction. Metamask will display it as failed, but that's wrong."}}}'