Instant undelegation - restoring continuity

in #utopian-io6 years ago (edited)

Repository

https://github.com/steemit/steem

Components

  • Steem Power undelegation (delegation return) period

Proposal Description

Summary
  • Current system
    • SP undelegation takes 5 days.
    • UX discontinuity: After 5 days, a sudden voting value jump occurs, which is prone to be wasted.
  • Proposal
    • SP undelegation is done instantly. (This isn't a joke. This can be easily implemented without double spending of voting power. To prevent abusing of too frequent un/delegation, RC requirement can be adjusted.)
    • UX continuity: Right after undelegation, voting value stays the same and keeps recovering continuously.
Technical and Historical Background: Why 5 days?

As you know, voting power (VP) full recovery (0%->100%) takes 5 days. Undelegation removes SP from a delegatee instantly, which should be that way (e.g., easy calculation of end of contract; prevention of delegatee's misuse). However, if undelegation also gives SP back to a delegator instantly, double spending of voting power is possible, i.e., use up all VP before returning and use it again.

This was true before HF20. Technically, VP was actually managed by the variable voting_power in the code. However, after HF20, voting power is actually managed by the variable voting_manabar.current_mana (denoted by voting mana hereafter), which is much more sophisticated one. Currently, VP is just a number for backward compatibility. It's directly derived from voting mana, as explained in my previous Utopian bug-hunting post: voting_power is set to zero for users who haven't voted more than 5 days.

In contrast, voting mana is a very big number proportional to the effective SP. Basically, full voting mana is effective mvests.

 'voting_manabar': {'current_mana': '948778993772',
                    'last_update_time': 1547970732},

My current (more precisely, last updated) voting mana

Implementation Details

Currently, voting mana is already added/subtracted depending on transactions. (e.g., hf20_vote_evaluator()) Thus, changing the voting mana calculation logic isn't difficult nor burden to the system.

Specifically, in the current system, the voting mana of undelegated SP is added in full after 5 days. Instead of doing this, if the undelegated amount is added as zero mana instantly after undelegation, then the mana recovery starts continuously without the chance of double spending of voting power. See the mockups for detailed examples.

Mockups / Examples

Here are mockups of steemd.com. Suppose a user has 10,000 SP but delegated 9,000 SP.

This is the current status before undelegation. Effective SP is 1,000 and will undelegate 9,000 SP.

Current system

Now if the user undelegates 9,000 SP, in the current system, nothing will change immediately. Actually, many newbies complain about this, since they can't even notice the difference at all before/after undelegation. (especially for the undelegation from a big account). Finally, after 5 days, sudden voting power and voting value jumps occur with undelegated SP.

Nothing changes until 5 days, and right after 5 days, sudden voting power and voting value jumps occur.

In particular, the voting power tends to be wasted, i.e., soon reached 100% unless the user set the timer exactly when the undelegation is finished.

Proposed system

Every change occurs immediately after undelegation. Despite the voting power drop, the actual voting value stays the same, i.e., 8% of 10K SP = 80% of 1K SP, and then increases continuously.

In the new system, every change occurs immediately after undelegation. As you can see, a sudden voting power drop may occur (depending on the existing/returning SP ratio), but voting value is actually the same and starts increasing together with voting power.

Most UIs which show voting power also shows voting value (e.g., busy, steempeak). Thus, users will not feel uncomfortable with dropped voting power, since they can easily see the voting value is the same and keep increasing thereafter. In fact, most users understand that voting power itself is meaningless: 100% voting of 1K SP is the same as 10% voting of 10K SP. Actually, this immediate change leads them to recognize that the undelegation is actually well initiated.

Benefits

  • Instant undelegation
    5 day return period is too long. After HF20, it is even unnecessary. The instant and continuous undelegation process can be implemented without difficulty and burden on the system. As shown in the mockup, users can see the change immediately after the undelegation, which itself is very helpful.
  • UX continuity
    If possible, discontinuity should be avoided, as in our previous experience: HF20 Update: Restoring Continuity. My proposal enables users to have continuous voting value after undelegation. Nobody wants to set an alarm 5 days in advance.
  • No voting power waste (advance plan)
    Many users complain that they tend to waste voting power after 5 days of undelegation process, as explained in the mockup. Thus, some experienced users use more voting power than usual before the actual return occurs, which is cumbersome and unnatural. But in the new system, voting power waste is almost unlikely, since they can well adjust for 5 days continuously.

Note: As in the introduction, "instant" is an example. While unnecessarily too frequent un/delegation can be prevented by RC, if you're still too much worried, 1 day (or anything much shorter than 5 days) return period can be implemented similarly.

GitHub Account

https://github.com/economicstudio

Sort:  

Hello, @blockchainstudio. Thanks for this piece of idea. The mockups were very helpful as they made me understand your second proposal about "continuity" even better.

Although, a similar idea was discussed here prior to Steem HF20. However, with the new variable "voting_manabar.current_mana," this should be easier to implement.

I appreciate your effort on sharing a helpful idea to improve the Steem blockchain but I would strongly suggest that you check for a similar issue before posting.

Your contribution has been evaluated according to Utopian policies and guidelines, as well as a predefined set of questions pertaining to the category.

To view those questions and the relevant answers related to your post, click here.


Need help? Chat with us on Discord.

[utopian-moderator]

Thank you for your review and reference. Wow, you're really knowledgeable on references! I actually searched utopian posts this time, but I didn't know there was a non-utopian post with similar idea. Yet as you pointed out, my post is mainly about its actual implementation after HF20. Since I'm also a dev, I'm alway looking for implementable ideas. Thanks again.

Actually, I also have a question. Is suggestion on Utopian itself also eligible for ideas category?

If you mean suggestions to Utopian project, then Yes. Utopian has different subproject on the project repository so it depends on which subproject your idea is to. The main repo with the new version of the project (Utopian V2) is still not released yet though.

Thanks for your answer and sorry that I forgot to reply. Your recent review reminded me of this.

Actually what I was thinking of is suggestions for the Utopian evaluation/review system. Is this also eligible?

Unfortunately, such suggestions will not be eligible because it will be considered as an organizational idea which has little to no impact on the project code.

As I expected :) that might be why I've never seen those posts before. Thanks for your answer.

Thank you for your review, @knowledges! Keep up the good work!

In Korean: 현재 임대회수가 5일이 걸리는데 이걸 파격적으로 0일로 만들고 연속적인 보팅가치 회복을 하자는 제안입니다. 현재는 5일뒤 갑자기 늘어나는 보팅파워때문에 이게 낭비가 되는 경우도 많이 생기고 임대회수를 해도 steemd에서 자세히 보지 않는이상 임대회수가 제대로 된것인지 확인조차 힘듭니다.

저의 제안에서는 (내부적으로 이미 쓰고 있는 voting mana를 이용하여, 참고로 %로 나타나는 voting power와는 다른개념입니다) 바로 SP는 반영을 하자는 것입니다. 단 보팅파워의 "이중지불"방지를 위해 해당 SP만큼의 마나는 0으로 해서 돌려주어 전체 voting power자체는 오히려 잠시 줄어든 것처럼 보이게 되지만 보팅가치는 동일하며(그림에 나온대로 천스파 80%랑 만스파 8%랑 사실은 같죠) 앞으로 쭉 연속적으로 회복해나가는 방식으로 하자는 것입니다. 이 경우 회수가 잘 되었다는 것을 쉽게 인지할수 있고 또한 보팅파워낭비가 일어날 가능성도 거의 없게 됩니다. 현재는 신경쓰지 않으면 다량의 스파가 돌아올때 거의 보팅파워낭비하게 됩니다. 이를 피하려면 알람을 맞추시든가ㅎㅎ 미리 좀 팍팍 써두시던가 해야합니다.

기술적으로도 전혀 구현이 어렵지도 시스템의 부하를 가져오지도 않습니다. 물론 즉각회수에 따라 어뷰징수준으로 쓸데없이 자주 임대/회수를 진행하는 경우가 생긴다면 RC요구량을 통해 막거나 일정시일(예를 들어 1일, 아무튼 현행보다는 훨씬 짧게)의 임대회수기간을 두는 방법을 생각해볼 수 있습니다.

짱짱맨 호출에 응답하여 보팅하였습니다. 즐거운 주말 보내시기를 바랍니다.

Congratulations! Your post has been selected as a daily Steemit truffle! It is listed on rank 7 of all contributions awarded today. You can find the TOP DAILY TRUFFLE PICKS HERE.

I upvoted your contribution because to my mind your post is at least 9 SBD worth and should receive 205 votes. It's now up to the lovely Steemit community to make this come true.

I am TrufflePig, an Artificial Intelligence Bot that helps minnows and content curators using Machine Learning. If you are curious how I select content, you can find an explanation here!

Have a nice day and sincerely yours,
trufflepig
TrufflePig

Congratulations @blockchainstudio! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You received more than 2000 as payout for your posts. Your next target is to reach a total payout of 3000

Click here to view your Board
If you no longer want to receive notifications, reply to this comment with the word STOP

Support SteemitBoard's project! Vote for its witness and get one more award!

Hi @blockchainstudio!

Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your post is eligible for our upvote, thanks to our collaboration with @utopian-io!
Feel free to join our @steem-ua Discord server

Hey, @blockchainstudio!

Thanks for contributing on Utopian.
We’re already looking forward to your next contribution!

Get higher incentives and support Utopian.io!
Simply set @utopian.pay as a 5% (or higher) payout beneficiary on your contribution post (via SteemPlus or Steeditor).

Want to chat? Join us on Discord https://discord.gg/h52nFrV.

Vote for Utopian Witness!

Coin Marketplace

STEEM 0.19
TRX 0.15
JST 0.029
BTC 63811.18
ETH 2610.29
USDT 1.00
SBD 2.83