MetaMask / metamask-extension

:globe_with_meridians: :electric_plug: The MetaMask browser extension enables browsing Ethereum blockchain enabled websites
https://metamask.io
Other
11.83k stars 4.83k forks source link

Feature request: undo send #1236

Closed rmerom closed 6 years ago

rmerom commented 7 years ago

Wallets in a way are much like an email client. It's a way for people to communicate, only with money instead of text.

People make mistakes. And these mistakes can be very costly. While an email gone wrong can have bad consequences, sending a huge amount of ETH because of a momentary distraction or a "fat finger" can have a devastating effect for an individual. Gmail has introduced undo send a few years ago. Would Metamask consider adding something similar?

2-am-zzz commented 7 years ago

The way Gmail introduced their undo send is by a inherent limitation of their system--it takes about 6 seconds for the email to actually be sent.

We do not have any sorts of limitations like that--the limiting factor is when a miner processes our transaction. If we wanted to do an undo, we can't just do a "takeback" after we submit our tx to the system.

This would require us to manually hold a transaction in memory with a delay and then submit for processing on the network once the delay ends. However, this would already add waiting time to an already delayed transaction.

This isn't really an attractive solution for us currently, but we're willing to entertain discussion.

rmerom commented 7 years ago

Thank you Zanibas. As a gmail users, I can say that I'm happy to opt-in to this feature even while knowing I'll wait the extra few seconds. I would not have been happy if this was forced upon me.

The context of my question is a crowdsale that my team is running and in which we had a few participants who emailed us with pretty emotional messages after they either accidentally sent us money, or they mistakenly entered another digit. Yes, we can say "it's their fault", but a good UX should help fallible homo sapiens to makes less costly mistakes.

A good balance that you might want to consider is letting users define a threshold of ETH above which the undo send feature will kick in. Say, if I'm going to send anything about 10ETH, by default it would wait X seconds before sending while prominently showing an "undo" button. I'll definitely turn on this feature as another benefit of it would be that there'll be a kind of UX "heads up" before I send what I consider a big transaction.

danfinlay commented 7 years ago

I think adding a delay & cancel option is nice, and I even like the idea of making it automatically scale the delay based on the transfer size.

This gets a little more complicated when people are transferring valuable tokens, we need to integrate a token registry with a token price oracle to identify the approximate value of a given tx, and warn users accordingly.

Would be nice to have a designer like @VladTod chime in on what a possible wait-to-send and cancel feature might look like.

danfinlay commented 6 years ago

Another strategy suggested by @MicahZoltu here is for the cancel button to suggest a transaction of zero value to the same account, but with higher gas price. This would allow someone to quickly send a transaction to race against and nullify another tx.

MicahZoltu commented 6 years ago

Note: The "send 0 to self" strategy is also what Parity uses for its "cancel" button.

danfinlay commented 6 years ago

Closing in favor of #2693