SCT 소스 Pull Request 재도전

in #sct5 years ago (edited)

안녕하세요 @realmankwon입니다.

어제 포스팅한 것(SCT 소스 Pull Request 중간 결과)에서 문제가 되었던 것들이 있었습니다.
그래서 결국은 제가 올렸던 Pull Request 는 아쉽게도 Closed로 변경이 되었습니다.

@jacobyu님께서 일단 스팀엔진측에서 수락할 수 있는 기능만을 Pull Request 하자고 하셨고 저도 그게 좋을 것 같아서 이래저래 소스를 수정하였습니다.

1 . 스팀 보상, 보팅예상액 제외, 보팅비율만 추가

이번에 수정한 것은 eonwarped(스팀엔진 개발자인 듯)가 부정확한 값일 것 같다고 한 voter 별 보팅금액, steemApi 변경으로 대세글 등에서 보이지 않는 스팀보상액을 제외하였습니다.

2 . 중복 보팅개수 제거

그리고 추가한 보팅 리스트 옆에 중복으로 기존의 보팅 개수가 나오던 것도 나오지 않도록 수정하였습니다.

3 . 보팅바 (수정없이 기존 소스 유지)

보팅바에서 보팅비율 수동 입력과 고정 입력 버튼은 큰 이견을 표하지 않아서 그대로 두었습니다.

4 . Wallet - SCOT Token balances (알파벳 순 정열, SCT 제외)

또한 Wallet 에서 다른 Token들을 보여줄때 알파벳 순으로 정리한 후 동일한 Token은 제외하도록 하였습니다.
(SCT 에서는 SCT 제외, AAA에서는 AAA 제외)
제 위치가 어디인지 물어도 답도 없고 본인의 할말만 하고 쿨하게 떠나버려서 아직도 궁금하네요.
소소하게 디자인도 기존의 디자인과 동일하게 변경을 하여 이질감을 없앴습니다.

일단 기존에 변경되었던 소스에서 이것을 없애는대에도 꽤 시간이 걸렸습니다.
빌드 후 정상 동작을 확인을 하고 어제 가장 크게 딴지를 걸었던 보팅예상액 계산을 eonwarped가 답한대로 적용을 해 보았습니다.

* eonwarped 의 보팅예상액 계산법

eonwarped 는 이렇게 답을 했습니다.

Given the sequence r_1, r_2, ....
What you first do is tally total_weighted_rshares: = (Sum_i r_i )^1.3
and then for the first voter, you compute

   curr_rshare_sum = 0
   for (var i=0; i < votes.length; i++) {
        value[i] = ( (curr_rshare_sum + votes[i].rshares )^1.3 - curr_rshare_sum^1.3 ) / total_weighted_rshares * payout
        curr_rshare_sum += votes[i].rshares;
   }

그래서 저도 기존의 소스를 버리고 저것을 반영하여 아래와 같이 소스를 수정했습니다.

KakaoTalk_20190618_190309740.png

   let total_weighted_rshares = 0;
   let curr_rshare_sum = 0;

    for (var i=0; i < avotes.length; i++) {
        total_weighted_rshares += (curr_rshare_sum + avotes[i].rshares )^1.3;
        curr_rshare_sum += avotes[i].rshares;
    }

    curr_rshare_sum = 0;
    for (var i=0; i < avotes.length; i++) {
        avotes[i].price_of_voter = ( (curr_rshare_sum + avotes[i].rshares )^1.3 - curr_rshare_sum^1.3 ) / total_weighted_rshares * payout;
        curr_rshare_sum += avotes[i].rshares;
    }

하지만 결과는 많이 다르게 나오더군요...

KakaoTalk_20190618_185659464.png

보팅 예상액이 - 로 나타나고 수치도 너무 작습니다.
eonwarped에게 물어보고 싶은데 물어볼 길이 없습니다.
관련해서 질문한 것은 대답이 없고 직접 어딘가에 물어볼 수 있으면 좋을 것 같은데 어쩌지를 못하네요.

