Joystream / atlas

Whitelabel consumer and publisher experience for Joystream
https://www.joystream.org
GNU General Public License v3.0
100 stars 44 forks source link

Introduce new switchable member dropdown #2556

Closed dmtrjsg closed 2 years ago

dmtrjsg commented 2 years ago

Scope


Context

Faucet gives spendable 10 tJoys while new membership gets 100 of locked funds (spending only on transaction fees allowed). Also channel balance is not visible to the viewer

Scope

┆Issue is synchronized with this Asana task by Unito

toiletgranny commented 2 years ago

Note: On a group call with Bedeho and @dmtrjsg, we decided not to take any action on this right now (on the Atlas side), and that we'll revisit this (together with all the other items, such as the comment input) once the transaction fees actually become a thing.

toiletgranny commented 2 years ago

@dmtrjsg @kdembler @bedeho Here's a 19 min (13 min at 1.5x speed) video update in which I talk about potential solutions for the scope outlined above, and also for #3093, as I believe these issues are actually connected (and I'm explaining why in the video). https://www.loom.com/share/aad0a94c289948248757af088c96c2de

Figma prototype can be found here — https://www.figma.com/proto/2Snx8rlijd8iD6btfbtY6j/Additional-messaging-to-new-accounts-creation-(faucet)?page-id=1134%3A10541&node-id=1138%3A11405&viewport=-40310%2C-124%2C1.9&scaling=min-zoom

kdembler commented 2 years ago

Ah, it's always a pleasure to review your work Adam!

So starting from the end, I think proposed changes to NFT and video workspaces work well.

Regarding funds, I'm not sure if I would put "seeing total balance of all my channels" as a con, I don't see it as a high value info. One thing to consider, is that showing total balance (member + channels) may be confusing - for example, your channel may have ongoing revenue split, that would mean that even though your channel has 1k JOY, only some part of that will go to your member account, so not all of this total balance is usable to you personally. Having this in mind, personally I would go for option 2, so combined member dropdown, but without total balance at the top.

Regarding priority of spending locked funds - I didn't get any confirmation of whether free funds are spent first, but that was just what I noticed during tests, so I'm fairly sure it is that way. My guess is that changing would not be trivial so most likely it will be like this forever. But @bedeho please chime in, you must have better info.

If the above is the case indeed, I think one thing we could consider is showing locked funds only if the user's free balance is below certain threshold. For example, let's say I just created a membership via faucet and got some locked funds. Then I would see those in my balance and see that indeed I can spend those on fees. However, if I buy some JOYs from another person and get hundreds of JOYs into my account, locked funds are not as important to me now, so we could just hide them. This could create some confusion as to why those funds disappeared but we probably could alleviate that somehow.

dmtrjsg commented 2 years ago

@toiletgranny nice work ⭐

1️⃣ Showing balances

Option 2 really works with me as well.

I think we need to only show total balance for user accounts, and add different lock icons next to the total amount. On Hover we can expose amounts locked and purposes for which these locked tokens can be used. Adding more numbers next to one another will confuse consumers imho.

Locked funds are not separate to transferable funds, moreover multiple locks can be added to single account. Locks sort of overlap and not stack up. So you can have 100 total joys, out of which 80 have lock 1 and 50 lock 2. There are more nuances about it, but for the purpose of this design I believe the best is to go with Total balance always, and show locked balance only on hover on lock.

When user tries to perform an action which requires transferable balance, we can explain teh concept of locks and possible use cases in the TX error/ validation error tooltip.

2️⃣ Informing about channel balance

