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

H2
H3
H4
Upload from PC
Video gallery
3 columns
2 columns
1 column
22 Comments