SCT 소스 Pull Request 재도전

By @realmankwon6/18/2019sct

안녕하세요 @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에 제 소스가 기여되었으면 좋겠네요.
같은 걸 여러번 쓰는 느낌이라 뭔가 뒤통수가 따갑긴 하지만 저 나름대로는 아주 많은 걸 바꾸고 있는거라서 다들 좋게 봐주셨으면 합니다. ^^
이제 퇴근해야겠네요!!
다들 즐거운 저녁되세요 ^^

67

comments