Effect of haircut, early voting, beneficiary on dust payout

in #utopian-io5 years ago (edited)

Repository

https://github.com/steemit/steem

Introduction

Effect of the haircut, early voting, beneficiary on dust payout

Still many people don't know that a pending payout less than $0.02 is not paid out, which is called dust payout. (Here $ is often called STU (Steem Token Unit), what we see on steemit/busy's voted value.)

Don't be fooled by the value that UIs (e.g., steemit, busy) show. Due to rounding, $0.02 can be $0.019 in the worst case. If it's actually $0.019 when it's about to be paid out, it's all gone!


Even if it showed $0.02 when pending, it can change to $0.00 after the payout.

That's why there is a service like @dustsweeper (I have no relation with them). I also made my own bot @gomdory for this purpose (it's free unlike @dustsweeper but currently it's only being served in kr community due to the limited resource. It also has some features to prevent abusing).

While less than $0.02 is unlikely for most main posts, it is quite likely for comments. You know what? As of now, $0.02 needs a full voting with full voting power of 809 SP. Considering some margin due to voting power and potential voting value decrease, about 1000 SP is needed these days.

One may wonder whether the recent haircut affects on dust payout. Due to the haircut, 1 SBD no longer guarantees 1 USD worth's STEEM. This created many confusions:



Do we need more than $0.02 to prevent dust payout due to the haircut discount?

No.

But the detail isn't that simple. The amount shown on steemit.com can even be $0.00 even though there is a payout! Interesting, right?

Scope

Whether the haircut also affects on dust payout or not? That is, do we need more than $0.02 due to the haircut discount? I show the haircut doesn't affect on the dust payout by data analysis and source code analysis. I also analyze the effect of early voting penalty and beneficiary shares on the dust payout threshold.

  • Data scope: 13-14 Dec 2018 (less than one day is enough to see all data points interested).

Results

As I pointed out in 100% SP vs 50:50 Which one is better? Does the haircut matter?, the haircut doesn't affect so-called STU (Steem Token Unit), which is the amount what we see on steemit.com/busy.org.

But, this doesn't necessarily means that the haircut doesn't affect the threshold of dust payout.

In fact, it's not so simple.

The amount shown on steemit.com actually changes after the payout, and that value can even be shown as $0.00 even though there is a payout! $0.00 can be derived from $0.02 by just rounding.

I'm not sure if there is an agreement on the terms, but in my opinion, STU should only refer to the amount before the payout due to this reason.

The reason why a post can show $0.00 after the payout (with actual payout) is due to beneficiary and early voting (i.e., voting before 15-min curation window).

I'll show the results by data and code analysis.

Data analysis

If you use steemsql/steemd/steem API, they show author reward and curator reward in SBD, which is the actual amount you'll receive but in the unit of SBD/STEEM/SP depending your option (100% or 50:50).


https://steemd.com/utopian-io/@blockchainstudio/why-sbd-print-rate-is-still-1-despite-the-haircut-bug-report-explanation-and-suggestions

Note that total_payout_value is actually author reward only. (curator_payout_value is curator reward fortunately). Let me call them sbd_author and sbd_curator, respectively.

Then it's tempting to believe that $0.02 dust payout threshold is the sum of author reward and curator reward in SBD. That is, whether sbd_author + sbd_curator is less than $0.02 or not.

But, this isn't true!

I analyzed raw blockchain data to find out some interesting data points for the date 13-14 Dec 2018. Less than 1 day was enough to extract them.

Interestingly there are many cases where sbd_author + sbd_curator is less than $0.02.

  • Ex1) sbd_author + sbd_curator= $0.017
Reveal spoiler


https://steemd.com/pie/@benedict08/benedict08-re-igorkk-pie-charlotte-20181206t094246831z

  • Ex2) sbd_author + sbd_curator= $0.00!
Reveal spoiler



https://steemd.com/cat/@steem-bounty/re-alexdory-heating-your-house-using-cats-real-science-inside-20181206t194515979z



The secret is,

if there are penalty due to early voting (before 15-min curation window) or shares for beneficiaries, then the amount shown on steemit.com after payout (which is exactly sbd_author + sbd_curator with rounding) can be lower than $0.02 and even $0.00! in some cases (when beneficiary takes most of it).

  • Ex1: early voting penalty
  • Ex2: beneficiary share.

You may be okay with beneficiary share since the sum may still be more than $0.02. But in the case of early voting penalty, the sum is clearly less than $0.02.

What's going on?

  1. STU before payout still shows the amount as if there is no penalty or beneficiary share.
  2. STU before payout is exactly the dust payout threshold.

How to verify this easily? (without calculating each early voting penalty and beneficiary share)

In fact, all the rewards are counted as rshares internally, as I explained in 100% SP vs 50:50 Which one is better? Does the haircut matter?, for instance.

