Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

집계가 종료된 후 투표의 유효성, 가부상태를 검사하고 기록한다. #12

Closed
MichaelKim20 opened this issue Jul 19, 2022 · 1 comment · Fixed by #26
Assignees

Comments

@MichaelKim20
Copy link
Member

MichaelKim20 commented Jul 19, 2022

컨트랙트 VoteraVote의 함수 countVote에서 투표용지를 집계한 후 커먼스버짓 컨트랙트의 함수 finishVote()를 호출한다.
다음 기능을 커먼스버짓 컨트랙트에 구현한다.

  1. 투표에 참여한 검증자들의 수가 의결정족수 조건을 충족하는지를 체크한다. 만약 의결정족수 조건을 충족하지 못하면 투표를 무효처리한다.
  2. 투표의 결과가 가결인지 부결인지를 판단한다.
  3. 투표의 결과와 투표가 종료된 블록의 시간을 기록한다.
  4. ProposalStates 에 필요한 상태를 추가한다.
@MichaelKim20
Copy link
Member Author

MichaelKim20 commented Jul 19, 2022

다음은 백서에 나온 것을 수식으로 설명한 것입니다.
정족수의 초기값은 전체구성원의 1/3입니다.

Vn : 검증자의 수
Yn : 찬성한 투표용지의 갯수
Nn : 반대한 투표용지의 갯수
An : 기권한 투표용지의 갯수
백서에 기술된 정족수(Quorum) = Vn / 3
소수점 이하는 버림을 합니다.

Qn = Yn + Nn + An
만약 (Qn >= Quorum) 이면 정족수를 만족합니다.

F = (Yn - Nn) / Qn
만약 F > 0.1 이면 제안에 대한 투표는 가결되고 그렇지 않으면 부결됩니다.

백서에는 의결정족수가 전체 구성원의 3분의 1로 정해지지만 평균참여율을 반영해 추후 조정될 수 있다고 되어 있습니다.
몇가지 경우를 통해 이것을 설명드리겠습니다.

만약 전체 검증자의 수가 1,000명이면 정족수는 1,000 / 3 입니다. 즉 333명 입니다.

  • Case 1) 찬성: 200; 반대 : 100; 기권 : 33 
 => (200+ 100 + 33 = 333) 정족수를 만족하여 투표가 유효합니다.
  • Case 2) 찬성: 200; 반대 : 100; 기권 : 32
 => (200+ 100 + 32 = 332) 정족수를 만족하지 못하여 투표가 무효처리 됩니다.
  • Case 3) 찬성: 183; 반대 : 150; 기권 : 0 
 => (183 + 150 = 333) 정족수를 만족하여 투표가 유효합니다.
          F = (찬성 - 반대) / (투표용지의 수) = 183 - 150 / (183 + 150 + 0) = 33 / 333 = 0.09
          따라서 투표는 부결되고 자금도 지급되지 않습니다.
  • Case 4) 찬성: 183; 반대 : 149; 기권 : 1
 => (183 + 150 = 333) 정족수를 만족하여 투표가 유효합니다.
          F = (찬성 - 반대) / (투표용지의 수) = 183 - 149 / (183 + 149 + 1) = 34 / 333 = 0.10
          따라서 투표는 가결되고 자금은 지급됩니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants