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:
- 100% SP vs 50:50 Which one is better? Does the haircut matter? by @blockchainstudio
- Why SBD print rate is still 1% despite the haircut? Bug report, explanation, and suggestions by @blockchainstudio
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!
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?
- STU before payout still shows the amount as if there is no penalty or beneficiary share.
- 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.
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
- 100% SP vs 50:50 Which one is better? Does the haircut matter? by @blockchainstudio
- Why SBD print rate is still 1% despite the haircut? Bug report, explanation, and suggestions by @blockchainstudio
- Steem Python library sbd_to_rshares bugfix by @blockchainstudio
- https://steemd.com (for rshares and so on for non-developer)