Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
exan
7 лет назад

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 (см выше)

 В итоге получилась вот такая функция ``` this.getBalance = function (cb) { var self = this;
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) на мой блог и да прибудет с вами сила.
0
22.902 GOLOS
На Golos с May 2017
Комментарии (8)
Сортировать по:
Сначала старые