Infobox could certainly work, but I'd

  1. move this to the confirmation page and still keep the short message visible "Proceeds go to your channel account",
  2. add a tooltip explaining that from your channel balance you can withdraw funds to your personal balance and where to find this feature.
  3. Change copy saying that you can only withdraw from channel balance to your personal balance (unless I'm mistaken)

3️⃣ I'd also include tooltip to TX fees, that these are paid from membership balance for all TX and not the channel balance. (unless im mistaken)

@kdembler prob remembers better on channel vs membership balance accounts use cases, but I'm 95% certain.

bedeho commented 2 years ago

Regarding priority of spending locked funds - I didn't get any confirmation of whether free funds are spent first, but that was just what I noticed during tests, so I'm fairly sure it is that way.

They are :)

kdembler commented 2 years ago

I'd also include tooltip to TX fees, that these are paid from membership balance for all TX and not the channel balance.

Good point!

toiletgranny commented 2 years ago

Thank you for taking the time to review it and come back with thorough feedback, guys! I really appreciate it. I had to jump back to Figma with it and iterate some more to come back with follow-up questions. And since @dmtrjsg's feedback is not in opposition to @kdembler's one (and is actually extending it) I'll be focusing only on the comment from Dima.

I think we need to only show total balance for user accounts,

I'm afraid I don't understand, could you please rephrase? Did you mean showing the total balance of all my connected memberships?

Locked funds are not separate to transferable funds, moreover multiple locks can be added to single account. Locks sort of overlap and not stack up. So you can have 100 total joys, out of which 80 have lock 1 and 50 lock 2. There are more nuances about it, but for the purpose of this design I believe the best is to go with Total balance always, and show locked balance only on hover on lock.

When user tries to perform an action which requires transferable balance, we can explain teh concept of locks and possible use cases in the TX error/ validation error tooltip.

Right, that's certainly one way to simplify this, which is very nice!

  1. My concern with this idea is that at first, we tell users that they have this much, but when they try to spend what they believe they have, only then do we come up with "well, actually, you don't really have it", which naturally bursts frustration. Aren't you guys afraid of this? If so, would it make sense to do the opposite? What I mean is: if we need to make sacrifices and display just one value at a time, let it be the spendable amount. And then, if you hover over it, or find yourself in some other potential future view in the app, which gives you a more detailed breakdown of your portfolio, only then do you learn that "hey, actually, I'm going to have more in the future."
  2. What locks do we talk about here anyway? Vesting locks from creator tokens? Or faucet tokens lock? Because, as far as I understand, the difference between the two is that tokens under a vesting schedule will eventually become spendable, whereas faucet tokens are spendable right away, but only for transaction fees — is this correct?

move this to the confirmation page and still keep the short message visible "Proceeds go to your channel account"

Any specific reasoning behind this? I thought that mentioning this information is more appropriate at the moment of you specifying how much you want to receive.

Change copy saying that you can only withdraw from channel balance to your personal balance (unless I'm mistaken)

Isn't it what it already says?

3️⃣ I'd also include tooltip to TX fees, that these are paid from membership balance for all TX and not the channel balance. (unless im mistaken)

Cool! Just to make sure, is this the tooltip you were thinking of?

image

dmtrjsg commented 2 years ago

@toiletgranny

Any specific reasoning behind this? I thought that mentioning this information is more appropriate at the moment of you specifying how much you want to receive.

Best to do on the confirmation screen, not to break the flow. This is the pattern for all disclaimers and info boxes, I think at this point attention is hightened. less cluttered forms are always beneficial :)

