1. 소개

투표는 캄브리아의 핵심메커니즘입니다.
전문가를 선출하고 제기된 문제에대해 투표하며, 선호도 및 개발방향에 대한 신호를 전송하는등의 방식으로 커뮤니티가 다양한 분야에서 혁신을 계속 해나갈 수 있도록합니다.

이번글에서는, 캄브리아의 온 체인 투표 메커니즘인 캄브리아투표(KambriaVote)가 어떻게 실행 되는지 알아보겠습니다.
카본투표(Carbon Vote)를 발전시킨 형태가 캄브리아 투표입니다.

2. 사용사례연구

올해 말 개최되는 캄브리아 주최의 해커톤(투표 캠페인)에서 캄브리아 투표를 선보일 예정입니다. 이용자들이 가장 마음에 드는 비디오 판독 요구에게
자신의 표를 줄 수 있게끔 말입니다.

2.1 메커니즘

-사용자(KAT 시험도 끈을 보유한 계정)는 아무공개 투표캠페인이나
참여하여 캠페인에 참가한 후보자에게 투표 할 수 있습니다.

-사용자는 KATA 잔액 전부를 표로 던져야 투표한 것으로 인정됩니다다.

-각각의 표는 같은 가치를 가지는 것 아니라 가중치가적용됩니다.
가중치는KATT 잔액으로 결정됩니다.
10 KATA를 보유한 사용자와 5 KATA를 가진 사용자가 투표에 참여했다고 하면, 앞사람이 행사한 표가 전체결과에 더 큰 영향을끼치게되는겁니다.
즉,사용자의 보유 KATA가 많을수록 투표에서의영향력이커집니다.

-사용자가 똑같은 캠페인에 참여한 다른 후보자에게 투표하면,스마트계약은 기존에 행사했던 표를사용자가방금다시뽑은후보자에게로옮깁니다.

– 사용자는 의사를 바꿀 수 있지만 한 캠페인 내에서한명의후보자에게만투표할수있습니다.

-사용자는 여러 개의 캠페인에 투표할 수 있습니다.

2.2 투표결과집계방식

투표 기간 동안 계정의 KATA 잔액에 변동이 생기면 사용자가 행사 하는 한 표의 가중치도 변경됩니다. 가중치가 반영된 표의 누계는 공개된 캠페인의현재투표수에 동적으로 반영됩니다.

투표가 끝나면 계정에 보유하고 있는 KATA 현재 잔액만 가중치로 들어갑니다 만약 첫 투표 당시 10KAT를 보유했던사용자가 투표가 진행되는 기간 동안 2KAT를 사용해 8KAT만 남았다면, 투표종료시점 잔고인 8KAT만 계산 되는겁니다. 이와같은방법으로 한명의 사용자가 “이중투표” 를 하는문제를 확실히 해결 할 수 있습니다.

3. 기술적구현

3.1 클래스및시퀀스UML

그림 1 : 클래스 다이어그램

그림2 : 시퀀스 다이어그램(순서)
3.2 조정자가있는 스마트계약

조정자는 투표캠페인(투표)을 관리하고 개시합니다. 한번 온 체인 상태로 배치되면 이후 평생 이루어질 캠페인들을 계속 관리하게 됩니다.

3.3 투표스마트계약

투표(ballot)는 단일투표캠페인을 대표하는 스마트계약입니다. 조정자는 아래의 정보를 입력하여 투표 스마트계약을 배치합니다.

-MODERATOR: 조정자주소
-RATE: 10^비율(RATE)이 투표의 기본 단위가 됨
-CITS: 후보자 ID 목록
-START: 캠페인 시작의 블록 번호
-END: 캠페인 끝의 블록 번호
-CSID: CITS 내 후보자 색인

  • 투표란 후보자의 CSID를 투표계약서에 전송하여 한 후보자에게 가중치가 적용된 표를행사하는행위를일컫습니다. 부문 2에서 보셨듯이, 가중치는 현재 보유하고 있는 KATA 잔금만큼입니다.
  • 투표하기 위해서 사용자는 후보자의 CSID에서 WEI 금액을 계산하여 그 금액을 투표계약주소에 전송합니다.
    -계약에 전송할 금액=CSID X10^RATE WEI

