-
Notifications
You must be signed in to change notification settings - Fork 29
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Manual confirmation of an incoming transaction #84
base: master
Are you sure you want to change the base?
Manual confirmation of an incoming transaction #84
Conversation
This takes Grin in a direction most of us have been vocal against. Concept NACK. |
While I get the motivation, and agree an option to enable this might be useful for some people, those people could also just turn off synchronous transactions (essentially what this RFC does anyway). I agree with @DavidBurkett, concept NACK The added comlpexity doesn't seem worth the payoff. |
I wouldn't say "most" were against. There were definitely less people for this a year ago when I first suggested this, but we've learned more about the tradeoffs it brings since then. This thread shows mostly positive feedback which is the latest discussion around this feature https://forum.grin.mw/t/lets-create-the-ultimate-grin-wallet-experience-grin-ux-ui/9092/
I see this concept as simplifying the current state rather than making it more complex. At the moment, we are mixing transaction logic with transport by doing I'd also argue that the current flow is "inbetween" of noninteractive and interactive, and it takes advantage of neither of the two. It's not noninteractive because that seems impossible to do so you don't really get the main benefits noninteractivity would bring. At the same time, it tries to inhibit interactivity by forcing it to look like noninteractive transactions which also takes away the advantages interactivity could bring, specifically:
It's true that people could just use the non-Tor flow, but why not make this plain slatepack exchange use Tor as well? Tor is about transporting data from A to B which in our cases are Slatepacks. IMO, it would be nicer if we didn't assume transaction building logic based on the transport protocol. I'll be brutally honest now. What bothers me most is that we don't use advantages of either noninteractivity or interactivity. On top of that, the current flow comes as very damaging to understanding safe-cancel of a transaction (it's fair to mention that this was impossible to know when it was implemented because Play attacks were not known back then). It sometimes feels that we're trying to be too much "just like Bitcoin". Grin has a completely different transacting model than Bitcoin, so trying to make it be like Bitcoin (which is what the current auto-sign tries to do) is going against the very interactive nature of Grin transactions which are a big part of what Grin is. |
I believe I'm proposing the simplest and cleaner way to achieve
I agree with that, matter in fact, assuming the transaction building logic and the transport protocol as an indivisible thing confuses the users more. Benefits are clear. I the short term, we gain more control over our wallets, in the long term, we unleash very interesting possibilities that worth trying. I don't understand why we are not taking advantage of this.
I fully support all efforts to make Grin easy to use, and at the same time I'm against of trying to fit Grin into the Bitcoin box. In my honest opinion, by shaping Grin to look and feel, and to mimic Bitcoin, we are undermining Grin's development, and I don't think we want to do that. |
While it's true that you can manually accept/reject transactions this way, it's imo a very bad UX and it disincentivizes its usage
RFC's suggestions can be split in 2 parts:
Only the first part is needed to support manual confirmations and my guess is that the required changes can reuse the existing parts so they probably shouldn't be that complex. The second part is just to make it more intuitive for new users - I believe it's confusing to users what
An improvement would imo be:
To me the latter variant seems way easier to understand for new users and at the same time it teaches them when the signings occur. Although RSR is not globally accepted transaction flow it makes sense to note that the command flow is symmetrical, just different order of who runs which.
I agree with @phyro that users will not understand safe cancel unless they understand when the signing happens. I also believe commitment to transaction contract can be very important - committing to a memo is one example, but users could also just write the content there if it's small. |
If manual confirmation is an opt-in, I am fully in favour of it.
• Regarding Safe cancel, I think there is a very pragmatic solution. Safe cancel should be default so a user does not even need to worry or understand why unless they want to.
It is important to change step 3 into sign-broadcast since this makes it clear when transaction is finished. This flow also works with Multisig much better since the user will automatically be shown 'sign-broadcast' if he is the last needed signature. I also really look forward to the memo function, I think it can be used in many ways that we cannot fully predict yet, but it opens up a lot of use-cases. |
If manual confirmation is an opt-in the average user will understand the signing exactly the same as he does now - he doesn't :)
I expect utxo blacklist to be a thing sooner or later and auto-receive would mean that the owner of a blacklisted utxo can screw up anyone he wants as long as he has his tor address (or knows victim's evil "friend" to share a slatepack with an unexpected content). Not having to manually confirm every transaction you get in such a system seems wrong to me if the system supports it easily and especially if the system supports invoices - so that the service provider (or seller) doesn't need to do anything manually. The only exception i see are donations since there can be many transactions in a short amount of time
The problem is that the user needs to know when to click
Banks can revert some transactions or cover some losses, grin can't do that, so the users need to know how to safely use grin. I think the only thing the user must know is when he signed the transaction and what that means (he can still cancel it if he cancels it in time). That's basically the same as the contracts work in real world, so it should not be hard to teach them that
I would not create a separate command or button for the last signature but rather notify the user what happened through the output. If the signature is the last one you get information that the transaction has been broadcasted, otherwise you get some other information |
Yes, and I think that is fine. we just have to make all default behavior and settings safe
I agree with the problem, but not with the solution. The way I see it, all these things can be handled by the wallet itself. /Smart default behavior can protect a user from having to understanding anything. E.g. the wallet could show a popup to a user for all transactions that are pending and older than 1 month, warning the user that leaving them halve signed allows the receiver to still claim the coins (again thinking from a GUI wallet perspective). If you use the command line wallet I think the chance of a user being aware of the inner workings of Grin is much higher, but again I am in favor of not demanding technical knowledge or understanding at all from users. We can invite them to understand, and make it easy to find information, e.g. using information buttons near all settings, but it should also 'just work' like other coins, otherwise new-users will have little reason to adopt using grin.
I am thinking from a GUI wallet perspective, in which case it would be best to automatically modify the wallet to show 'sign-broadcast' if it is the last signature. For grin-wallet I can imagine that using 'sign' for both steps might be better/simpler combined with maybe the wallet asking for verification the user wants to broadcast (Y/n). |
You can attack a person in 5 minutes, so you can't automatically prevent it. While it's true that for SRS the wallet could detect it (receiver's output is duplicated in another tx so it's blocking this one), you can't do that for RSR (the best you can do is explain that invoices can't fail if the receiver is not a bad actor)
Manual confirmation must be required when you commit to a memo because otherwise if i know that you autoreceive transactions then i can create a memo where it says that I'm buying your house for 1 grin
I think it's receiver's own choice whether he wants to manually confirm or not and the sender should have no say in it. If the sender creates a memo and receiver's wallet (or maybe even better an address) is set to autoreceive then it should reject it somehow. RSR must have manual confirmation otherwise the receiver could steal all of the sender's money |
I like the idea of not accepting transactions by default. This feature protects the receiver from potential trouble. Consider the following:
Another thing is, this is not possible with chains that have non-interactive transaction. It would be a thing other coins cannot do. Point for ツ! |
In my opinion it is better to present a transaction to a user when it requires manual confirmation than letting a transaction fail or be rejected. |
425b9a3
to
c6829a4
Compare
I support this option, allowing the user to embrace the interactivity inherent in MW. They can already do this by disallowing synchronous communication, but combining it with synchronous communication can make it nicer by removing the need to copy and paste slatepacks. Please add a link the the payment proof RFC at the bottom. |
Rendered text.
This is a proposal to add a new feature to give users the ability to decline an incoming transaction.
Unresolved questions
manual_confirmation
configuration property?finalize
command by thesign
command?