[Steemit] 내 보팅 가치(Vote Value)를 JavaScript로 계산하기

in #kr4 years ago (edited)

내 보팅 가치를 계산하는 공식이 궁금하여 자료를 찾아보았습니다.

다행히 @yoonsg님이 계산 공식을 잘 정리해 놓은 글이 있어서 참고하였습니다.


계산 공식을 100% 이해하기는 어려웠습니다. 자바스크립트로 구현하면서 정리한 내용을 공유합니다.

Steem-js 라이브러리 사용

계산에 필요한 값들은 모두 steem-js 라이브러리를 사용하여 스텔라 네트워크에서 가져왔습니다.

<html>
  <script src="//cdn.steemjs.com/lib/latest/steem.min.js"></script>
</html>

Reward Fund 가져오기

계산 공식에 의하면, reward_balancerecent_claims 값이 필요합니다. steem.api.getRewardFundAsync함수를 사용해서 필요한 값들을 가져옵니다.

// Reward Fund 가져오기
var rewardFund = await steem.api.getRewardFundAsync('post')

// reward balance                                                    
var rewardBalance = rewardFund.reward_balance.split(' ')[0]

// recent claims
var recentClaims = rewardFund.recent_claims

SDB 가격 가져오기

steem.api.getCurrentMedianHistoryPriceAsync 함수를 사용해서 basequote값을 가져옵니다. 그리고 quote에 따른 STEEM 가격을 계산합니다.

// Current Median History Price 가져오기
var price = await steem.api.getCurrentMedianHistoryPriceAsync()
var base = price.base.split(' ')[0]
var quote = price.quote.split(' ')[0]

// SBD / STEEM의 가격 비율
var steemPrice = base /quote 

Global Properties 가져오기

steem.api.getDynamicGlobalPropertiesAsync 함수를 사용하여 total_vesting_fund_steemtotal_vesting_shares값을 가져옵니다. 참고로 이 두 값은 조회 할 때마다 계속 바뀝니다.

// Global Properties 가져오기
var global = await steem.api.getDynamicGlobalPropertiesAsync()

// total Vesting Fund Steem
var totalVestingFundSteem = global.total_vesting_fund_steem.split(' ')[0]

// total Vesting Shares
var totalVestingShares = global.total_vesting_shares.split(' ')[0]       

계정 정보 가져오기

마지막으로 steem.api.getAccountsAsync 함수를 사용하여, 계정 정보를 가져옵니다. username 변수의 값은 본인의 ID로 수정해야 합니다. 아래 코드에서는 ‘anpigon’ 이 사용되었습니다.

계정이 보유하고 있는 스팀파워(steemPower)보팅파워(votingPower)를 계산합니다. 보팅가중치(voteWeight)100%라고 가정합니다.

// 계정 정보 가져오기
var username = 'anpigon' // 조회할 유저ID
var account = (await steem.api.getAccountsAsync([username]))[0]

// 나의 Steem 계산하기
var vestingSteem = steem.formatter.vestingSteem(account, global)

// 대여받은 Steem 계산하기
var receivedVestingShares = account.received_vesting_shares.split(" ")[0]
var receivedVestingSteem = totalVestingFundSteem * (receivedVestingShares / totalVestingShares)

// 보유한 총 Steem(나의 Steem + 대여받은 Steem)
var steemPower = vestingSteem + receivedVestingSteem

var votingPower = account.voting_power // 현재 보팅 파워
var voteWeight = 1e4 // 보팅 가중치(100%)

console.log(`나의 보팅파워: ${votingpower/100}%\n나의 스팀파워: ${steempower} [${vestingSteem} (+${receivedVestingSteem})]`) 

보팅 가치 계산하기

이제 가져온 값들을 공식에 넣어 계산합니다.

// 보팅파워 * 보팅가중치에 따른 비율 계산
var rate = parseInt(votingPower * voteWeight / 1e4)
rate = parseInt((rate + 49) / 50) * 100 // 변환식(?)

// 나의 보팅 가치 계산
var voteValue = steemPower / (totalVestingFundSteem / totalVestingShares) * rate * (rewardBalance / recentClaims) * steemPrice

console.log(`나의 보팅 가치: \$${voteValue}`)

현재 저의 보팅 가치 금액은 약 $0.001 로 나옵니다.ㅠㅠ

참고로 위의 코드는 모두 크롬 브라우저 콘솔창에서 실행되었습니다.

img

마무리

계산 공식에 의하면 보팅 가치를 $0.01 를 올리기 위해서는 약 128 SP 이 필요합니다. 원화로 계산했을때, 업비트 거래소 현재가 기준으로 약 16만원이 필요합니다.

여기까지 읽어주셔서 감사합니다.

Sort:  

실험 정신엔 추천

추천해주셔서 감사합니다~^^

자바스크립트를 공부중인데 필요할것 같아 리스팀해갑니다~ 감사합니다

리스팀 해주셔서 감사합니다. 제가 생각하기에 자바스크립트는 배우는 재미가 있는 언어입니다. 화이팅입니다~~^^

오오 대단하십니다. 스팀 가격이 올라야할텐데.. 100스파로 1센트도 못찍는건 너무하네요.

응원해주셔서 감사합니다. 스팀 가격이 떨어지길 기다렸다가 얼른 스팀파워를 올리세요~~ ㅎㅎ

보팅 가치 올리기가 엄청 힘든 일이였군요... 적금들듯이 스팀을 사놔야겠네요 ㅎㅎ

스팀으로 적금 드는것도 괜찮은 생각이네요~^^

코드로 보여주니 믿음이 가네요~

개발자는 코드를 봐야 믿음이 가죠.ㅎㅎㅎ

(jjangjjangman 태그 사용시 댓글을 남깁니다.)
[제 0회 짱짱맨배 42일장]5주차 보상글추천, 1,2,3,4주차 보상지급을 발표합니다.(계속 리스팅 할 예정)
https://steemit.com/kr/@virus707/0-42-5-1-2-3-4

5주차에 도전하세요

그리고 즐거운 스티밋하세요!

매번 감사드립니다.^^

Coin Marketplace

STEEM 0.18
TRX 0.05
JST 0.022
BTC 16999.58
ETH 1258.45
USDT 1.00
SBD 2.11