Closed tschubotz closed 5 years ago
Will there be a set list of tokens that a user can choose from, or will we allow the use of any token? @tschubotz
Will there be a set list of tokens that a user can choose from, or will we allow the use of any token? We need to specifically whitelist tokens, i.e. there will be a list that our backend supports. ETH will always be whitelisted, OWL and DAI are logical first ones. Also perhaps WETH could be another one.
There is no need for a token search right now. It is fine to optimize for 3-5 available tokens right now. Realistically, there won't be a crazy number of tokens anytime soon. And even if so, we can add a search later.
At what point during creation, does the user need to decide for a token? Before we display the address to the user the first time.
What happens if they selected a token, but then deposited ETH? The Safe will not be created until they deposited the minimum token amount. The deposited ETH will be available in the Safe after creation though and can be withdrawn again.
Essentially the user needs to first select a token before we ask them to make a desposit. The selected token cannot be changed afterwards anymore, due to current technical reasons.
There are some edge cases / error scenarios to consider:
We also have to consider token payment for the "restore Safe" use case.
Hi @tschubotz, it would not be very difficult to provide an endpoint with the estimation of a safe creation (using ether or tokens, it would be the same)
As per Invision commments: https://projects.invisionapp.com/d/#/console/16397934/340046072/comments/109178966
As per @rmeissner request: https://projects.invisionapp.com/d/#/console/16397934/340046080/comments
As per @biocom suggestion on V1: (To move fee closer to address section). https://projects.invisionapp.com/d/#/console/16397934/340046081/comments/109189946
This is already implemented in this screen on V2: https://projects.invisionapp.com/d/#/console/16397934/340046078/preview
For reference, find the general Invision screen/prototypes here: https://invis.io/Z9PWAYC2JRC
Created V5 (V1 with token icons in drop-down menu): https://projects.invisionapp.com/d/#/console/16397934/340756481/preview
@posthnikova asked via slack. I'm putting the answers here for future reference:
1) Does selection apply only to Safe creation or to all future transactions? Is it possible to change the selected token later?
It is possible to change it later for future txs. Tech-wise, the user could use a different token for every tx they do. When the user selects RDN for Safe creation, I would pre-select RDN for future txs though.
2) What happens the user chooses one token and sends another? Is it possible to detect which token was sent, the amount and how much is remaining?
I'm not sure I get the question. You mean when the user chooses RDN for payment but send GNO? This should be possible, yes. (Same like using ETH for payment of a GNO transfer.
3) In case there are multiple Safes, does token selection apply to all or it’s possible to choose another token while creating additional Safes?
Tech-wise we could build it both ways. So it's more a UX/product decision what to do. I would actually prefer that we could choose/select different payment tokens per Safe tbh.
4) Do we plan to let users select token when recovering Safe? Sorry if it had been discussed before.
Yes :)
cc @rmeissner @biocom
- In case there are multiple Safes, does token selection apply to all or it’s possible to choose another token while creating additional Safes?
Richard mentioned to me, that 1 token for all Safes would be easier to implement. I wouldn't restrict ideas, yet, though, and rather explore the ideal case, UX wise. Afterwards, we can cut back on things. But that's something to keep in mind before we finalize the UI ✌️
Thank you for the answers @tschubotz
As for point 2:
- What happens the user chooses one token and sends another? Is it possible to detect which token was sent, the amount and how much is remaining?
I'm not sure I get the question. You mean when the user chooses RDN for payment but send GNO? This should be possible, yes. (Same like using ETH for payment of a GNO transfer.
That's what we mean. I think the UI challenge we try to solve is:
Would we change the selected token display on a screen like this https://invis.io/ARPG0XSTJMZ#/345235231_New_Safe_-_Deposit_-Not_Enough_Funds_Received- to GNO (given user sent GNO and not ETH) or just leave the selected token (ETH) but show the adjusted amount (remainder where GNO amount is subtracted).
I know that it's likely not going to be the most common use case, given we assume the user selects the token they intend to send.
If the creation was triggered with a specific token (or eth) it cannot be changed. So if the user sends a different token, it will be on the Safe but will not count towards the creation fee.
@rmeissner Oke got it. So selecting the right token is important. Couple of more questions:
When starting the creation the client sends the safe configuration (owners, threshold, which token for the creation fee) to the server and the server generates a creation transaction. That includes the configuration and how much will need to be paid in the specifies token. The address of the Safe depends on these parameters. So if one of it changes (e.g. the token for the fee) the address will change.
So keeping that in mind it is important to tell the user that he cannot change the token after the creation has been triggered.
So keeping that in mind it is important to tell the user that he cannot change the token after the creation has been triggered.
Does that mean that the user still can change the token, before having sent any funds? It's only after they sent a certain amount (if not all) of the selected token, that you cannot change it anymore?
Changing the token -> new safe address
If the user send any funds already, they will be lost. The funds will only be accessible AFTER the Safe has been deployed. If you change the token, technically we will need to retrigger the creation.
Triggering creation = sending the configuration to the server
If the user send any funds already, they will be lost. The funds will only be accessible AFTER the Safe has been deployed.
If the user sent (not enough) ETH funds to a new Safe, then switches the token and sends the full amount (say GNO) will the ETH be available in that new Safe? Because on one hand you mention it being lost but also being accessible AFTER deployment of the Safe. Not sure I missed something.
If the user sent (not enough) ETH funds to a new Safe
That means they selected ETH as payment, the app displayed addressA and the user send (not enough) ETH to addressA
then switches the token and sends the full amount (say GNO)
That means, a new addresss is calculated: addressB. The user sends (enough) GNO to this address, so the Safe is created at addressB
will the ETH be available in that new Safe?
Nope, since addressA != addressB, they won't be able to access the ETH.
Because on one hand you mention it being lost but also being accessible AFTER deployment of the Safe.
If the address wouldn't change, they would be accessble after, i.e. if they would send ETH to addressB before sending enough GNO, then the ETH would be accessible.
"Lost" means, if a new address is calculated, then the user won't be seeing the old one anymore.
The reason for all this is, that we use this "trustless deployment" process which ensures that we can only deploy the right code to the address and they can be sure that we only get payment up to a previously signed limit. So the payment token is part of that transaction, also (more importantly) how much they need to pay. For each token, the limit is different due to different exchange rates. Since the token is part of the transaction, a different transaction hash is created and ultimately the address of the future Safe contract will change.
Does this help clarifying this a bit @biocom? :)
Project is up for review here: https://invis.io/FXPSG91SV8B#/346046040_01_Select_Token_ (interactive)
I have two versions:
1) The one where we show the list of tokens and all fees upfront: https://invis.io/FXPSG91SV8B#/346046040_01_Select_Token_. This is optimal when the list is short.
2) For longer lists we could display all tokens on a separate screen: https://invis.io/FXPSG91SV8B#/346046079_05_Select_Token_
@posthnikova for the 2nd screen, I would show first 3 tokens to select and then additional row that would say "Show more tokens (53) >" that will go to the separate screen.
Alternatively, if the list is big, we cand display first 3 tokens, and then also display button "Show more" that will expand the list to the full screen width, and animate the "Use that token" button to the bottom of the screen. So that the list can be scrollable, and still the button is visible.
Thanks for creating these prototypes! 🙌 I commented on Invision 💬
I prefer version 2, because:
What do you think about this version 3? (Optimizing for the 90% use case that users will use ETH and hiding the token payment more)
for the 2nd screen, I would show first 3 tokens to select and then additional row that would say "Show more tokens (53) >" that will go to the separate screen.
Good idea, I used it: https://invis.io/FXPSG91SV8B#/346046079_05_Select_Token_ So we show 3 tokens upfront, everything else is hidden on another screen. When the user selects token from the long list it moves to the top of the list on the first screen. If token is selected on the first screen, it stays where it is.
What do you think about this version 3?
I like this version more because this way it's like an additional step for advanced users. So I made a prototype: https://invis.io/FXPSG91SV8B#/346119435_15_Make_First_Deposit_Link_ (interactive)
Wording and some other things are corrected after comments on Invision
it's like an additional step for advanced users.
Agree, that's what I thought, too. I commented on Invision that I think we should emphasize the fact, that changing the token would render the previous address useless. And the user should know what they are doing. What's your opinion on the 3 versions @fmrsabino @rmeissner @lukasschor @biocom ?
In my opinion it should not be possible to change the tokens once the address has been displayed.
@tschubotz I replied on inVision.
In general I think allowing to change the token could be helpful for experienced users, given we don't dead-wall them in case they chose the wrong token initially.
On the other hand, inexperienced/non-aware users might make the mistake of depositing funds in the wrong Safe address. I think we can mitigate this risk by 'burying' the feature as an advanced step and providing an initial text warning + extra consent in a dialog/popup (see my inVision comments).
What are inexperienced users for us? And for whom is this feature?
In my opinion we should not think about experienced/ in-experienced users. For me this is a feature that everybody should use. If we want to hide it, then we don't need to adjust the UX and just keep the current version. I don't think a simple additional step will be a problem in this flow. The user already noted down their recovery phrase so 1 additional button click should not matter. We could also think of other ways to display the estimate to the user ... e.g. we could have a screen that looks the same as the funding screen, but without an address. And the user would need to "reveal" the address to finalise the setup.
@rmeissner I think my definition of inexperienced/unaware is basically anyone not aware of what implications, changing the payment token, will have to the Safe address.
In that light, I agree that given it's a feature we shouldn't necessarily hide it. I'm for having the choice to chance the token, assuming we have a double consent for doing so.
New changes are here: https://invis.io/FXPSG91SV8B#/346119435_15_Make_First_Deposit_Link_
What's been done:
removed "Share your address" text and Safe logo from address card
two additional confirmations: after tapping "Choose token" and after tapping "Use OWL"
https://invis.io/FXPSG91SV8B#/346334625_18_Make_First_Deposit_Change_Alert_
https://invis.io/FXPSG91SV8B#/346335182_20_OWL_Selected_Alert_
changed address after selecting token
a version with all tokens with a button fixed at the bottom: https://invis.io/FXPSG91SV8B#/346334720_19_Select_Token_Long_List_
New version is up for review: https://invis.io/FXPSG91SV8B#/347431584_01_Safe_Creation_ETH_ (interactive)
What's been done after user tests and Stefan's feedback:
1) Choosing token is the first step now with an opportunity to skip
2) Renamed "Retry" to "Refresh"
3) Renamed deposit to "Pay the Safe creation fee"
4) Fee is called "Safe creation fee" consistently
5) Removed text in parenthesis
6) Amounts moved to card
7) "Only send ETH" warnings added
8) Amount to send is now more prominent now
Commented on Invision :)
Also commented on inVision, but will also post here, given we've got quite some comments in there:
In my opinion we should keep the 'Safe creation fee' screen as simple as possible. Right now it feels like an overload of options:
I think the screen lacks a clear main action. E.g. the blue main action button should convey in itself, what the main objective will be of this and the upcoming screen.
My proposition would be to:
I think using the label 'Pay with ETH' makes things clear for two reasons: 1 - It implies that the next step will be a 'payment' step (in fact depositing funds..) 2 - You will be using ETH to pay for this
Let me know your thoughts.
@tschubotz If a user pays with some token, should this token be displayed by default on the main screen?
I like @biocom proposal.
@sche I would say so, but that is probably more important for the spec than for this issue
Ux weekly:
New version is up for review: https://invis.io/FXPSG91SV8B#/347431584_01_Safe_Creation_ETH_
What's been done:
1) ETH is the default option, all other methods are on the separate screen
2) Changed visualisation so amounts are not like balances
3) Corrected texts
4) Changed text on address screen: "You'll be able to use this address after you create Safe"
Thank you @posthnikova Overall definitely an improvement.
Left some comments on inVision.
New version is up for review: https://invis.io/FXPSG91SV8B#/347431584_01_Safe_Creation_ETH_
What's been done: mainly wording changes. I replied to everyone on Invision
hey everyone, anything I can help with here or on a separate flow? I'm a UX designer
Some wording changes: https://invis.io/FXPSG91SV8B#/347431584_01_Safe_Creation_ETH_
👍 looks good. Did you have time to work on the other flows already?
I have a proposal for changing it from the menu and during sending (change ETH to OWL while sending ETH and change ETH to GNO while sending GNO):
Other flows will be later
New version of Menu and sending is up for review (change ETH to OWL while sending ETH and change ETH to GNO while sending GNO):
What's been done:
UX sync:
@tschubotz If payment methods are safe specific, then following the same logic "Mange tokens" should be safe specific as well.
@sche I understand your point. But here are some points for perspective:
In terms of simplicity, together with the assumption a lot of users will have a single Safe, having a general high level 'manage tokens' might be the most efficient approach.
The argument being that for selecting a payment method you only make 1 choice (the token you want to pay fees with).
For manage tokens you have an equal amount of choices (enable/disable token) as there are tokens available. Multiply that by the amount of Safes and suddenly the burden is on the user to manage all the available tokens on each individual Safe.
Last point is that as for the payment method (token) the user is able to change this on the 'SEND TOKEN' screen, by selecting the current used payment method (token). Thus allowing for flexibility in the user flows.
Changes after UX sync: removed "default"
Create Safe: https://invis.io/FXPSG91SV8B#/347431584_01_Safe_Creation_ETH_ https://invis.io/FXPSG91SV8B#/347431644_04_Show_More_Tokens
From the Menu: https://invis.io/3XQVZ474E9U#/350900042_02_Change_Payment_Method https://invis.io/3XQVZ474E9U#/350900043_03_OWL_Selected
Send ETH: https://invis.io/3XQVZ474E9U#/350900050_09_Change_Payment_Method https://invis.io/3XQVZ474E9U#/350900051_10_OWL_Selected
Send token: https://invis.io/3XQVZ474E9U#/350900058_18_Change_Payment_Method https://invis.io/3XQVZ474E9U#/350900059_19_GNO_Selected
We also need token payment screens for:
Story
As a user I am able to use tokens for Safe creation as well as Safe transactions in order to not need ETH for everything.
Background
Acceptance criteria
(Just the most important ones, has to be refined during UX research phase.)
Open questions