제가 생각했을때는 voter 들마다 가지고 있는 rshares 는 이미 1.3을 반영한 값을 가지고 있을거라고 생각이 되었고 소스에서도 그 rshares를 기준으로 정렬을 하여 rshares가 많은수록 voting list에서 먼저나오도록 되어 있습니다.

        const avotes = active_votes.toJS();
        avotes.sort(
            (a, b) =>
                Math.abs(parseInt(a.rshares)) >
                Math.abs(parseInt(b.rshares))
                    ? -1
                    : 1
        );

위의 소스에서 rshares 가 많으면 -1, 적으면 1로 하여서 적은 것이 먼저가도록 정렬하는 것입니다.
이 부분에 대해서 다시 정확한 로직을 알았으면 좋겠네요.
로직만 분명하다면 적용하는 것은 어렵지 않을테니 말입니다.
일단은 pull request 를 올리면서 이 부분에 대해서 질문을 했는데 답을 해 줄지 기다려 봐야겠습니다.

제가 올린 pull request 는 다음의 링크를 보시면 상세히 볼 수 있습니다.

https://github.com/steem-engine-exchange/nitrous/pull/12

다행히 오늘 올린 소스도 validation에서는 문제가 없이 잘 진행이 되었습니다.

참 힘겹네요 ^^
안 되는 영어도 간만에 꾸역꾸역 써보고 이래저래 열심히 할려고 노력하는 것 자체가 즐겁네요.
근데 시간이 너~~~~~~~~~~~~~~무 많이 드는게 흠입니다.
어제도 될 것 같아서 될때까지 할려다가 결국은 안 되서 밤샐까봐 자고...ㅜㅜ
이번에는 Accept 되어서 적용이 좀 되어 nitrous에 제 소스가 기여되었으면 좋겠네요.
같은 걸 여러번 쓰는 느낌이라 뭔가 뒤통수가 따갑긴 하지만 저 나름대로는 아주 많은 걸 바꾸고 있는거라서 다들 좋게 봐주셨으면 합니다. ^^
이제 퇴근해야겠네요!!
다들 즐거운 저녁되세요 ^^

Sort:  

고생이 많으십니다.

1번 스팀 보상, 보팅예상액 제외된건 너무나도 아쉽네요.

그럼 파이팅입니다~

행복한 하루되세요~

저도 너무 아쉽네요 ^^;;;

제 생각에는 eonwarped 가 잘못 알고 있는 것 같아요
아래의 holger80 포스팅에 계산 방법이 있는데,
Palnet: How to check your voting power and your PAL vote value

vote_value = vote_weight / 100 * voting_power / 100 * rshares / pending_rshares * reward_pool
으로만 계산을 합니다.. rshares 에 대한 계산은 지들.. 서버에서 api로 주는 것이죠

https://scot-api.steem-engine.com/info?token=SCT
https://scot-api.steem-engine.com/@realmankwon/mt5xp-sct-pull-request

위에서 값 확인해서 체크해 보시면 맞을 것 같습니다

근데 ㅋㅋㅋㅋㅋㅋ 간단하게 해봤는데 안 맞네요 -_-aaa이상하다 ㅠ

일단 다시 답이 와서 그걸로 적용해서 오늘 해 볼까 합니다 ^^

너무 감사드립니다.
코드기여, Pr관련 글들은 제가 더 신경써서 볼게요.

질문에 답변이 안온다면 계산식은 제가 개인적으로 물어보겠습니다.

감사합니다~^^
좋은 결과가 있었으면 좋겠네요ㅋ

넵 좀만 기다려주셔요!

Hello realmankwon, welcome to Partiko, an amazing community for crypto lovers! Here, you will find cool people to connect with, and interesting articles to read!

You can also earn Partiko Points by engaging with people and bringing new people in. And you can convert them into crypto! How cool is that!

Hopefully you will have a lot of fun using Partiko! And never hesitate to reach out to me when you have questions!

Cheers,
crypto.talk
Creator of Partiko