SCID =3이 고 발롯 계약 주소는0xef75e34c50c1b109fe65ee696f12225de508b9f2이며, RATE =12인 후보자 X를 투표하고 싶다면 다음과 같은 절차를 밟습니다. 전송할 금액인 3 X ¹⁰¹² WEI = 0.000003 ETH을 계산합니다.
여기에서 주의해야 할 점은 위금액의 ETH는 후보자를 지목하는데만 사용되며 즉시 환불되는 금액이라는 점입니다. 사용자가 실제로 지급하는 비용은 일반적인 거래수수료만 포함합니다.

function() payable mustBeVoting {uint256 value = msg.value;
msg.sender.transfer(msg.value);
uint256 vote = value.div(RATE);
require(vote >= 0 && vote < CANDIDATE_IDENTITIES.length);
votes [msg.sender] = CANDIDATE_IDENTITIES [vote];
emit VoteFor(msg.sender, votes [msg.sender]);
상기 코드 중 msg.sender.transfer(msg.value)는 SCID를 계산하고 votes [msg.sender] = CANDIDATE_IDENTITIES [vote] 라인을 매핑하는데 쓰인 ETH 금액만큼 을 환불해주는 부분입니다.

매핑은 투표 주소를 기록하여, 한 캠페인 내에서는 고유한 주소로 기록되지만 다수의 캠페인에서 사용될 수 있도록 합니다.

투표를 바꾸는 경우, 사용자는 새로운 투표를 가지고 새로운 거래를 전송할 수 있으며 이는 동일 주소로 전송된 이 전투 표를 대체하게 됩니다.

사용자는 자신의 투표를 “취소”할 수도 있습니다. 간단한 방법부터알아보자면, 모든 KAT 시험 토큰을 아직 투표하지 않은 다른 주소로 전송하는 것입니다. 가중치가 0이 되므로 후보자에게 던진 표가 무효처리됩니다. 두 번째 방법은 SCID=0인 투표를 전송하는 것입니다.

기본적으로 시스템은 NULL 값의 후보자를 CIDS에 CID = 0x로 표시 해구 분하기 때문에, 0 ETH로 거래를 보내면 표를 취소할 수 있습니다.
하지만 경우에 따라 특별한 경우가 발생해 위 방법에 변동이 생길 수 있으므로, 필히 확인을 하고 진행해야 합니다.

‘mustBeVoting’ 플래 그는 캠페인이 열리거나 닫힌 것을 나타내며, 캠페인이닫힌후에진행되는 투표/투표 취소는 무시됩니다.
투표캠페인을 종료하려면 조정자 권한이 있는 사용자가 조정자 계약의 현재 블록 번호에 END 혹은 0 값을 설정해야 합니다.

4. 캄브리아투표 vs 카본투표

4.1 보안

카본 투표의 투표 캠페인에서 모든 후보자는 각기 하나의 계약입니다. 따라서, 10명의 후보자 캠페인을 운영하기 위해서는이더리움네트워크에 10개의 계약을 배치해야 합니다.

{투표(Ballot), 후보자(Candidate), 실세계 매핑(Real-World Mapping)}즉BCR란, 투표, 후보자 및 후보자의 매핑과 실세계 구성요소 간의 의미론적 관계를 의미합니다. 후보자가 코드 베이스 저장소에 매핑되는 것이 한가지예입니다.

온 체인 조정자가 부재한다는 말은즉CarbonVote에서BRC를 온 체인에 유지할 수 없다는 말과 같습니다. 후보자를 그룹으로 묶고, 후보자를 실세계 구성요소와 매핑하는 모든 과정은 오프 체인에 저장되어 공격에 취약 할 수밖에 없습니다.

캄브리아 투표는 BRC를 온 체인에 연결하여이 같은 문제를 해결합니다. 한 투표 캠페인 내의 후보자들은 공통의 발롯 계약 주소를 공유하게 됩니다. 이로써 BCR 중{투표와 후보자}를지킬수 있게 됩니다. {후보자와 실세계 매칭} 관계는 코드 베이스 저장소의 KDNA 해시를 CID로 사용함으로써 해결할 수 있습니다.

BCR에 외부 공격이 가해진다면 그 방식은 아래처럼 이루어질 것입니다:
1) {투표와 후보자} 간 관계를 손상시켜, 궁극적으로 블록체인을 공격하는 데 성공하거나,

