scrobble.life
#utopian-io

Effect of haircut, early voting, beneficiary on dust payout

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

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

  • Ex2) sbd_author + sbd_curator= $0.00!

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

Comments · 7

  • @utopian-io(72)· 2816d

    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!

  • @crokkon(69)· 2817d

    .

  • @steem-ua(64)· 2820d

    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

  • @jisoooh0202(58)· 2820d

    고생하셨습니다!!ㅎㅎ

  • @blockchainstudio(72)· 2820d

    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 글을 먼저 쓰게 되었습니다. 이 글은 어제 올리려다 생각보다 캡춰라든가 시간이 걸리고 해서 결국 오늘 올렸네요. 아 정말 앞으로 이런 글을 올리기가 힘들듯. 이것도 제가 곰돌이랑 관련있는 부분이라 제가 관심있어서 찾아보고 그랬지. 글로 올리려면 이미 아는 내용 설명을 위해 그림도 캡춰해야하고 이런 부분에 참 은근 시간이 가고 지루하기도 하고ㅠㅠ 이왕 고생해서 적은거 내일 한글판도 올리겠습니다. 감사합니다!

  • @gomdory(66)· 2820d

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

  • @bukio(62)· 2820d

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