Hive Developer logo

Hive Docs

Estimate the value of an upvote

Calculate the approximate value of an upvote on Steem

By the end of this recipe you should know how to estimate value of each vote on Steem.

This recipe will take you through the process of fetching necessary data and formulating estimation.

Intro

Calculating value of each vote depends on multiple factors. Reward fund, recent claims, account’s total vests, rate of the sbd, voting power and weight of the vote. It is quite useful information for users to see and estimate. All of the data is possible to get via available APIs.

Steps

  1. Get Reward Fund Current reward fund information is crucial part of estimation
  2. Get Account Steem power and voting power is another important info
  3. Feed history To get price rate reported by witnesses
  4. Final calculation Formulate all information we have

1. Get Reward Fund

Getting Reward Fund information is simply calling get_reward_fund('post') api call, it will give us reward_balance and recent_claims.

The response we’re working with will look like:

{
	"id":0,
	"name":"post",
	"reward_balance":"741222.051 STEEM",
	"recent_claims":"457419472820935017",
	"last_update":"2018-05-23T12:08:36",
	"content_constant":"2000000000000",
	"percent_curation_rewards":2500,
	"percent_content_rewards":10000,
	"author_reward_curve":"linear",
	"curation_reward_curve":"square_root"
}

2. Get Account

Next we will need total vests held by account, get_accounts api call returns account data, which will hold vesting_shares, received_vesting_shares, delegated_vesting_shares. It also returns current voting_power information.

The response example will look like:

[
  {
    "id": 9660,
    "name": "steemitblog",
    "owner": {
      "weight_threshold": 1,
      "account_auths": [
        [
          "ned",
          1
        ]
      ],
      "key_auths": [
        [
          "STM65wH1LZ7BfSHcK69SShnqCAH5xdoSZpGkUjmzHJ5GCuxEK9V5G",
          1
        ]
      ]
    },
    "active": {
      "weight_threshold": 1,
      "account_auths": [],
      "key_auths": [
        [
          "STM65wH1LZ7BfSHcK69SShnqCAH5xdoSZpGkUjmzHJ5GCuxEK9V5G",
          1
        ]
      ]
    },
    "posting": {
      "weight_threshold": 1,
      "account_auths": [
        [
          "ned",
          1
        ]
      ],
      "key_auths": [
        [
          "STM4yfYEjUoey4PLrKhnKFo1XKQZtZ77fWLnbGTr2mAUaSt2Sx9W4",
          1
        ],
        [
          "STM5FeHFtL8J453DUi98LKwkqXBH5iwxf9xCqYs6QwPibPru3RNq3",
          1
        ],
        [
          "STM5VwLXkNQf17sQ2XuxScdxruwBy1jak2mDxCjmyfYMNhm1WzPzN",
          1
        ],
        [
          "STM5ke2kzgwBmysSqCNM6zRABi8SNpaJEtnFXuTtRcU3Uvf47481z",
          1
        ]
      ]
    },
    "memo_key": "STM5FeHFtL8J453DUi98LKwkqXBH5iwxf9xCqYs6QwPibPru3RNq3",
    "json_metadata": "",
    "proxy": "",
    "last_owner_update": "2017-03-17T18:19:18",
    "last_account_update": "2017-03-17T18:19:18",
    "created": "2016-05-24T18:54:24",
    "mined": false,
    "recovery_account": "steem",
    "last_account_recovery": "2016-07-19T19:48:54",
    "reset_account": "null",
    "comment_count": 0,
    "lifetime_vote_count": 0,
    "post_count": 154,
    "can_vote": true,
    "voting_power": 9800,
    "last_vote_time": "2018-05-22T20:10:45",
    "balance": "810.371 STEEM",
    "savings_balance": "0.000 STEEM",
    "sbd_balance": "4613.426 SBD",
    "sbd_seconds": "10828300402329",
    "sbd_seconds_last_update": "2018-05-22T22:34:24",
    "sbd_last_interest_payment": "2018-04-25T18:26:15",
    "savings_sbd_balance": "0.000 SBD",
    "savings_sbd_seconds": "0",
    "savings_sbd_seconds_last_update": "1970-01-01T00:00:00",
    "savings_sbd_last_interest_payment": "1970-01-01T00:00:00",
    "savings_withdraw_requests": 0,
    "reward_sbd_balance": "79.490 SBD",
    "reward_steem_balance": "0.000 STEEM",
    "reward_vesting_balance": "608341.169185 VESTS",
    "reward_vesting_steem": "293.101 STEEM",
    "vesting_shares": "93540695.469156 VESTS",
    "delegated_vesting_shares": "0.000000 VESTS",
    "received_vesting_shares": "0.000000 VESTS",
    "vesting_withdraw_rate": "0.000000 VESTS",
    "next_vesting_withdrawal": "1969-12-31T23:59:59",
    "withdrawn": 0,
    "to_withdraw": 0,
    "withdraw_routes": 0,
    "curation_rewards": 10288,
    "posting_rewards": 38917298,
    "proxied_vsf_votes": [
      0,
      0,
      0,
      0
    ],
    "witnesses_voted_for": 0,
    "last_post": "2018-05-22T18:59:33",
    "last_root_post": "2018-05-22T18:59:33",
    "average_bandwidth": "34722906781",
    "lifetime_bandwidth": "656153000000",
    "last_bandwidth_update": "2018-05-22T20:10:45",
    "average_market_bandwidth": 1170000000,
    "lifetime_market_bandwidth": 1170000000,
    "last_market_bandwidth_update": "2016-07-27T15:10:09",
    "vesting_balance": "0.000 STEEM",
    "reputation": "146151592482665",
    "transfer_history": [],
    "market_history": [],
    "post_history": [],
    "vote_history": [],
    "other_history": [],
    "witness_votes": [],
    "tags_usage": [],
    "guest_bloggers": []
  }
]

3. Feed history

Last thing we will need is rate of the get_current_median_history_price, returns median price rate bucket with base element.

The response example will look like:

{
  "base": "3.029 SBD",
  "quote": "1.000 STEEM"
}

4. Final calculation

After getting all these variables, all we have to do is to calculate estimation

total_vests = vesting_shares + received_vesting_shares - delegated_vesting_shares
final_vest = total_vests * 1e6
power = (voting_power * weight / 10000) / 50
rshares = power * final_vest / 10000
estimate = rshares / recent_claims * reward_balance * sbd_median_price

That’s all there is to it.