2) {후보자와 실세계 매칭} 간 관계를 손상시켜 후보자의 KDNA를 암호화한 해시라고 위에서 정의한 CID를 뒤집거나, KDNA를 바꿔 결국 CID도 변경되는 방식으로 공격해 올 수 있습니다.
두 가지 공격 모두 일어날 가능성이 극히 드뭅니다.

4.2 가스(Gas)사용량

캄브리아투표의보안이강화되면비용도증가할까요?

지금까지 살펴 본 내용을 간단히 짚어볼까요? 카본투표는한명의 투표자 당 하나의 계약을 사용하지만, 캄브리아 투표는 하나의 투표 캠페인 당하나의
투표계약을이용합니다. 아래표는 카본투표와캄브리아 투표가 일반적으로
투표 캠페인을 운영할때 사용하는 가스량을 비교한것입니다.

[표1] 후보자가 5명일 때의 캠페인
[표2]후보자가 10명일 때의 캠페인
[표3] 후보자가 n명일 때의 캠페인

[표 3]에서, 카본 투표의 거래수수료는 O(n) 이므로 후보자의 수에 비례해 거래수수료가 선형적으로 증가하는 모습을 확인할 수 있습니다. 그에 반해 캄브리아 투표는 상수 O(1)을 유지합니다.
캠페인의 후보자 수가 적다면 카본 투표를 이용하는 비용이 더 저렴하겠지만, 장기적인 관점에서 볼 때에는 캄브리아 투표가 훨씬 경제적입니다.

4.3 투표취소하기

카본 투표에서 투표를 취소/무효 처리하려면 모든 ETH를 다른주소로이동해야 합니다. 사용자 가던진 표는 유지되지만, 다만 가중치가 0이 되어 무효표가 되는 것뿐입니다.
기술상 문제 될 부분은 없지 만 실 제로는 몇 가지 문제 가발 생할 수 있습니다. 큰 조직들은 보통 멀티 시 그 혹은 콜드 월렛을 사용합니다
. 최소 2명의 당사자가 여러 단계의 과정을 거쳐야 ETH를 이동할 수 있으며, 옮기는 과정에서 또 다른 계약이 수반되는 멀티 시그 월렛이 새로 만들어질 가능성도 있습니다.
이런 고로 투표 취소를 진행하는 경우, 섹션 4.2에 실린 비교표에 나왔듯이 21.000 이상의 비용이 무효화에 쓰일 것으로 추산됩니다.
때로는 카본 투표에서 표의 가중치를 0으로 만드는 방식이 더 효율적일 때가 있기에, 캄브리아 투표에서도 카본 투표의 무효화 방식을 지원합니다.
하지만 캄브리아 투표는 그에더해더욱경제적인 두 번째 방법을 제시합니다. 바로 0 값으로 색인된 무효 후보자(ox)에투표를하는 것입니다.
30.106 가스만큼 의 비용만 지불하면 된다 고추 정 되므로, 표를 무효화하는데 더욱 효과적인 방식이라고 생각합니다.

5. 향후과제

5.1 프라이버시

투표를 하며 자신의 주소가 확인되지 않기를 바라는 투표자도 있다는 사실을 알고 있습니다. 캄브리아 투표에서 프라이버시 침해가 일어나지 않도록 2가지 방안을 생각해냈습니다.
방안 A는 차등 프라이버시(Differential Privacy)를사용하는것입니다. 투표 메커니즘을 2단계로 만들 수 있겠습니다.

-1단계:동전을 던집니다. 앞면이 나오면, 올바르게 투표합니다(정직한 투표로 정의됨). 뒷면이 나오면, 올바르게 투표하거나 제대로 투표하지 않는 것 중하 나를 선택합니다(거짓 투표로 정의됨).

