블록체인으로 정치를 재밌게 바꿔보자
정치가 삶에 미치는 영향은 매우 큽니다. 정치는 헌법을 기반으로 한 정치체제를 바꿀 수도 있고, 가까이는 동네의 택배 사업에도, 기내 서비스 품질에도 영향을 끼칠 수도 있습니다. 민주주의 국가의 시민으로 가장 간단히 정치에 참여할 수 있는 방법은 ‘투표’입니다. 하지만 그 중요성과 참여의 편의성에도 불구하고 많은 사람들은 투표를 포기하곤 합니다.
어제의 일이 너무 과중해서 일수도, 겨우 생긴 휴일을 알차게 쓰고 싶어서 일지도 모릅니다. 역설적이게도, 그렇기 때문에 투표를 해야 합니다. 각박한 삶의 책임을 정치인에게 물을 수 있는 좋은 기회이기 때문입니다. 내 한 표는 전체 표에 비하면 정말 작은 한 표일 뿐이고, 그 한 표가 선거 결과를 뒤집는다는 건 말도 안 되는 일입니다. 어찌 보면 투표 자체가 비이성적인 행위일 뿐일지 모릅니다.
만약 이런 비이성적인 활동에 작은 재미를 심어주면 어떨까요. 후보들에게 베팅을 하고 결과에 따라 수익이 생긴다면 훨씬 재밌지 않을까요? 로또 한 장을 쥐고 일주일을 버티는 소시민 중 하나로써, 이번 지방선거에 그런 기대감을 품을 수 있다면, 덩달아 투표할 마음도 생길 것 같았습니다. 그리고 이렇게 이끌어낸 작은 참여들이 사회를 긍정적으로 바꾸어 가리라 생각했습니다.이런 생각에서 나온 서비스가 CryptoDemocracy 입니다.
CryptoDemocracy 는 Cryptocurrency(암호화폐) 와 Democracy(민주주의)의 합성어로, 2018년 지방선거의 서울 시장 후보 세 분에게 이더리움을 베팅하고 선거 결과에 따라 수익을 얻을 수 있는 서비스입니다. 선거 결과에 따라 패배한 쪽에 베팅된 이더리움이 승자에게 분배됩니다. 베팅 금액에 제한은 없으며, 여러 후보에게 베팅을 할 수도 있습니다. 재미를 높이기 위해 베팅에 빨리 참여할수록 베팅금액 대비 수익률을 높아지도록 설정했으므로, 베팅을 서두르는 것이 좋습니다. 자세한 내용은 백서를 참조해주세요.
누구나 메타마스크(메타마스크 설치)를 이용해서 간단히 베팅에 참여할 수 있습니다. 각 후보 아래 입력창에 베팅 금액을 입력한 뒤, 베팅하기를 버튼을 눌러 메타마스크 결제를 마무리하면 참여가 완료됩니다. 서울 시장이 결정되는 날 선거 결과가 입력되며, 이 날 모든 베팅액과 상금이 분배됩니다. 아쉽게도, 이 서비스는 실정법 위반의 가능성이 매우 높으므로, 이더리움 메인넷에서 동작하지는 않습니다. (도박장 개설죄는 5년 이하의 징역 또는 3천만원 이하의 벌금..!) 이더리움 Rinkeby 네트워크를 이용하면 얼마든지 베팅을 할 수 있으니, 많이 즐겨주시면 좋겠습니다.
이 서비스는 Solidity 와 Web3js 를 이용해 만들어졌습니다. React와 Drizzle을 이용해보려고 시도했으나, 레퍼런스의 부재로 1주일을 날리고 다시 바닐라 js 로 작업을 진행했습니다. Truffle, Ganache, Remix 등의 툴을 이용해 개발을 진행하는 동안 수많은 난관들을 만났습니다. (도움이 되었던 서비스와 Gitter 챗방은 아래에 기록했습니다. ) 무엇보다 레퍼런스의 부족함과, 디버깅의 불편함이 제일 큰 문제로 다가왔습니다. 레퍼런스의 부족은 스택오버플로우와 Gitter, 카카오 오픈 채팅방에서 도움을 많이 받았습니다. Remix가 아닌 Truffle 을 사용할 때는 모든 function 에 이벤트를 구현해 사용하는 모든 변수를 트래킹해야 했습니다.( 더 나은 방법이 있다면 알려주세요. ) 또한 업데이트가 빠르게 진행되고 있는 언어이다 보니, Solidity 버전별로 문법이 다른 때가 있어서 삽질을 몇 차례 했던 것 같습니다. 긍정적으로 본다면 아직 발전 여지가 많은 언어이고, 앞으로도 무궁무진한 가능성을 품고 있습니다고 생각합니다. 앞으로도 이 블로그(@bitcoin)를 통해 관련한 소식들을 공유하겠습니다.
블록체인의 기반 기술은 데이터의 불변성에 있습니다. 그렇게 보면, 블록체인은 손바닥 뒤집듯 말을 뒤집는 정치인에게 꼭 필요한 시스템이라고 할 수 있습니다. 다만 CryptoDemocracy 는 블록체인의 진짜 가치보다는, 화폐의 가상화에 초점이 맞춰져 있습니다. 블록체인과 정치가 결합한 모습이 더 궁금한 분들께 읽을거리 하나를 추천합니다. liquid democracy 라는 프로젝트입니다. 정치에 참여하기 어려운 개인들이 의견에 맞는 사람을 대변인으로 설정하고, 정치에 간접적으로 참여할 수 있는 프로젝트입니다. 중요한 점은 이렇게 설정된 대변인의 지위가 언제든 (4년을 기다릴 필요 없이) 사라질 수 있다는 점입니다. EOS 의 DPOS 와 비슷한 개념이라고 볼 수 있습니다.
블록체인은 아직 비트코인의 그림자에 가려져 있습니다. 하지만, 점차 많은 사람들이 블록체인의 가능성을 보고 이 분야로 뛰어들고 있습니다. 저 또한 이를 계속 공부하고 기회들을 찾고 있습니다. 앞으로도 블록체인 기술과 변하는 산업에 대한 글을 이 블로그(@bitcoin)를 통해 공유하겠습니다. 읽어주셔서 감사합니다.
사용한 기술, 툴 : Remix, Solidity, Web3js, Ganache, npm, webpack, Github pages
기반 프로젝트 : Truffle webpack demo, ConsenSys
서비스 색(Color Scheme) 에 도움받은 서비스 : klart.io
페이지 디자인 레퍼런스 : pages
정치와 블록체인 : liquid democracy
Gitter 이더리움 web3js 챗 : https://gitter.im/ethereum/web3.js
Gitter Truffle 챗 : https://gitter.im/ConsenSys/truffle
다음 글에서는 개발과정에서 겪은 이슈들을 정리해보겠습니다.
- Metamask 와 Ganache 사용시 발생하는 Nounce match 이슈
- Web3js 와 Event 를 이용한 solidity 디버깅
- Solidity Address checksum
- keccak256 : 해시를 이용한 String 비교
- 기본적인 Solidity 와 Web3js 의 동작
- Solidity 에서 소수점을 표현하는 방법(같은건 없다)
- 배포된 Contract 를 ABI 로 연결하기
Writer : WK LEE (@bitcoin)