[kr-dev] 보팅시 얼마의 SBD가 보상으로 생기는지 확인하는 steem.js 코드입니다.

in #kr7 years ago

steemkr.com을 이용하면 보팅바에 얼마의 보상이 발생하는지 바로 보이지만, steem.js과 같이 프로그램을 통해 보팅을 하려고 하면 계산이 여간 어려운게 아니네요.

steemkr 소스코드도 들춰보고 구글에서 검색도 해보다가 결국에 스팀잇 안에서 steem.js 관련 강좌를 찾아 해결을 해서 여기 공유합니다.

간단히 보유한 스팀파워(또는 rshares?)에 현재 스팀달러 가격을 일정 비율로 곱하면 나올 것으로 생각했는데, 실제로 구현된 코드를 보니 이렇게 복잡한 계산을 해야 하는 줄은 몰랐네요.

소스코드의 XXXXXX 해놓은 부분에 스팀잇 아이디를 넣고 실행시키면 추정되는 보상 SBD가 나옵니다.

steem = require('steem')
account = 'XXXXXX'
const STEEMIT_VOTE_REGENERATION_SECONDS = 5 * 60 * 60 * 24; 
const STEEMIT_100_PERCENT = 10000
const current_voting_power = 10000
const vote_pct_weight = STEEMIT_100_PERCENT;
steem.api.getAccountsAsync([account]).then(function(results) {
    const account = results[0];
    const acct_vesting_shares = parseFloat(account.vesting_shares.replace(" VESTS", "")  );
    const acct_delegated_vesting_shares = parseFloat(account.delegated_vesting_shares.replace(" VESTS", "")  );
    const acct_received_vesting_shares = parseFloat(account.received_vesting_shares.replace(" VESTS", "")  );
    const effective_vesting_shares = acct_vesting_shares - acct_delegated_vesting_shares + acct_received_vesting_shares;
    steem.api.getRewardFundAsync("post").then(function(fund) {
        const pot = parseFloat(fund.reward_balance.replace(" STEEM", ""));
        const total_r2 = parseInt(fund.recent_claims, 10);
        steem.api.getDynamicGlobalPropertiesAsync().then(function(gprops) {
            const max_vote_denom = gprops.vote_power_reserve_rate * STEEMIT_VOTE_REGENERATION_SECONDS / (60*60*24);
            let used_power = (current_voting_power * vote_pct_weight) / STEEMIT_100_PERCENT;
            used_power = (used_power + max_vote_denom - 1) / max_vote_denom;
            let rshares = effective_vesting_shares * used_power / STEEMIT_100_PERCENT;
            rshares = Math.floor(rshares * 1000000)
            steem.api.getFeedHistoryAsync().then(function(r){
                ratio = parseFloat(r.current_median_history.base.replace(" SBD", ""))
                steemvalue = rshares * pot / total_r2
                votingreward = (ratio * steemvalue).toFixed(3)
                console.log("reward: ", votingreward, "SBD"))
            }) 
        });
    });
});

출처: Write a Steemit Web App: Part 13 - How to Calculate a Vote's RShares

Sort:  

좋은 내용 감사합니다. : )

코드 쓰시는 분들 뵈면 대단하다고 생각합니다. ^^

뭔가 해석하기 어려운 코드....
보면 볼수록 신기한 능력인것 같습니다 ㅎ

워 @.@ 저기 어려운 코드들은 먼가요 ㅠㅠ 외계어인가요..

Coin Marketplace

STEEM 0.24
TRX 0.11
JST 0.032
BTC 62482.14
ETH 3044.68
USDT 1.00
SBD 3.76