We’ve been asked how it is that Exodus wallet shows balances received in mere seconds while some other wallets take several minutes (until the next block is found) to show receipt of funds.
Some wallets, including Exodus, look at the
mempool to see transactions eligible to be added to the next block.
A quick refresher:
When someone “sends” coin to someone else, what their wallet really does is:
- Create a “transfer” from coin you hold to the destination wallet address.
- Digitally “sign” this transfer using your private key to authenticate it to the world.
- Send this signed transaction to the network of miners.
What the miners do:
- Continuously share all incoming transactions with everyone else on the network in a memory pool (the
- Choose a set of transactions to go into the next block on the chain.
- Try, repeatedly, to successfully mine the next block.
- When the next block is found - by themselves, or by someone else - they remove all the confirmed transactions from the
mempoolwhich are now in that block, and start the process again.
If running a full node, it’s entirely possible to look at the
mempool and see what transactions are waiting to be put into the next block, but it’s important to remember that these transaction are not yet confirmed. That’s why Exodus calls them, “pending:”
Note that while Exodus will show you that a deposit is part of your balance while it’s Pending, it won’t allow you to spend the portion that is pending - because until it’s Confirmed in a block, it’s not really yours to spend.
It’s possible, though rare, that a transaction that is pending never gets confirmed. How?
- If the blockchain is very congested, it might not get into a block for a long time. (This is not true of BTG today, but is sometimes true of BTC.)
- If the transaction were invalid in the first place (say, it were sent with less than the minimum transfer fee), it may not get confirmed.
- If the sender were orchestrating a geographically distributed attempt at a double-spend attack, only one of the multiple transactions would get confirmed, and yours may not be among them.
Is this safe?
It all depends.
It’s perfectly safe to show a pending transaction, but whether it’s safe for you, or a merchant, to treat this a completed “payment” depends on the circumstances.
For example, if a friend is paying me for their share of dinner, I’m fine seeing a pending transaction and treating it as “paid,” even while it’s still pending. My friend is surely using wallet software that adds in the fee automatically, it’s a relatively small amount of funds, they are unlikely to be capable of orchestrating a double-spend attack, and honestly, I’m not a target for a complex scheme like that.
Besides, by the time we finish our food and drinks, the transaction will probably be confirmed. If something goes wrong, I see my friend all the time.
A merchant who takes a payment from me might be also willing to treat the sale as “complete,” if it’s for a modest amount of funds, and if the merchant watched me make the transaction from my phone’s wallet app.
On the other hand, if I were a cryptocurrency exchange, I could be receiving multiple payments of dramatically larger size from people who could be anywhere in the world that I’d never see again. As an exchange, I’d be a target for many sophisticated attacks. And if I accepted this deposit right away, the depositor might trade into a different coin and withdraw it before I find out if the deposit will ever be completed! In this scenario, not only would I not accept a “pending” transaction - I’d wait for several transaction confirmations before considering the deposit “complete.” (This is, of course, exactly what exchanges do.)