오늘 업데이트된 voter 별 voting 금액, 소스로 본 voting 영향도

in #sct5 years ago (edited)

안녕하세요 @relamankwon입니다.

금일 제가 소스투고로 pr 올린 voter list 를 스팀엔진측에서 추가로 변경한 것 같습니다.
안보이던 voter 별 voting 금액이 나오네요.
제가 작성한 소스에 추가로 뭔가 작업을 해서 올린게 개인적으로 참 고무적이네요 ^^

암튼 저도 해당 기능을 넣기 위해서 애를 많이 썼었는데 결국은 제 소스에서는 해당 기능을 제대로 구현하지는 못했었습니다.
그래서 비교를 해 보았습니다.
왼쪽이 현재 스코판이고 오른쪽이 제가 개발한 소스를 적용한 중국 개발자의 사이트입니다.

일단 순서는 둘다 동일하지만 voting 금액은 다릅니다.

주황색 표시를 한 것이 voting 금액이 더 적게 표시된 것입니다.
그 이유를 찾기 위해 소스를 뒤져봐습니다.

Steem Engine과 저의 소스는 Voter List 를 정렬하는 방법은 동일하기에 순서는 동일할 수 밖에 없습니다.

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

voting 한 rshares로 내림차순 정렬을 한 것입니다.
때문에 제가 제일 처음 작성한대로 다음의 수식으로 계산을 하면 정렬한 순서대로 voting price 가 정렬될 것입니다.

pending_token * voter_rshares / total_rshares

하지만 스팀엔진 측에서 작성한 소스는 다음과 같습니다.

        let currRshares = 0;
        for (let i = 0; i < avotes.length; i++) {
            const vote = avotes[i];
            vote.estimate = (
                (applyRewardsCurve(currRshares + vote.rshares) -
                    applyRewardsCurve(currRshares)) /
                Math.pow(10, scotPrecision)
            ).toFixed(scotPrecision);
            currRshares += vote.rshares;
        }

avotes 는 voter list 인데 voting을 한 순서대로 입력이 되어 있을 겁니다.
일단은 voting 순서가 영향을 끼칠 거라는 것을 수식을 보면 짐작할 수 있습니다.

applyRewardsCurve 함수를 한번 살펴보겠습니다.

    const applyRewardsCurve = r =>
        Math.pow(Math.max(0, r), rewardData.author_curve_exponent) *
        rewardData.reward_pool /
        rewardData.pending_rshares;

입력한 값을 author_curve_exponent(1.3) 승한 후에 reward_pool 을 곱하고 pending_rshares로 나누어 줍니다.
이때 입력한 값은 계산할 순서의 voter까지의 voting 한 rshares의 합입니다.
예를 들면 30명의 voter가 있고 이것을 다음과 같이 나열합니다.

v1, v2, v3, ................, v30

v1 이 계산될 때 입력값= 0 + v1
v2 가 계산될 때 입력값 = 0 + v1 + v2
v3 가 계산될 때 입력값 = 0 + v1 + v2 + v3
.
.
.
v30 이 계산될 때 입력값은 = 0 + v1 + .... + v30

그렇다면 내가 payout 되는 글에 미치는 영향력은

  1. voting 하기 전에 예상 voting 금액이 많을수록
  2. 늦게 voting을 할수록
    더 커짐을 알 수 있습니다.

글 전체에 대한 내 voting의 영향력은 알겠는데 내가 받는 Curator 보상은 얼마인지는 어떻게 알 수 있을까요?
궁금해 지는군요.
관련해서는 소스가 없는지 한번 찾아 보고 싶네요.

그런데 글 작성을 끝내고 나서 생각하니 voter list 정렬하는 걸 rshares가 아닌 estimate로 변경하면 voter 별 voting 금액에 따라 정렬이 될 것 같네요.
저것도 pr을 한번 올려봐야겠습니다. ^^

Sort:  

수고하셨어요. 좋아요. 완전 관심 생깁니다.


개발자님은 사랑인 거 확실합니다.

언제나 감사합니다 ^^

Congratulations @realmankwon! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You got more than 200 replies. Your next target is to reach 300 replies.

You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

Vote for @Steemitboard as a witness to get one more award and increased upvotes!

작성하신 글 잘 보고 있습니다.

이번에 curation_curve_exponent가 0.9로 변경되었는데, 이렇게 되면 보터별 보팅 금액을 계산하는 식도 변경되어야 하는 것이 아닌지요? 최근 소스를 보아도 위에 올려놓으신 코드와 같은 것 같습니다. 큐레이션 계수가 변경된 것은 어디에서 확인할 수 있는지요?

보터별 보팅 금액 계산은 큐레이팅 보상과는 별개인 듯 합니다.
단순히 전체 보상을 계산하는 것이기에 보터별 rshares만 영향을 미치는 듯 합니다.

큐레이팅 보상 계산은 steem engine측에 있을 것 같습니다.
그 소스는 어디에 있는지 몰라서 현재로서는 저도 판단하기가 어렵네요 ㅜㅜ
단순히 큐레이션 계수가 변경된 내역이 보고 싶으시면 아래의 링크로 가시면 curation_curve_exponent 변수에 0.9로 표시가 되어 있습니다.

https://scot-api.steem-engine.com/config?token=SCT

도움이 되셨는지 모르겠네요 ^^

큐레이션 보상은 스캇봇쪽에서 하겠군요. 답신 감사합니다.