-2단계: 1단계를 반복합니다. 동전의 앞면 혹은 뒷면이나 올 확률은 50%입니다. 앞면이 나온 경우, 정직한 투표일 확률은 100%이고 거짓 투표일 확률은 0%입니다. 뒷면이 나온 경우, 정직 한투 표 일확률도 50%이고 거짓 투표일
확률도 50%인 베르누이(0.5) 분포입니다.

즉, 정직한 투표= 0.5 * 1 + 0.5 * 0.5 = 0.75
거짓 투표= 0.5 * 0 + 0.5 * 0.5 = 0.25

후보자가 2명인 투표 캠페인에서 C1후보자가 100표를 얻었고 C2 후보자가 160표를 얻었다고 가정합시다. C1 그리고 C2 후보자의 최종 득표수를 어떻게 계산할까요? x, y를 각각 C1 그리고 C2의 최종 득표라고 합시다.
앞서 계산한 분포에 따르면 C1이 얻은 100표 중 0.75는 정직한 투표이고 0.25는 거짓 투표입니다. C2가 얻은 160 표 안의 비율 도마찬 가지입니다.
즉, C1에 대한 정직한 투표= 0.75 * 100

C1에 대한 거짓 투표= 0.25 * 100

C2에 대한 정직한 투표= 0.75 * 160

C2에 대한 거짓 투표= 0.25 * 160

그러므로,

x = 0.75 * 100 + 0.25 * 160 = 115

y = 0.75 * 160 + 0.25 * 100 = 145

따라서 우리는 C2 후보자가 최종적으로 145표를 얻고 C1이 115표를 얻어, C2가 승리했음을 알 수 있습니다. 방안 A를 사용하면 이용자 가투표했다는 사실 자체는 알 수 있지만, 후보자 중 누구에게 표를 주었는지는 베일에 쌓여있기 때문에 익명성이 보장됩니다.

방안 B는 조금 더 복잡합니다. 바로 zkSNARKs를 활용한 투표시스템을 구현하는 것입니다. zkSNARKs는 다음과 같은 요구사항을 충족시키기 위한 프로토콜입니다:증명자 P는 검정자 V에게, 문제 상황 R을 풀 수 있는 솔션 S를 알고 있다는 사실을 증명할 수 있어야 합니다.
이과정에서 S의 내용 및 V가 S의 내용을 알아내는데 도움이 될 수 있는 정보 등은 노출되지 않습니다.

캄브리아 투표에서 우리는 투표자들의 비밀투표를 보장하며, 후보자 이외의 다른 사람이 누가 누구를 투표했는지 알 수 없도록 합니다. 우리는 후보자에게 정확한 득표수와 누가 투표를 했는지 보여줍니다.

한 후보자가 P일 때, 그를 제외한 다른 모든 후보자들이 V가 되는 겁니다.
P는 V에게 자신의 지지자들을 뺏기는 걸 원치 않기 때문에 자신에게 투표를 한 투표자의 신원을 보호할 명확한 이유를 가지고 있습니다.
모든 후보자는 투표 체계에서 P 혹은 V와 같은 행동을 취하게 될 것입니다. 투표 및 검정 절차가가 끝나면, 모든 V는 암호화 절차를 거쳐 검정된 투표 결과를 알게 되지만 투표자의 신원은 알 수 없습니다.

Phan Sơn Tự, 캄브리아 소속 블록체인 엔지니어
Tingxi Tan, 캄브리아 공동창업자

웹 사이트 : https://kambria.io/
백서 (ENG) : https://docsend.com/view/a7mz9r6
텔레그램 (ENG) : https://t.me/kambriaofficial
텔레그램 (Offcial): https://t.me/kambriaofficial
텔레그램 (KR) : https : / /t.me/KambriaKorea
텔레그램 (VIE) : https://t.me/KambriaVietnam
텔레그램 공지 채널 : https://t.me/kambria
트위터 : https://twitter.com/KambriaNetwork
페이스북 : https : // facebook.com/KambriaNetwork
레딧 : https://www.reddit.com/r/KambriaOfficial/
이메일 : info@kambria.io

Join Kambria Newsletter

Author

Kambria Korea

Write A Comment