🔧 Technical question to Steemchiller & the Steem dev community: vote valuation – rshares → USDsteemCreated with Sketch.

in Steem Dev2 months ago

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

  1. 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?
  2. 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.
  3. 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).
  4. 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)

  1. Pool: pool = reward_balance / recent_claims
  2. Vote rshares: derive from SP, VP, weight
  3. STEEM: steem_est = rshares_vote * pool
  4. USD: usd_est = steem_est * price_feed_usd
  5. 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.