🔧 Technical question to Steemchiller & the Steem dev community: vote valuation – rshares → USD
Hello world 👋,
I’m working on a precise USD valuation of Steem votes. The goal is a dynamic estimate based on
Voting Power, vote weight, the reward fund and rshares.
From what I’ve seen, the calculation in SteemWorld by @steemchiller is by far the most reliable and accurate — many thanks for that! 🙏
Questions
- Is the conversion formula rshares → USD publicly documented?
Is there any public schema to trace the logic of the vote value, or is it intentionally only implemented inside SteemWorld? - Is there an API (public or on request) that returns an account’s estimated vote value?
Example: given account name, Voting Power and vote weight, return the expected USD amount. - If no open API exists — would a licensed/attributed use be possible?
I’d like to integrate the rshares-based calculation into a private tool for a small, closed test group (no commercial redistribution, no public interface). - Pointers welcome: tools, libraries or repos that already reproduce this calculation (Python, JS or other).
My current estimation model (prototype)
Target: practical ±5% accuracy using on-chain data; transparent, reproducible and suitable for live use, refined by a small historical fit.
1) On-chain data
- Reward fund:
reward_balance,recent_claims(get_reward_fund/get_dynamic_global_properties) - Price feed:
get_current_median_history_price(STEEM ⇄ USD) - Account factors: SP, Voting Power (VP), vote weight (w)
- Pool factor:
pool = reward_balance / recent_claims
USD value of a STEEM amount: usd = steem_amount * price_feed_usd
2) Effective rshares of a vote (simplified)
// constants/scale are derived from DGP in production
rshares_vote ≈ f(SP) * (VP/10000) * (w/10000)
// f(SP) ≈ vesting_shares_to_rshares(SP) — proportional to vested SP
Note: exact rshares depend on current vesting_shares, reserve/precision values and Steem’s internal scaling.
3) From rshares to STEEM and USD
// share of reward pool in STEEM
steem_est = rshares_vote * (reward_balance / recent_claims)
// convert to USD using the median price feed
usd_est = steem_est * price_feed_usd
Non-linearity & smoothing (curation, rounding, pool drift)
- Collect historical pairs
(rshares, USD_real)from explorers. - Fit a simple regression or LOWESS on
usd_est. - Store a correction factor
k(rshares).
// final smoothed estimate
usd_final ≈ usd_est * k(rshares_vote)
// goal: |usd_final − usd_real| ≤ 5%
4) Steps (compact)
- Pool:
pool = reward_balance / recent_claims - Vote rshares: derive from SP, VP, weight
- STEEM:
steem_est = rshares_vote * pool - USD:
usd_est = steem_est * price_feed_usd - Smoothing:
usd_final = usd_est * k(·)(learned from history)
5) Pseudocode (end-to-end)
inputs:
SP, VP (0..10000), weight (0..10000)
reward_balance, recent_claims, price_feed_usd
k(·) // optional correction from history
// 1) pool
pool = reward_balance / recent_claims
// 2) rshares (simplified)
rshares = vesting_to_rshares(SP) * (VP/10000.0) * (weight/10000.0)
// 3) STEEM / USD
steem_est = rshares * pool
usd_est = steem_est * price_feed_usd
// 4) smoothing
usd_final = usd_est * k(rshares) // typically close to 1.00
return usd_final
Note: For exact replication consider Steem internals (rshares scaling, vesting precision, curation rules and rounding). The aim here is a practical live approximation.
Many thanks in advance — and also for the years of work @steemchiller has contributed to the community. Without SteemWorld, a lot on Steem would be much harder to understand. 👏
Best regards,
Jan-Philipp Vieth
💬 Feel free to comment here or email me at jan-philipp.vieth@gmx.de — I appreciate any constructive hints.