[Steemit] 보팅파워와 재생시간 분석하기

anpigon(63)
Published in
#kr
Words
275
Reading
2 min
8y
Listen to this post
~2 min

steemit

최근에 스팀잇에 관심을 가지고 스터디하고 있는 뉴비입니다.

하나 하나 차근 차근 공부하면서 블로그에 정리할 계획입니다.

보팅파워과 재생시간

보팅파워Voting Power와 재생시간이 어떤 공식으로 계산 되는지 궁금하여 분석하여 보았습니다.

https://steemd.com/@아이디 에 접속하면 자신의 보팅파워를 쉽게 확인 할 수 있습니다.

하지만 우리는 계산 공식을 구해서 직접 계산해보도록 하겠습니다.

계산하기 전에 우리는 사용자 프로필 정보에서 마지막 보팅 시간last vote time 과 보팅파워voting power를 조회해야 합니다.

사용자 프로필 정보 조회하기

Steemit.com은 데이터를 조회할 수 있는 몇 가지 endpoint를 제공하고 있습니다. 사용자 프로필 JSON 데이터는 요청URL 끝에 .json만 붙여서 호출하면 됩니다.

사용자 프로필 JSON 조회 URL https://steemit.com/@anpigon.json를 브라우저에서 조회하면, 아래와 같은 User Object JSON 데이터를 얻을 수 있습니다.

{
   "user":{
      "id":810995,
      "name":"anpigon",
      "json_metadata":{
         "profile":{                         
            "profile_image":"https://steemitimages.com/DQm~.png",
            "name":"안피곤",
            "cover_image":"https://steemitimages.com/DQm~.jpg",
            "github":"anpigon",
            "about":"안녕하세요 "
         }
      },
      ... 생략 ...
      "voting_power":8925,
      "last_vote_time":"2018-07-23T04:27:03",
      ... 생략 ...
   },
   "status":"200"
}

데이터가 너무 많아서 중간 중간 생략하였습니다.

현재 보팅파워 계산하기

보팅할때마다 일정 비율로 보팅파워가 줄어들며 하루에 20%(5일 동안 100%)의 비율로 재생됩니다.

따라서 현재 보팅파워current voting power를 계산하는 공식은 아래와 같습니다.

계산 공식
마지막 보팅 후 경과된 시간 = 현재 시간 - 마지막 보팅 시간

재생된 보팅파워 = 100% / 5일 * 마지막 보팅 후 경과된 시간

현재 보팅파워 = 마지막 보팅파워 + 재생된 보팅파워

시간은 모두 초 단위로 계산됩니다.

5일Days는 60(초) * 60(분) * 24(시간) * 5(일)로 초단위 값을 구할 수 있습니다.

"마지막 보팅 후 경과 시간"은 "현재 시간"에서 last_vote_time[1]값을 빼면 알수 있습니다.

"마지막 보팅파워"는 voting_power[2] 값을 사용합니다.

마지막으로 "현재 보팅파워"는 100%를 넘을 수 없습니다.

자바스크립트javascript 코드로 나타내면 아래와 같습니다. 백분율은 계산하기 쉽게 10000로 표현하였습니다.

JS Code
// 마지막 보팅 시각
var last_vote_time = "2018-07-23T04:27:03";

// 마지막 보팅 파워
var voting_power = 8925;

// 마지막 보팅 후 경과 시각(단위: 초)
var elapsed_seconds = (new Date() - new Date(last_vote_time + "Z")) / 1000;

// 재생된 보팅파워
var regenerated_power = 10000 / (60 * 60 * 24 * 5) * elapsed_seconds;

// 현재 보팅파워
var current_power = Math.round(Math.min(voting_power + regenerated_power, 10000));

코드를 돌려보면 current_power는 9659가 나옵니다. 이것을 백분율로 환산하면 현재 보팅파워는 96.59%가 됩니다.

보팅파워 재생시간 계산

위의 계산 공식을 역으로 계산하면 보팅파워의 재생시간을 알아 낼 수 있습니다.

계산 공식
재생시간 = (100% - 현재 보팅파워%) * 5일 / (1시간 * 100%)

자바스크립트javascript 코드로 나타내면 아래와 같습니다. 백분율은 계산하기 쉽게 10000로 표현하였습니다.

JS Code
// 현재 보팅파워
var voting_power = 9700; 

// 보팅파워 재생시간
var remain_hours = (10000 - voting_power) * (5 * 60 * 60 * 24) / (60 * 60 * 10000)

remain_hours는 3.6이 나옵니다. 현재 보팅파워가 97%라면 재생시간은 3.6시간이 됩니다.

보팅파워에 따른 회복 시간을 표로 나타내면 아래와 같습니다.

보팅 파워회복 시간비고
99%1.2시간
98%2.4시간
95%6시간
80%24시간1일
70%36시간1일 12시간
60%48시간2일
50%60시간2일 12시간
40%72시간3일
30%84시간3일 12시간
20%96시간4일
10%108시간4일 12시간
0%120시간5일

여기까지 읽어주셔서 감사합니다. 꾸벅 -_-



  1. 사용자 프로필 JSON 데이터의 last_vote_time값 ↩

  2. 사용자 프로필 JSON 데이터의 voting_power값 ↩