steem.js - получение баланса и перевод GESTS в SP
Всем лучи добра, продолжим рассказывать о интересностях, которые были найдены во время разработки "Доброго Кита".
Сегодня, я хочу рассказать, о том, как получить баланс аккаунта в Силе Голоса. Даже не так - как перевести GESTS в SP.
Ну и по традиции предыстория. Для нас (@dobryj.kit) очень важно иметь возможность в любой момент получить баланс на кошельке в СГ для финансовой отчетности. Для получения текущего баланса в GESTS мы используем функцию steem.api.getAccounts(['dobryj.kit'], function(error, data){})
У данной функции 2 аргумента:
- accounts - массив строковых логинов аккаунтов: информацию о которых мы хотим получить
- callback - функция, которая будет выполнена при получении ответа от steem
В результате выполнения данной операции мы получаем объект (data). Нам интересно его значение vesting_shares
.
Обратимся к Golos Api Explorer для получения нужной информации:
Выглядит легко - но самое интересное впереди. Вот тут то и начинаются проблемки - как перевести GESTS в SP? Погуглив я наткнулся на формулу
SP = vesting_shares / 1000000.0 * steem_per_mvests
Отлично, подумал я. Но что такое steem_per_mvests? Вразумительной инфы я не нашел - самым частым упоминанием этого параметра были статьи, в которых советовали сходить на http://golosd.com что бы это узнать
Я начал лопатить исходники, на предмет этой переменной и вы удивитесь - я несколько раз, нашел разные исходники, в которых это значение парсили с этого сайта. Но меня это не устраивало.
Тут я и наткнулся на исходники Голоса на C++ и нашел интересные строки
string wallet_api::get_steem_per_mvests() const {
auto dynamic_props = my->_remote_db->get_dynamic_global_properties();
auto price = (dynamic_props.total_vesting_fund_steem /
dynamic_props.total_vesting_shares);
return std::to_string(price.to_real() * 1000000);
}
Интересно - подумал я. Я ведь уже встречал параметры total_vesting_fund_steem
и total_vesting_shares
. И даже вспомнил где, это функция - steem.api.getDynamicGlobalProperties(function(err, properties){})
с одним аргументом - callback (см выше)
steem.api.getDynamicGlobalProperties(function (err, props) {
if (err) {
return cb(err, null);
}
self.steem_per_mvests = 1000000.0 * parseFloat(props["total_vesting_fund_steem"].split(" ")[0]) / parseFloat(props["total_vesting_shares"].split(" ")[0]);
steem.api.getAccounts(['dobryj.kit'], function (err, accounts) {
if (err) {
return cb(err, null);
}
var account = accounts[0];
self.botBalance = parseFloat(account['vesting_shares'].split(" ")[0]) / 1000000 * self.steem_per_mvests;
return cb(err, self.botBalance);
});
});
};
 Вот такая вот загогулина - надеюсь, кому то будет полезно.
 **Спасибо за внимание**
 [Подписывайтесь](https://golos.io/@exan) на мой блог и да прибудет с вами сила.