All Articles

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

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일Days60(초) * 60(분) * 24(시간) * 5(일)로 초단위 값을 구할 수 있습니다.

“마지막 보팅 후 경과 시간”“현재 시간”에서 last_vote_time1값을 빼면 알수 있습니다.

“마지막 보팅파워”voting_power2 값을 사용합니다.

마지막으로 “현재 보팅파워”는 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_power9659가 나옵니다. 이것을 백분율로 환산하면 현재 보팅파워는 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

Published 23 Jul 2018

안피곤의 블로그입니다.