Each voting (before payout) adds rshares to the post. This rshares is the same for the same voting value regardless of the early voting. That is,

$0.02 dust payout threshold is determined by its rshares equivalent.

While I was calculating this conversion, I found that the official Steemit Python library has a bug in its sbd_to_rshares(). So I reported it here: Steem Python library sbd_to_rshares bugfix and fixed it on my own. And @roadscape already merged my pull request. Yay!

Note that rshares for $0.02 is changing every moment depending on reward pool. As of now, $0.02 = 32864690315 rshares.

And you can easily verify that rshares equivalent is the actual dust payout threshold in the data (a few hour's data is usually already enough).

Source code analysis

Let me explain this with the source code.

is_comment_payout_dust() is the main function that checks dust payout. Note that in most codes, both main posts and replies are called comments.

https://github.com/steemit/steem/blob/181099297954c86608744a956715753c937356f9/libraries/chain/util/reward.cpp#L57

But current_steem_price is the value that the haircut is already reflected, as I explained in 100% SP vs 50:50 Which one is better? Does the haircut matter?.

More importantly, it is calculated as its rshares equivalent.

is_comment_payout_dust is defined in reward.hpp

STEEM_MIN_PAYOUT_SBD is defined in config.hpp

And every voting and beneficiary setting doesn't affect rshares of voting.

Conclusion

  • The haircut discount doesn't affect the dust payout threshold.
  • The actual payout (sum of author reward and curator reward) can be less than $0.02 due to early voting penalty or beneficiary shares. (Of course, beneficiary shares don't decrease "total payout" but what UIs show is the only sum of author and curator. Early voting penalty actually decreases total payout.)
  • The amount shown after payout can be even $0.00 even though there is a real payout.
  • $0.02 dust payout threshold is determined by its rshares equivalent.

Tools and Scripts

  • Steem Python library to get raw block information.
  • Getting raw blocks is so simple (library doc has an example), so I don't include the script (unless there's a request from utopian-io). I rather included steemd.com links of each post for easy verification.

Relevant Links and Resources

Sort:  

.

Hi @crokkon, thanks a lot for your comment. As I mentioned before, I don't have steemsql access yet. But I may have it soon. See my SBD balance :) Since I don't want to give too much stress on already struggling our blockchain :( I limited data analysis intentionally. Once I have steemsql, I'll try some time-series data analysis :)

Regarding 1-day data, I actually analyzed it, but the main purpose was only to double check whether my theoretical analysis is right or not. That's why I only included two examples which are already enough to show that. In that sense, they're really nice data :)

Actually I have one suggestion for analysis category. Of course, I know that the main fit for this analysis category is data analysis, but I think it'd be great if theoretical analysis like mine can be more appreciated. Exact facts are very important. All data analysis actually rely on them. I think you may still remember my post 100% SP vs 50:50 Which one is better? Does the haircut matter? you reviewed. One of main reasons why I wrote that was because even top3 witness misunderstood it. If people misunderstand basic theories, then only wrong analysis can follow. In that sense, theoretical analysis should also be much more valued than now. Also, it's quite a stressful job, since theory is either right or wrong. Please think about it, and please pass my suggestions to utopian team. I really love utopian, real gem on Steemit. Why not making it even better? Just in case, I'm not saying that your current evaluation is unfair under the current rule. I'm just saying let's include theoretical analysis in the analysis category too.

Regarding your last question, I think there are so many factors that decide how many SP we need for $0.02 But I agree with you in general. At least haircut is helping that required SP doesn't increase too much. Hope this helps.

Thank you so much again for your feedback.

.

Haha it was quite interesting to see that you actually wrote this: https://steemit.com/utopian-io/@crokkon/don-t-cast-worthless-votes-zero-value-votes-in-hf20-1540641228665 I didn't know the article. You know I started very recently and I really didn't expect that there is someone who's interested in dust :) So my main contribution was showing the increasing trend, which I personally think it's very important. I think this part is new, but let me know if you know other articles. Ironically, Steem is too small to get attacker's attention. That's why, for instance, dust votes may not be a real concern at this point.

I'll include yours in the references. If I knew this before, I could've saved time for introduction :( or maybe think twice to write my post. I was wondering between two topics and decided to start with this since it's easier. By the way, is there an easy way to search utopian posts? I have several ideas but now I'd like to search well before I start.

Many thanks and have a nice day!

.

Hi @crokkon, my "first" analysis has just been posted :) Hope you like it. https://steemit.com/utopian-io/@blockchainstudio/may-need-vote-dust-threshold-again Thanks!

Finally I gave up and subscribed steemsql :)

Way to go. Isn't it easier? ;)