Change copy saying that you can only withdraw from channel balance to your personal balance (unless I'm mistaken) Isn't it what it already says?

just dorp "or transfer", only withdraw can be done from channel balance afaik

I'd also include tooltip to TX fees, that these are paid from membership balance for all TX and not the channel balance. (unless im mistaken) Cool! Just to make sure, is this the tooltip you were thinking of?

yes, correct

dmtrjsg commented 2 years ago

My concern with this idea is that at first, we tell users that they have this much, but when they try to spend what they believe they have, only then do we come up with "well, actually, you don't really have it", which naturally bursts frustration. Aren't you guys afraid of this? If so, would it make sense to do the opposite? What I mean is: if we need to make sacrifices and display just one value at a time, let it be the spendable amount. And then, if you hover over it, or find yourself in some other potential future view in the app, which gives you a more detailed breakdown of your portfolio, only then do you learn that "hey, actually, I'm going to have more in the future."

In most cases free funds will be majority, also locked tokens are spendable but for some scenarios only. So locks is a subset of totals.

What locks do we talk about here anyway? Vesting locks from creator tokens? Or faucet tokens lock? Because, as far as I understand, the difference between the two is that tokens under a vesting schedule will eventually become spendable, whereas faucet tokens are spendable right away, but only for transaction fees — is this correct?

yes correct, Invitation locks, CRT vesting locks for near future

but not ruling out other locks> member vesting locks, account bounding locks, gift locks, staking locks, voting locks. For the purpose of right now only invitation locks are concerned.

toiletgranny commented 2 years ago

@kdembler, @dmtrjsg Ok, guys, I hope this is what you had in mind: https://www.loom.com/share/37afe785a39f4f948898dbe21ecf44a2

dmtrjsg commented 2 years ago

Hey @toiletgranny , good stuff, almost there! Comments below

Copy

Would it not be better to include information about the destination account for royalties to the same info box as for NFTs (conf step)

Locked funds

I was thinking along the lines of showing a Lock icon 🔒 next to the balance and on hover/ tap display a tooltip showing smth like:

🔒 Invitation Lock: 300

✔️ Can be spent on transaction Fees 🚫 Cannot be transferred or withdrawn 🔑 Cannot be be unlocked

cc @kdembler

dmtrjsg commented 2 years ago

@toiletgranny also I believe the above approach is better to support this statement>

We can use the same mechanism that's currently used for transactions fees (because it's the default behavior). This means that if I have 5 JOY locked with invitation lock and I pay a transaction fee of 1 JOY, I'm left with 4 JOY free balance, but I still have a lock for 5 JOY. Now if someone transfers 2 JOY to me I'll only have 1 JOY of transferable balance.

toiletgranny commented 2 years ago

@dmtrjsg Right, I see, thanks for the additional info!

I admit that at first, it's a little confusing that what we call a free balance might as well be entirely locked. And I think it's safe to assume that a common mental model is to perceive "locked" as the opposite of "free". But as long as we don't intend to show it like that, I mean literally, anywhere in the Atlas app, I guess there isn't anything we should be concerned about right now.

But, just to ensure my understanding of the invitation lock is correct:

bedeho commented 2 years ago

My two cents: why can't Atlas just follow the same balance terminology as in Pioneer? as I say here https://github.com/Joystream/pioneer/issues/3501#issuecomment-1215776839

The concept of free balance as used by the blockchain is just bonkers, it should be nowhere near users :D

kdembler commented 2 years ago

We just had a discussion about this on a call, we will only show transferable balance (free - locked) by default and show locks only in a tooltip

bedeho commented 2 years ago

We just had a discussion about this on a call, we will only show transferable balance (free - locked) by default

So transferable is basically "what can I send NOW", as far as the user is concerned. I am not sure if free in your formula is the same as the free in the chain, if so, you should check whether it includes so called reserved funds as well, as distinct from locked funds. Also, remember that you probably want - max{all locks on account}, as there may be many of them, e.g. vesting, invitation, role staking, etc., and doing max gets you the net effect of all of them.

kdembler commented 2 years ago

That's useful, thanks. I will certainly come back to this while we do the implementation

toiletgranny commented 2 years ago

Alright, @kdembler, all changes are ready to be reviewed and implemented based on the designs, documentation, and changelog, which you can find here:

https://user-images.githubusercontent.com/35307309/185067660-885ef019-5d02-4a4d-8853-1dcb7353d8a7.mp4

  1. Member dropdown component,
  2. Action bar component,
  3. Dialog footer component,
  4. Video page.