Solidity - 스마트컨트랙트로 투표 해보기 1편

in #dunkpay6 years ago (edited)

주변에서 접하는 뉴스를 보면 암호화폐로 투표할 수 있다는 광고를 보게됩니다.

투표에 사용하려면 남녀노소 이해하기 쉬워야 하는데 쉽게 구현이 가능한 일일까요.

선거일이 다가오는데 투표할 수 있는 스마트계약을 만들어 보았습니다.

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표를 투표하고 시각화해 보았습니다.

Screen Shot 2018-06-09 at 8.56.22 PM.png

https://www.dunkpay.com/vote-test/

랜덤함수를 사용했더니 골고루 표를 받은 것을 확인 할 수 있습니다.

생각해보니 두 후보를 마음에 들어하지 않는 기권표가 있을 수 있겠네요.

        setCandidate(2,"N/A","I HATE DHEM.");


스마트컨트랙트를 실행하여 추가합니다.

잘 작동하는지 이제 투표권을 행사해 보려고 합니다.

Screen Shot 2018-06-09 at 9.47.46 PM.png

하단의 버튼을 누르면 계약이 실행됩니다.

        setVote(2, 1111); 

Screen Shot 2018-06-09 at 9.11.32 PM.png

https://ropsten.etherscan.io/tx/0x509fff804b98a6db51af9709aeba1b4eb0fcf676a62c04d019deb6af80a912a1

투표계약을 실행하니 얼마 후 50번째 칸에 무효표가 정상적으로 반영된 것을 확인 할 수 있습니다.

어서 빨리 실전에 도입되어서 공약을 안지키는 후보들을 실시간으로 계약파기 할 수 있었으면 좋겠습니다 ㅋㅋ

대통령선거에도 쓸 수 있을까요? 불행히도 솔리디티는 컨트랙트 주소당 2기가 미만의 업로드만 허용하고 있습니다. (개선의 여지는 있습니다.)

이번 예제에서는 중복투표를 허용했고 투표자의 정보가 모두에게 공개되어 미완성의 투표계약 인 것 같습니다.

언제나 그랬듯이 다음 시간에 문제점을 개선해 보겠습니다 ~

투표 참여해보기 :

https://wwwdunkpay.com/vote-test/