Solidity - 스마트컨트랙트로 투표 해보기 1편
주변에서 접하는 뉴스를 보면 암호화폐로 투표할 수 있다는 광고를 보게됩니다.
투표에 사용하려면 남녀노소 이해하기 쉬워야 하는데 쉽게 구현이 가능한 일일까요.
선거일이 다가오는데 투표할 수 있는 스마트계약을 만들어 보았습니다.
https://ropsten.etherscan.io/address/0x6443e0136b122f2307db969d1adc939d3b14a57f#code
우선 가상의 후보 두명을 선출합니다.
setCandidate(0,"Kim","Keep The Rule!");
setCandidate(1,"Lee","Be Free!");
Ms.Kim 은 규칙을 중요시 하는 후보이고 , Mr.Lee 는 자유를 선호하는 후보입니다.
for (uint i=0; i< 50; i++) {
uint8 randomNumber = random(i);
if(randomNumber > 0){
setVote(1, 1000 + i);
}else
{
setVote(0, 1000 + i);
}
}
랜덤함수로 가상의 50표를 투표하고 시각화해 보았습니다.
https://www.dunkpay.com/vote-test/
랜덤함수를 사용했더니 골고루 표를 받은 것을 확인 할 수 있습니다.
생각해보니 두 후보를 마음에 들어하지 않는 기권표가 있을 수 있겠네요.
setCandidate(2,"N/A","I HATE DHEM.");
스마트컨트랙트를 실행하여 추가합니다.
잘 작동하는지 이제 투표권을 행사해 보려고 합니다.
하단의 버튼을 누르면 계약이 실행됩니다.
setVote(2, 1111);
https://ropsten.etherscan.io/tx/0x509fff804b98a6db51af9709aeba1b4eb0fcf676a62c04d019deb6af80a912a1
투표계약을 실행하니 얼마 후 50번째 칸에 무효표가 정상적으로 반영된 것을 확인 할 수 있습니다.
어서 빨리 실전에 도입되어서 공약을 안지키는 후보들을 실시간으로 계약파기 할 수 있었으면 좋겠습니다 ㅋㅋ
대통령선거에도 쓸 수 있을까요? 불행히도 솔리디티는 컨트랙트 주소당 2기가 미만의 업로드만 허용하고 있습니다. (개선의 여지는 있습니다.)
이번 예제에서는 중복투표를 허용했고 투표자의 정보가 모두에게 공개되어 미완성의 투표계약 인 것 같습니다.
언제나 그랬듯이 다음 시간에 문제점을 개선해 보겠습니다 ~
투표 참여해보기 :