Haha, thanks! Thank you for steemsql and other stats you provide. btw, I actually found that some data (steemsql) isn't clean, e.g., vote details after payout in Comments table. I found that some posts have pending payout information. I guess it's probably due to steem API's instability, so you may have given up updating exact data for all posts at some point. So I have some questions.

  1. Is there a way to check consistency of any data (when can I trust the data without double checking with blockchain?) For payout info, one way is check last_payout date, but not sure if that means now I can trust active_votes field for sure.

  2. Is there some script that can easily check the voting share of an individual for a post with SQL? I know how to do it with python, but I'm wondering if someone already wrote SQL script for that. Thank you.

Answering your questions will be easier off-chain.
Please contact me on steem.chat

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

Summary in Korean: 곰돌이(@gomdory)와도 연관된 문제인데 혹시 haircut 때문에 눈에 보이는 $0.02 보다 많이 찍어줘야 하는 것 아닌가란 문제에 대한 답입니다. 사실 이부분은 이전에 이미 소스코드를 봐서 haircut 상황 발생하자 마자 저도 확인을 해서 상관없다는 것을 알고 있긴 했는데 그래도 미심쩍어 당시에 데이터도 보니 곰돌이가 $0.023을 맞추는데 다 살리는거보니 보팅가치가 추가 감소하는 거 감안해도 haircut영향은 없고 기타 15분 이전 early voting penalty, beneficiary의 영향들을 분석한 글입니다.

몇몇분이 곰돌이 걱정해서 질문 주시기도 했고 그래서 언제 한번 이왕 쓰는거 유토피안 글로 써보자 했는데 왠걸 sbd를 rshares바꾸는게 안되어서 직접 고쳐서 github에 merge까지 완료된(정말 별거 아닌 버그 수정인데 그래도 첫 오픈소스 프로젝트 소스코드 기여라 뿌듯뿌듯) https://busy.org/@blockchainstudio/steem-python-library-sbdtorshares-bugfix 글을 먼저 쓰게 되었습니다. 이 글은 어제 올리려다 생각보다 캡춰라든가 시간이 걸리고 해서 결국 오늘 올렸네요. 아 정말 앞으로 이런 글을 올리기가 힘들듯. 이것도 제가 곰돌이랑 관련있는 부분이라 제가 관심있어서 찾아보고 그랬지. 글로 올리려면 이미 아는 내용 설명을 위해 그림도 캡춰해야하고 이런 부분에 참 은근 시간이 가고 지루하기도 하고ㅠㅠ 이왕 고생해서 적은거 내일 한글판도 올리겠습니다. 감사합니다!

저도 궁금했던 내용이었는데 자세하게 정리해서 올리셨네요.ㅎㅎ 감사합니다.

그리고 제가 스팀잇에서 아직도 정확하게 이해못하고 있는 부분이 있는데 early voting하면 보상풀로 환원되는 건가요?
글 작성하자 마자 보팅하면 모든 저자보상+큐레이션 보상이 100% 보상풀로 환원. 이런 경우가 발생하는 거죠? 15분 이후는 상관없는 건가요?

저자가 작성하자마자 셀봇하면 보상이 없다 정도만 알고 있어서..ㅎㅎ

이게 여전히 잘 못 알려져 있는 경우가 많더라고요. 한번 따로 글을 써드릴게요.

일단 답은 저자보상은 상관이 없고 큐레이션 보상만 전체 리워드 풀로 15분에 남은 시간 비례해서 환원된다입니다. 해당 포스팅의 큐레이션 리워드로 간다고 잘못아시는 분들도 꽤 되더라고요. 15분 이후는 상관없습니다.

즉 0분에 셀봇하면 저자보상은 그대로지만 본인이 본인글에 받아야할 큐레이션 보상은 전혀 못받습니다. 그게 전체리워드 풀로 가나 본인에게 미치는 영향은 미미하겠죠. 하지만 합치면 꽤 돼서 HF20이후로 큐레이션리워드가 저자보상대비 비율로 따졌을때 좀 높아지는데 기여를 했습니다.

답변 감사합니다. 어느정도 이해가 되었습니다.ㅎㅎ


@blockchainstudio님 곰돌이가 최대 두배로 보팅해드리고 가요~! 영차~

곰돌이가 짱짱맨보다 2초 늦게 왔네ㅎㅎ 곰같으니라구ㅎㅎ

역시 곰돌이다워요.

짱짱맨 호출에 응답하여 보팅하였습니다. 즐거운 주말 보내세요.

고생하셨습니다!!ㅎㅎ

Hi @blockchainstudio!

Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your UA account score is currently 4.226 which ranks you at #2801 across all Steem accounts.
Your rank has dropped 28 places in the last three days (old rank 2773).

In our last Algorithmic Curation Round, consisting of 211 contributions, your post is ranked at #99.

Evaluation of your UA score:
  • Some people are already following you, keep going!
  • The readers like your work!
  • Good user engagement!

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!