Yesterday, we saw how to use SteemJs library to calculate any user’s current Voting Power. As a reminder, you can take a look at the entire library in its Github repository and take a look at its obscure documentation in here.
Today, we will tackle another problem that will make use three different SteemJs functions:
getAccount
: You should already be familiar with that one, we used it yesterday to find the time of the last upvote and the remaining Voting Power at that time.getDynamicGlobalProperties
: New function that we will explore today.`steem.formatter.vestToSteem
: Idem
But wait, we’re just looking for the Steem Power, surely I can find it in the getAccount response, why would I need other functions here?
Well, that’s just not how it works. To make it simple, Steem Power is a formatted version of what is called Vesting Shares. Thus, in order to convert Vesting Shares to Steem Power, we need to get some information relative to the whole blockchain and accessible throughgetDynamicGlobalProperties
. Then, we can pass the Vesting Shares and the blockchain necessary information to the formatter in order to obtain the Steem Power.
Ready? Go!
Obtaining the Vesting Shares
As in our first tutorial, let’s start with the getAccounts
function:
steem.api.getAccounts(["stoodkev"], function(err, response){
console.log(response);
});
Here is a snapshot of the obtained response with the information we are looking for:
Then, we need to find our Vesting Shares, here you go:
But wait, there is more! I guess you are familiar with delegations, these Vesting Shares that increase your Steem Power without being yours. That’s what happen when someone lend you Steem Power.
So let’s find the two re are interested in: the received and delegated Vesting Shares:
As I showed in the first tutorial, you can get quickly the path to the element you want in the Json object by a right click on that one and Copy Property Path.
Try to get the the three variables by yourself.
Done? So let’s take a look at our code now:
steem.api.getAccounts(["stoodkev"], function(err, response){
var vesting_shares= response["0"]. vesting_shares;
var delegated_vesting_shares= response["0"].delegated_vesting_shares;
var received_vesting_shares=response["0"].received_vesting_shares;
console.log(vesting_shares, delegated_vesting_shares, received_vesting_shares);
});
Dynamic Properties
As mentioned in the introduction, we will need some of the dynamic properties of the blockchain in order to convert our Vesting Shares into Steem Power. Let’s run the following code:
steem.api.getDynamicGlobalProperties(function(err, result) {
console.log(result);
});
And take a look at the result :
You will find lots of useful information about the blockchain here, but in our case we are only interested in the total_vesting_shares
and total_vesting_fund_steem
variables.
So let’s get them and include them in our code:
steem.api.getDynamicGlobalProperties(function(err, result) {
total_vesting_shares=result.total_vesting_shares;
total_vesting_fund=result.total_vesting_fund_steem;
console.log(result);
});
Formatting the result
Looking at SteemJs documentation, here is the definition of the formatter:
var steemPower = steem.formatter.vestToSteem(vestingShares, totalVestingShares, totalVestingFundSteem);
console.log(steemPower);
We also want to calculate the amount of Steem Power being delegated to us. For this, we substract the amount we delegated, to the amount we received.
At the end, you should obtain a result similar to mine:
var vesting_shares, delegated_vesting_shares, received_vesting_shares, total_vesting_shares , total_vesting_fund_steem=null;
steem.api.getAccounts(["stoodkev"], function(err, response){
vesting_shares= response["0"]. vesting_shares;
delegated_vesting_shares= response["0"].delegated_vesting_shares;
received_vesting_shares=response["0"].received_vesting_shares;
});
steem.api.getDynamicGlobalProperties(function(err, result) {
total_vesting_shares=result.total_vesting_shares;
total_vesting_fund=result.total_vesting_fund_steem;
});
// Handle Promises, when you’re sure the two functions were completed simply do:
var steem_power= steem.formatter.vestToSteem(vesting_shares, total_vesting_shares, total_vesting_fund);
var delegated_steem_power= steem.formatter.vestToSteem((received_vesting_shares.split(' ')[0]-delegated_vesting_shares.split(' ')[0])+' VESTS', total_vesting_shares, total_vesting_fund);
console.log(steem_power,delegated_steem_power);
You will get this result:
Use the toFixed()
method to reduce the number of decimals.
Hope this helps!
Posted on Utopian.io - Rewarding Open Source Contributors