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

View this thread on: d.buzz | hive.blog | peakd.com | ecency.com
·@realmankwon·
0.000 HBD
오늘 업데이트된 voter 별 voting 금액, 소스로 본 voting 영향도
안녕하세요 @relamankwon입니다.

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

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

![](https://cdn.steemitimages.com/DQmSS6spnQ5cq6wq85mZLPQuiMem19d1whPG2u9GKUd5iBw/image.png)

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

![](https://cdn.steemitimages.com/DQmcwyobTQcBW4NVj76qhZTF6u7oZUzKAhqq59VHxEpw3yX/image.png)

주황색 표시를 한 것이 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을 한번 올려봐야겠습니다. ^^
👍 , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,