brunch

You can make anything
by writing

C.S.Lewis

by SKKRYPTO Nov 29. 2019

[Skkrypto X Luniverse] Skkvote

안녕하세요 Skkrypto Skkvote팀의 정선웅입니다. 오늘은 기존에 만들어 두었던 smart contract를 이용해 transaction을 생성해보도록 하겠습니다.

Smart contract의 특징은 

1.     중복투표를 못하게 한다.

2.     투표 결과를 보여줄 수 있다

입니다. 중복투표를 막기 위해 한 주소로 투표를 하게 되면 그 주소로는 다른 투표를 하지 못하게 막았고 totalVotesFor 이라는 함수를 통해 투표 결과를 볼 수 있게 하였습니다.



우선 Dapp정보에서 transaction management에 들어가서 transaction을 생성하였습니다. 

contract에서 필요한 두 가지 함수를 불러왔는데요, 직접적으로 투표를 진행하는 ‘voteForCandidate’와 ‘totalVoteFor’을 등록하였습니다. Action Name은 이 함수를 API를 통해 호출을 할 때 필요한 키워드입니다. 옆에 API 부분을 펼쳐보겠습니다






내용을 자세히 보면 input으로 candidate 파라미터를 보내게 되어있습니다. 이것을 통해 버튼에 함수를 따로 지정하여 1번 후보를 클릭했을 때는 파라미터로 0을 보내고 2번 후보를 클릭했을 때는 파라미터로 1을 보내고(파라미터로 보내는 숫자는 굳이 0,1 로 설정 안 해도 괜찮습니다). Voting action은 블록에 투표를 하는 것을 기록하는 것이고 Result action은 투표 결과를 return하는 것을 보여줍니다. 



루니버스에서 제공하는 API docs에 Transaction에 관한 정보가 자세히 나와있습니다. (apidocs.luniverse.io) 저는 REOA를 사용하는 형태이기 때문에 관련된 부분을 참고하였습니다.



POST https://api.luniverse.io/tx/v1.1/transactions/setValue

위와 같이 URL을 부분에 보시면 ‘setValue’부분에 위에서 설정하였던 voting과 result를 넣어주면 됩니다.



 Voting.js 파일중에 후보를 투표할 때 쓰이는 함수입니다. URL부분을 보시면 transactions /voting으로 설정한 것을 확인하실 수 있고 첫번째 후보를 투표하는 것이기 때문입니다. 

주소 같은 경우는 원래 구현으로는 앞에서 생성한 주소를 받아올 수 있지만 test를 위해 console상에서 생성한 주소를 입력해 놓았습니다. 

input값으로는 0번을 넣어 기록되도록 하였습니다. 물론 두번째 버튼은 1번을 input값으로 넘겨주게 하였습니다.




 다음으로 결과에 관한 함수입니다. URL을 보시면 transactions/Result를 넣은 것을 확인할 수 있습니다.

0번 candidate에 관한 결과를 보는 것이기 때문에 inputs값으로 0을 넣었습니다.

그럼 이 함수를 활용하여 실제 웹상에서 실행을 해 보겠습니다



저는 차은우 후배님께 투표를 해보았습니다. 투표를 하면 성공적으로 data가 전송이 된 것을 확인할 수 있는데요 크롬의 기능 중 하나인 검사를 활용하여 이를 확인할 수 있습니다.


그리고 투표 결과보기를 눌러보면 투표가 정상적으로 진행된 것을 확인할 수 있습니다. 원래는 result가 0이여야 하는데 1로 올라간 것을 확인할 수 있죠


단순히 투표만을 하는 것이 아니라 중복투표를 막는 것 또한 중요하기 때문에 밑에 스윙스 선배님께 투표를 한번 해보겠습니다.


투표를 하면 된 것처럼 보이지만 Result 부분을 보면 결과값이 여전히 0인 것을 확인할 수 있습니다. 한 지갑주소로 한명에게만, 한번만 투표가 가능한 것을 확인할 수 있습니다

또한 이 트랜잭션들은 console상에서 확인을 할 수 있는데요 트랜잭션이 발생할 때 마다 블록에 기록이 정확히 되고 있는 것을 확인할 수 있습니다. 화면상에 여러 트랜잭션들이 있는 것은 제가 테스트를 하느라 여러 개가 기록된 것입니다. 


이번주까지 투표의 대략적인 부분을 완성하였습니다. 다음주에는 개발의 마지막 부분으로 투표시에 token이 transfer 되는 부분을 구현해 보도록 하겠습니다


“위 글은 람다 256 루니버스의 Dev Plan을 무료로 제공받아 작성하였습니다”


작성자: 정선웅(wpdlsksh94@gmail.com)


매거진의 이전글 [Skkrypto X Luniverse] Skkvote
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari