Monthly Archives: June 2018

새로 발견한 멋진 개발 툴들

개발자에게 가장 중요한 도구가 있다면 에디터이다. 코드를 쓰는 도구다. 문서작업하는 사람들에게 워드나 엑셀이 필요하다면 개발자는 에디터가 있어야 한다. 물론 노트패드로도 된다. 그렇다고 노트패드로 문서 만드는 사람은 없지 않겠는가?

간만에 개발을 본격 해보려고 하는데 에디터를 한번 바꿔 보고 싶었다. 그동안 좋은게 나왔겠지 생각했다. 인터넷을 찾아보니 너도 나도 Sublime Text라는 것을 권한다. 받아서 사용해 보았다. 처음에는 뭐 그냥 그러려니 했다. 이틀을 사용해보고 바로 유료결제를 했다. 특별히 기능제약이 있는것 같지는 않은데 결제 메시지가 뜨길래 바로 했다. $80이다. 세상에 뭐 이렇게 잘 만든 프로그램이 다 있나. 싶다. 에디터가 개발 시간을 단축해준다고 생각하지 않았는데 이건 좀 다른 차원의 프로그램이다. 지금 기능의 1% 정도를 사용하고 있는것 같다. 그런데도 놀랍다. 우주인이 만든 것이 틀림없다.

안드로이드 개발자라면 거의 다 사용하겠지만 나같이 올드한 사람들을 위해서 소개해 본다. 일찌기 안드로이드 개발을 시작한 사람은 이클립스를 썼다. 당시는 이 프로그램이 없었으니 당연하다. 개발툴이라는 것이 한번 시작하면 옮겨가기 쉽지 않다. 뭐… 귀찮아서 그렇다.

그런데 빨리 옮기시라. 그냥 무조건 옮기시라. 비주얼스튜디오 없이 윈도우앱 만들수 없듯이 안드로이드 스튜디오 없이 안드로이드 앱을 만드는 것은 바보 짓이다.

웹사이트를 만드는 CMS는 정말 종류가 많다. 그중 1등은 워드프레스다. 이번에 좀 심각하게 한번 써봤다. 역시 잘 나가는 건 이유가 있다. 만드는 것도 쉽지만 관리가 정말 쉽다. 특히 모든 저작에 대해서 리비전 관리를 자동으로 해준다. VCS가 탑재되어 있다. 엄청나게 많은 플러그인이니 뭐니 이런 장점은 이야기 하지 않겠다. 다만, 이걸로 만들다 보면 사이트가 참 무거워 진다. 뭔가 날렵한것이 필요할떄는 다른것을 찾아봐야 하겠다. bootstrap을 심각히 고민해 보고 있다.

마지막으로 chrome://inspect/#devices. 크롬에 탑재된 웹 디버거이다. 데스크탑 웹 개발하는 사람들이야 이미 많이 사용하겠지만… 이것이 안드로이앱에 들어가 있는 웹뷰도 디버깅 해준다. 이것이 없었다면 Smallet 개발을 포기했을지도 모른다. 웹뷰를 쓴다면 이것은 구세주다.

Smallet – early, early alpha release

연식이 좀 되는지라 웹 개발에는 별 경험도 지식도 없다. 15년전에 닷넷으로 웹사이트 만들어 본것이 전부다. 그동안 세상은 변해서 웹 어플리케이션도 많은 진화를 했다. 수많은 개발 프레임웍이 있어서 어떤것을 써야 할지 알기도 어렵다. 프레임웍이라는 것이 다들 자기가 최고라고 하니 말이다.

Smallet은 가상화폐 지갑이 기반인데 모바일에 최적화 되도록 만드는 것이 목표다. 그래서 Small+Wallet=Smallet이다.

블록체인 세계는 C++과 javascript두가지가 주축이다. 블록체인 자체는 C++로 개발되고 인터페이스를 담당하는 프론트는 거의 javascript이다. 거의 모든 코드가 javascript기반으로 되어 있다. 간간히 JAVA 포팅이 보이기는 하지만 포팅이다. 즉 javascript로 먼저 작성되고 다른 플렛폼으로 옮겨 간다.

javascript는 내가 싫어하는 언어이다. 가독성이 떨어지고 지나치게 이벤트 중심이고 모든것이 async다. 네트웍 환경을 중요시하는 요즘의 개발 환경을 반영한 결과이겠지만 여전히 눈에 잘 안들어온다.

이글은 지난 한달간 Smallet 프로토타입을 개발하는 동안의 삽질 기록이다.

개발에 들어가기 전에 이번 만큼 많은 생각을 했던 경우는 없었다. 내 경우는 프로그램을 만들어 가면서 고민을 한다. 이번에는 그것이 불가능하였다. 환경이 달라도 너무 다르고 정리된 것이 거의 없다. 구글신 조차 엉뚱한 답변을 하는 경우가 허다하다. 스택 오버플로우에 검색해서 들어 갔는데 질문도 답변도 좋아요가 0인 경우가 허다하다.

통상 내실력으로 뭔가 몰라서 스택오버플로우를 찾아보면 좋아요 몇백개씩 있는것들이 나오기 마련이다. 그런데 블록체인 관련 프로그래밍 질문은 답도 거의 없지만 같은 질문을 하는 사람들 뿐이다.

있는 것은 정리된 설명이 아니라 소스코드다. 이게 맞는지 안 맞는지 알 수 없는 코드들. github에 버려진 수많은 프로젝트들.

만들고자 하는 것은 간단한데 시작을 할 수가 없다. 첫번째 고리를 끼우기가 어렵다.

결국 아무것도 없다는 것을 알았다. 수많은 코드들을 받아서 실행하고 분석하고 그것만이 방법이다. 그래도 리눅스 개발환경이 너무 좋아져서 그것이 많은 위로가 되었다. 뭐든 빨리 설치되고 충돌없이 잘된다. 예전에는 뭐든 설치가 안돼서 하지를 못했다. 설치 기술에 많은 진보가 있었고 이제는 정말 잘된다. 다행이다.

블록체인은 이제 시작단계이다. 너도나도 블록체인을 만든다. 소스코드가 다 있고 동작원리자체가 복잡하지도 않고 결과물도 소스크기도 그리 크지 않다. OS로 하자면 DOS정도 된다. 지금의 윈도우나 리눅스 같은걸 새로 만들겠다는 사람은 있기 어렵지만 DOS 수준이면 너도나도 하고 싶을 만 하다.

지갑을 만들려고 하는 사람에게는 이게 문제다. 수천개의 코인을 어떻게 관리하나. 저마다 일단 이름이 다르고 네트웍이 다르다. 그들의 지갑주소를 생성하는 것 조차 엄청난 노가다이다. 다 비슷한 알고리즘으로 생성하면서 같지는 않다. 표준화는 아직 멀고도 멀다.

그래도 인터넷에는 많은 훌륭한 개발자들이 있고 정리가 시작되었다. BIP39 마스터시드 알고리즘이 코딩을 시작할 수 있는 한줄기 빛을 보여 주었다. 모든 코인을 하나의 마스터시드로 관리한다. 수천 수만개의 주소를 단 12단어로 다 생성한다. 더 좋은 것은 항상 같이 생성된다. deterministic 하다는 이야기다. 핸드폰을 분실해도 이 12 단어만 있으면 모조리 복구할수 있다. 수백개의 코인과 수천개의 주소 모두를 말이다. 훌륭하다. 여기에 BIP32를 결합하면 hierarchical 하게 만들 수 있다. 즉 거의 모든 코인의 주소를 생성할 수 있게 된다.

기초가 세워졌으니 코딩을 해야 하는데 문제는 javascript다. 안드로이드는 javascript하고 안친하다. 기계마다 다른 시스템에서 제공하는 웹뷰가 거의 유일한 javascript엔진이다. 웹뷰는 기계마다 달라서 웹을 기반으로 뭔가를 만들면 늘 불안하다. 그래도 일단은 방법이 없다. 모든 코드 기반이 javascript인데 어찌하겠가? JAVA로 열심히 포팅해봐야 하루에도 몇번씩 commit되는 프로젝트들을 따라갈 방법이 없다.

좀 어글리 하지만 웹뷰로 가고 다음은 node든 뭐든 옮겨 가면 되겠다 판단한다.

최근 안드로이드 버전들은 웹뷰도 따로 구글이 열심히 업데이트 해주니 웹뷰도 장차는 쓸만할 것이다. 물론 실제 릴리스를 해보기전에는 장담하기 어렵다. 과감히 옛날 안드로이드 버전은 다 버린다. API 23정도 부터 가는 것으로 정한다. 이 버전 아랫쪽은 javascript는 안하는 것이 좋다는 판단이다.

지갑의 핵심이자 털리면 절대 안되는 키 저장소를 분리해야 한다. 키를 생성하는 코드는 사용자의 키를 훔칠수 있는 곳이다. 훔치는 주체는 개발자 자신과 외부의 공격이다. 두가지를 다 막아야 한다.

개발자 자신으로 부터 막는 방법은 오픈소스로 하고 코드를 최대한 단순화 하여 누구나 검사 할 수 있도록 한다. 외부로부터의 공격을 막으려면 네트웍을 사용하면 안된다. 안드로이드에서 no permission 모듈을 만들어서 해결한다.

일견 당연해 보이는 이러한 구조로된 지갑은 아무리 찾아 봐도 없다. 본시 뭘 새로 만들기 보다 베끼기를 좋아하는 터라 열심히 찾았다 그런데 정말 없다….???? 이상하다. 모든 지갑들이 하나의 앱으로 되어있고 당연히 인터넷에 연결한다. 도대체 어떻게 해킹을 막는거지? 다들 참 머리가 좋다. 나는 그렇게 못한다. 그냥 다 틀어막고 본다.

키 저장소를 만들었는데 지갑모듈과 통신이 문제다. 이건 좀 경험이 있는데 안드로이드가 이것도 제대로 지원이 안된다. 더 정확히는 이런 기능을 쓰는 사람이 없어서 좋은 예제가 없다. startActivityForResult로 부터 broadcastReceiver 다 해봤다. 예전에도 해봤었는데 잘 안됐는데 역시 잘안된다. activity는 UI에 맞춰진 요소라 통신에 당연히 안좋다. breadcastReceiver는 모듈간 통신이라기 보다 시스템 와이드 방송용이다. 그래서 느리다. 예전에 안해봤던 startService를 사용했다. 오! 생각보다 잘된다.

앱간 통신에 대한 보안은 android custom permission으로 해결한다. 같은 사인으로 배포된 앱 끼리만 통신할 수 있게 할 수 있다.

키저장소는 지갑으로 부터 오는 단 두가지 요청만 전달하면 된다. public key를 전해주는 것과 전문에 사인을 해주는 것이다. public key 그냥 퍼블릭 한것이니 대충 주면된다. 문제는 사인이다. 즉 사인이 안된 전문을 받아서 private key로 사인해서 돌려주면 된다. 키 저장소와 지갑 둘다 서비스를 만들고 서비스 끼리 startService로 통신한다.

지갑은 결제를 담당하는 곳이다. 외부로 부터 결제요청을 받아서 처리해주는 것이 핵심이다. 현재의 모든 모바일 지갑들은 QR코드를 읽은 것이 유일한 편리성이다. 그게 아니면 지갑주소를 복사해서 붙이기를 한다. 참 불편하다. 주소까지는 뭐 이렇게 가져오는데 보내야 하는 금액은 직접 입력해야 한다. 정말 불편하다.

데스크탑에는 Metamask라는 지갑이 있다. 크롬이나 파이어폭스 플러그인이라 웹사이트에서 결제요청을 하면 받아서 바로 결제 버튼만 누르면 끝이다. 당연히 이렇게 되어야 한다. 모바일에서는 앱간 통신이니 표준이 있어야 하지만 뭐… 아직 DOS 시절인데 이런게 있을리가 없다. Metamask를 시뮬레이션 하는 것이 유일한 방법이다.

javascript 해킹이 필요하다. 웹사이트들이 Metamask와 어떻게 통신하는지 보면 될 것이다. 들여다 보니 통신을 하는 것이 아니라 아예 웹사이트에다 코드를 삽입해 주고 그걸 call하는 방식이다. 음… 뭔가 많이 무식하다. 많은 개선이 되어야 하겠다. 무척 위험해 보인다. 다른 플러그인을 슬쩍 끼워넣고 금액과 받는 주소를 간단히 바꿀수 있겠다. 물론 귀찮아서 안해봤지만 하나도 안 어려워 보인다. 물론 사용자가 똑똑해서 주소가 바뀐것을 눈치채면 모르겠지만 그 복잡한 주소를 어떻게 구분하겠는가?

아무튼 웹뷰에 Metamask를 지원하는 웹사이트를 뛰우고 같은 방식으로 코드를 밀어넣고 해보니 잘된다. 웹에서 요청하면 지갑 앱이 받아서 처리해주면 끝이다. 웹뷰이니 다른 공격자가 뭘 끼워 넣기도 많이 어렵다. 이게 더 보안에 효과적이다.

마지막으로 One-click payment. 웹사이트에 링크를 넣어두고 클릭하면 앱이 받아서 처리해주는 것이다. 뭐 이건 모바일에서는 표준이나 다름없다. 그냥 껌으로 되는 것이다. 다른 앱들도 하는지 모르겠는데 수십개 앱을 봤으나 이부분에 대한 설명이 있는 것을 보지 못했다.

이제 모든 지갑을 통솔하는 ICMP(Integrated Cryptocurrenty Management Platform)를 만들어야 한다. 이건 단순노가다 이므로 그냥 열심히 하면 되겠다. 노가다 꾼들이 많이 필요하겠다.

미국 SEC의 증권과 가상화폐에 관한 중대한 판단

기사

SEC announces cryptocurrency ether is not a security

번역

비트 코인과 Ether는 유가증권입니까? 마침내, SEC가 암호화폐에서 가장 큰 질문과 논쟁 중 하나에 대하여 답변을 내 놓았습니다.

지난 목요일 샌프란시스코에서 개최 된 야후 파이낸셜의 암호화폐 시장 회의에서 윌리엄 힌먼 (William Hinman) 미국 증권 거래위원회 (US Securities and Exchange Commission) 이사는 Ether 또는 비트 코인을 유가 증권으로 분류하지 않을 것이라고 밝혔다.

위원회의 정책은 제이 클레이튼 (Jay Clayton) SEC 위원장이 최근 비트 코인에 대해 언급 한 내용과 일치한다: 암호화폐는 증권이 아니며 “유가증권”의 정의에 비트 코인을 포함하지 않을 것이다. (클리이튼은 디지털 토큰은 유가 증권 이었지만 암호화폐는 그렇지 않다고 말했다.) SEC의 공식 입장은 “이름은 중요하지 않다. 암호화폐가 어떻게 판매되고 유통되며, 어떤 약속을 하는지가 핵심 결정 요인이다.” 라는 것이다.

Hinman은 SEC가 cryptocurrency 및 디지털 자산 규칙을 변경하지는 않을 것이지만 이러한 원칙을 적용 할 것이라고 말했습니다. 이전에는 비트 코인과 Ether가 증권 거래소 (SEC)에 등록해야했던 증권 (회사 주식과 같은)으로 취급 될 수도 있었지만, 이번에 금과 석유와 마찬가지로 상품으로 취급하는 것에 합의한 것이다.

“유가 증권으로 판매된 디지털 자산이 나중에는 증권 이외의 다른 형태로으로 팔릴 수 있습니까?”는 질문에 대하여 그는, “판매한 회사가 더이상 해당 디지털 자산에 관련이 없다면 그렇다라고 생각한다”라고 말했다.

Hinman은 SEC의 생각에서 “형태보다 실체가 중요하다”고 말했다. 그는 현실에서는 그것이 무엇이라고 불리는가 보다 실체가 무엇인지가 중요하다고 말했다.

cryptocurrency 네트워크가 충분히 분산되어 있고 구매자가 더 이상 제 3 자로부터 관리 책임을 기대하지 않는다면, 코인은 유가증권이 되지 못한다고 Hinman은 덧붙였다.

마찬가지로, 주식투자 형태를 “동전”또는 “토큰”으로 표시한다고해서 증권이 되지 않는 것은 아니다 라고 Hinman은 덧붙였다.

CFTC (Commodity and Futures Trading Commission) 관계자는 오랫동안 SEC에 Ether의 포지션을 명확히 할 것을 촉구했으며 두 기관은 통화가 처음 발행되는 조건에 대해 논의 해왔다. CFTC는 작년에 세곳의 거래소에서 비트 코인 선물을 거래 할 수있도록 했다.

SEC가 Ether나 비트 코인을 증권으로 간주했다면, cryptocurrency 시장은, 이와 관련된 규제가 거래소나 암호화폐에 대한 소유권, 시장등에 미칠 영향을 우려하여 투매로 이어질 가능성이 높은 상황이었습니다.

 

복제와 가상화폐

화폐가 복제가 된다면 화폐가 될 수 없다. 가상화폐는 그러한 면에서 성공적인 출발을 했다고 할 수 있다. 그렇다고 해서 블록체인 기술을 이용하면 소프트웨어나 이미지, 동영상등을 불법 복제하는 것을 막을 수 있다고 주장하는 무리가 있다. 블록체인 기술에서 사용한 화폐에 대한 개념은 장부를 다수가 보유하고 어떤것이 진짜인지 확인 하는 알고리즘을 탑재한 것이다. 디지털로된 이미지인 화상, 소프트웨어, 동영상등을 블록체인 기술로 복제를 방지 할 수 있다는 것은 기본적인 이해가 부족한 것이다.

블록체인 기술을 이용하여 원본 동영상과 짝퉁을 구별은 할 수 있을 것이다. 그렇지만 실제 시청하는데 짝퉁이나 원본이나 별 지장이 없다면 누가 굳이 원본을 찾겠는가? 원본 확인 기술을 만들 수 있지만 시청하는 사람들이 원본이든 카피본이든 별 관계 없다면 무슨 상관이겠는가?

짝퉁 소프트웨어가 동작하지 못하도록 하는 방법은 이미 개발이 되었고 그것을 해킹하는 것은 시간 낭비다. 새로운 버전이 나오고 짝퉁은 업데이트를 받지 못한다. 업데이트를 하면 동작을 멈추니 업데이트 하기가 두렵다. 그래서 이제 소프트웨어는 짝퉁이 유통되기 어렵다.

동영상, 사진? 이건 좀 곤란하다. 그 자체가 프로그램이 아니라 데이터일 뿐이기 때문에 복제를 막기 어렵다. 그렇지만 이미 넷플릭스 같은 회사가 성공하고 있는 것은 복제가 그리 효과적인 동영상을 보는 방법이 아니라는 것을 의미한다.

소프트웨어 복제가 쉽던 시절 많은 회사들이 복제 때문에 회사가 망했다고 이야기 했다. 과연 진실일까? 사람들이 복제를 할만한 소프트웨어를 만든 사람들이 그런 이야기를 했을까? 별로 보지 못했다. 복제 때문에 망한다기 보다 아무도 복제를 안해서 망했다고 하는것이 더 정확 했을지도 모른다.

블록체인은 신비의 기술이 아니다. 오히려 아주 무식하다. 하나만 보관하면 될 장부를 수십개, 수천개 보관하고 진위를 판별하는 무식한 기술이다. 저장공간의 낭비이고 네트워크 장비의 낭비일 수 있다. 기술 보다는 모두에게 장부를 공개한다는 철학이 중요하다. 그동안 장부는 숨기고 또 숨기는 것이 었다. 그래서 방어 하기 어려웠다. 그런데 다 공개하고 다만 조작하는 것을 막겠다는 것은 전혀 다른 접근이다.

블록체인은 그런면에서 특별하다. 프로그램이든 장부든 조작하는 것을 허용하지 않는다. 이러한 개념과 이미지, 동영상을 조작하지 못한다는 것은 다르다. 장부는 거기에 기록된 숫자 하나하나가 중요하고 이미지나 동영상은 그렇지 못하다. 몇비트 틀리다고 해서 그 동영상은 못보겠다고 하는 사람은 없다. 장부는 숫자 하나가 틀리면 안된다. 그것이 가장 중요하기 때문이다.

기존의 기술들도 충분히 훌륭하게 데이터를 보관하고 조작불가능하게 유지할 수 있다. 그런데 그렇게 사용하지 않았다. 어쩌면 종이로 기록된 문서보다 디지털 문서는 더 조작하기 간단하다. 그래서 많이들 조작했고, 대중들은 디지털 문서를 믿지 않게 되었다. 그동안의 디지털 문서는 독점적인 지배권을 가진 누군가에 의해서 유지 되었기 때문이다.

블록체인은 굳이 비효율 적인 방법으로 다수가 지배권을 행사하는 즉, 민주적인 방법의 자료 보관 방법을 제시한 것이다. 조작되었다고 의심할 필요가 없는 디지털 문서, 데이터, 계약이 가능하다는 것은 디지털 데이터에 대한 새로운 지평을 여는 것이다. 그렇지만 모든 데이터가 그러할 수는 없다. 적어도 지금은 그러하다.

 

 

회사와 ICO주체와의 관계

현재의 회계시스템은 가상화폐를 수용하기 어렵다. 대부분의 나라들이 아직 가상화폐를 어떤 형태로 제도권에 포함시킬지 확정하지 못하고 있기 때문이다. 이러한 상황에서 회사가 ICO의 주체가 된다면 회사는 장부상에 없는 가상화폐라는 물건을 가지게 된다. 회사의 모든 자산은 법정화폐 단위로 평가되어 장부상에 기록된다. 그런데 가상화폐의 법정화폐 가치는 공식적인 것이 없다. 가상화폐 거래소 가격이 있지만 회사가 이를 공식 가격으로 하여 일시에 장부에 반영하기 어려운 측면이 많다. 가격의 변동이 심해서 자산가치가 심하게 변동되게 되므로 세금 문제나 기타 다양한 자산 재평가에 따른 문제들을 해결하기 어렵다.

그렇다면 이 문제를 어떻게 해결하는 것이 좋을까?

가상화폐는 그냥 가상화폐로 사용하는 것이 해결책이다. 즉 회사와 독립된 가상화폐 재단을 만들고 그곳에서 가상화폐를 기여 받는 것이다. 그리고 그 재단은 가상화폐를 법정화폐로 바꾸지 않고 가상화폐 생태계 안에서 가상 화폐를 사용하여 다양한 기술개발이나 서비스 유지등을 할 수 있다. 법정화폐가 필요하면 따로 조달하여야 한다. 가상화폐 생태계를 인정하는 많은 투자자들이 앞으로 생겨날 것이다. 그렇다면 이러한 재단들은 충분히 따로 법정화폐를 투자 받은 것이 가능할 것이다.

즉 가상화폐는 가상화폐 생태계에서 사용되고, 법정화폐는 법정화폐 생태계에서 사용되는 것이다. 이렇게 하더라도 다양한 유통과정중에서 개인들이 법정화폐로 환전하는 경우가 발생하겠지만 재단이나 회사등의 운영주체가 직접적으로 가상화폐를 환전하여 사용하는 경우는 배제 하여야 한다는 것이다.

현재의 가상화폐 가치는 거래소의 시세에 의하여 파악되고 있지만 이것은 매우 불안정한 시스템이다. 지금의 가상화폐 거래소는 실제 가상화폐를 거래하는 것이 아니며 가상화폐를 보관하고 거래소에서 주는 쿠폰을 받아서 거래하는 것 뿐이다. 이러한 시스템이 가상화폐의 가치를 결정할 수는 없다. 가상화폐의 가치는 그 화폐가 유통되는 시스템의 가치이다. 산정하기 어렵지만 장차 그렇게 될 것이 틀림없다.

현재의 가상화폐 거래소가 가상화폐의 가치를 제대로 평가하지 못한다고 판단하는 이유는 조그만한 사고나 소문으로 모든 가상화폐의 가치가 변동된다는 것이다. 예를들어, 거래소가 해킹당했다고 하면 모든 가상화폐의 가치가 폭락한다.

위에서 설명했듯이 가상화폐 거래소는 실제 가상화폐 생태계와 큰 관련이 없는 곳이다. 해킹을 당하는 이유는 대부분의 경우 시스템 운영상의 문제이지 가상화폐 자체가 헛점이 있는 것이 아니다. 가상화폐에 대한 제대로된 이해도 없이 거래소를 운영하다 보니 생기는 문제일 뿐이다. 이 부분에 대해서는 따로 다시 이야기 할 기회가 있을 것이다.

요약하면 현재로서는 회계적으로 편입이 매우 어려운 가상화폐 시스템을 회사로 끌어들일 것이 아니라 새로운 형태의 재단이든 조직을 만들고 이는 가상화폐에 기반하고 가상화폐로 움직이며 그 생태계를 발전 시키는 모델을 만들어야 한다는 것이다. 회사는 이 조직과 다양한 방법으로 협업할 수가 있을 것이고 가상화폐의 기술을 사용하여 상용화된 서비스를 개발할 수 있는 것이다.

토큰발행과 스마트 컨트랙트

현재 블록체인 최고의 킬러 어플리케이션은 ICO다. 특히 새로운 코인을 설계하지 않고 기존 이더리움 같은 블록체인을 이용하는 경우가 더욱 그러하다. 스마트 컨트랙을 통하여 토큰을 사는 사람에게 어떤 조건을 제시할지 미리 프로그램하고 확정 지을 수 있다.

예를들어 몇년 몇월까지 모인 ETH를 락업 하겠다고 했다면 그렇게 프로그램을 만들어야 한다. 환불이 가능하다면 환불에 관한 코드도 있어야 한다. 그렇게 편리하지는 않지만 MyEtherWallet같은 서비스가 있어서 일반인도 설명을 잘 보면 충분히 스마트컨트랙의 함수를 실행할 수 있다.

그런데 대부분의 ICO를 보면 이런 프로그램이 없이 진행된다. 프로그램이 있어도 코드가 공개되지 않아 계약서도 못보고 계약을 하는 꼴이다. 블록체인 생태계를 말하면서 프로그램으로 말하지 않고 블로그와 공지문으로 모든것을 대신한다.

블록체인위에 기록되는 코드는 강력하다. 작성자 조차도 프로그램이 실행되면 미리 정해진 코드 외에는 추가도 불가능하고 수정도 안된다. 오류가 발생해도 그냥 쳐다 보는것 외에 할 수 있는 일이 없다. 그러한 코드를 작성하는 것은 매우 어렵고 고통스러운 일이다. 그럼에도 불구하고 이러한 불변성(immutability) 때문에 블록체인이 새로운 기술로 인정 받는 것이 아닌가?

지금까지 모든 문서는 누가 만든 것이든 문제가 발생하면 항상 그 문서의 진위가 큰 논쟁이 된다. 조작 못하는 문서는 없다는 것이 이제까지 정설이 이었다면 블록체인 그 원칙을 바꿀 수 있는 새로운 기술이다. 제대로만 사용된다면 얼마나 많은 소모적인 분쟁을 줄 일 수 있겠는가?

불변성과 투명성을 담보하는 검증된 코드는 확실한 실행을 보장한다. 그러므로 당사자들간에 코드로된 계약의 명확성만 확인하면 실행은 보장된다. 이 보장성은 이제까지의 그 어떤 집행기관 보다도 강력할 수 있다.

이러한 블록체인 최고의 장점을 뽐낼 수 있는 ICO에서 이런 기술이 사용되지 않는 다는 것은 안타까운 일이다.

문제는 법정화폐로 바꾸는데 있다.

가상화폐는 그 생태계 안에서 움직일 때 안정적이다. 블록체인을 운영하고, 채굴자, 풀노드 운영자를 지원하며, 다앙한 DApp을 구동하게 해주는 에너지다. 그런데 이러한 본연의 기능이 법정화폐로 바꾸는 거래소의 활성화로 인해 법정화폐를 벌게 해주는 수단으로 인식되는 부분은 아쉬운 부분이다.

이것은 본질적으로 다양한 DApp이 부재하고 실질적으로 가상화폐를 소비하기 어려운 상황이다 보니 법정화폐로 바꾸어 소비해야 하는 실질적인 문제와 급격한 가격상승으로 인한 투기심리 확산으로 거래소 또는 환전소가 지나치게 많고 과열된 것이 사실이다.

가상화폐 세계에서 가장 강력한 어플리케이션인 ICO마저 토큰을 팔아서 들어온 가상화폐를 회사 운영에 사용하기 위해 법정화폐로 바꾸고 있는데 이 또한 간단히 생각할 문제는 아니다. ICO에 대한 모든 부정적 이미지는 가상화폐 투자를 받는다기 보다 가상화폐를 투자 받아 다시 법정화폐로 바꾸어 사용하는 행태에 있다. 이러한 행태에서는 사실상 가상화폐를 투자 받는 것이 아니라 법정화폐를 투자 받는 것이나 마찬가지라 할 것이다.

가상화폐 생태계는 많은 가능성이 있다. ICO를 통해서 가상화폐를 모으고 이를 기반으로 블록체인을 활성화 하는 앱이 개발되고 유용한 블록체인이 개발되어야 한다. ICO를 통해 모은 가상화폐를 이 가상화폐 생태계를 구축하는데 대부분 사용되어야 할 것이다. 회사 운영이나 개발비등은 성공한 ICO를 기반으로 기존 금융권에서도 조달이 가능할 것이다.

블록체인의 최대 강점이자 약점 – 수정불가

블록체인의 특성중에서 투명성 다음으로 많이 이야기 되는 것이 수정불가능이다. 한번 기록되면 수정이 안된다. 그래서 믿을 수 있는 것이다. 쌍방간에 몇날 몇시에 무엇을 하기로 하고 기록을 남기다 라고 써 놓으면 블록체인이 존재하는한 해당 기록은 인정될 수 있다. 그런데 작성해 놓고 나중에 보니 쌍방이 인정하는 오류가 있다해도 수정은 안된다. 계약을 다시 해야한다. 기존의 계약 시스템도 그러하다. 도장찍은 계약서를 고치기는 어렵고 새로 추가로 작성하는 것이 일반적이다.

그럼에도 불구하고 블록체인상의 프로그램이 수정불가능하다는 것은 참으로 두려운일이다. 프로그램은 복잡하다. 일반 계약서 처럼 여러번 검토하면 본질적인 내용은 거의 맞는것과는 차원이 다르다. 단순한 오타 하나가 시스템을 망가 뜨릴수 있다.

이더리움이 이더리움클래식으로 원래것을 버리면서 하드포크 할 수 밖에 없었던 이유도 DApp의 오류 때문이었고 많은 사람들이 오랫동안 정교하게 작업했음에도 치명적 결함이 있었고 플랫폼 자체를 수정하는 방법외에 오류로 인한 피해를 막을 방법이 없었다.

원천적으로 DApp의 소유자는 DApp을 파기할 수 있는 권위를 주면 최악의 사태는 피할수 있으나 그렇게 하면  컨트랙트 자체의 신뢰가 떨어진다.

프로그램의 무결성을 검증하는 것은 매우매우 어렵다. 그러므로 블록체인상의 프로그램은 매우 제한적으로 검증된 코드만을 쓸 수 밖에 없으므로 블록체인상에는 핵심적인 불가역적인 로직만을 배치하고 나머지 소소한 부분들은 블록체인 밖에서 일반 어플리케이션으로 처리하는 디자인이 필요하다.

보유증명(Proof of Ownership)은 어디에 쓰나?

SILC 에코시스템의 커뮤니티인 COC의 핵심은 보유증명과 DApp 배포, 운영인데, 보유증명은 가상화폐 이전부터 오랫동안 고민했던 부분이다. 일화가 있다.

부동산 시장에는 가끔 재미있는 분들이 나타 나는데 은행 잔고 증명서를 들고 다니는 분들이다. 부동산 소개소라는 곳들이 대부분 돈 있는 분들에게 만 열심히 하고 잘 모르는 사람들에게 홀대하니 나타난 현상이다. 실제로 30억 잔고증명을 들고 다니는 분을 만난적이 있는데 그냥 보기에는 돈이 많아 보이지 않았다. 그리고 그까짓 종이로된 은행 잔고증명 초등학생도 조작할 수 있는거 아닌가?

그럼에도 불구하고 부동산 사장님은 그분을 몇달간 극진히 대접을 하는 것을 본적이 있다.

잔고증명 처럼 흔하지 않은 경우지만 비싼차에 기사를 대동하고 다니시는 분들도 있다. 이런분도 직접 본적이 있는데 나중에 알고보니 빌린차에 기사도 대리기사였다.

부동산 소개소 분들의 고충이 무엇일까? 정작 살 마음도 자금도 없는 사람들에게 시간 뺏기지 않고 싶은 것이다. 부동산 보러 다니는 사람의 고충이 무엇이겠는가? 충분히 살 의사가 있고 돈도 있는데 나를 홀대 하는거 아니겠는가?

그러면 누구나 믿을 수 있는 잔고 증명이 있다면 어떨까? 은행에서 주는 종이말고 진짜 믿을 수 있는거… 오랫동안 고민을 했지만 별 방법이 없어서 그냥 잊었는데…

블록체인을 보다 보니 예전 일화가 딱 생각났다. 블록체인이면 되는구나.

블록체인에서는 그냥 자기 지갑 주소를 부동산에 보여주면 끝이다. 그 지갑이 본인것인지 물어 본다고? 그러면 1원 정도 보내주든지, 디지털 사인으로 검증하든지 하면 된다. 이렇게 쉬운 시스템을 왜 이제까지는 만들지 못했을까?

지금까지 금융시스템은 숨기는데 주력해 왔기 때문이다. 잔고증명은 본인만 뗼 수 있다. 법이 그렇다. 그러니 무슨수로 다른 사람을 믿게 할 수 있겠는가? 이렇게 다들 숨기니 숨긴것을 찾아서 모으고 조사해 주는 신용정보 회사가 생겨 났다. 이제는 본인이 어떻게 평가 받는지 알기 위해 신용정보 회사에 돈내고 내 정보를 봐야 한다. 남의 정보를 모아다 본인한테 남들한테 팔아먹는 기가막힌 장사다.

블록체인은 드러내는 것에 주력한다. 숨기면 안전하게 지키기 어렵기 때문이다. 사람들이 항상 많이 다니는 곳에 있는 공공 시설물 보다 안보이는데 있는것이 관리가 어렵다. 블록체인은 모두다 들여다 보고 있어서 지키기 쉬운 것이다.

모두다 들여다 볼수 있으니 소유증명은 그냥 따라 오는 덤이다.

더이상 내가 원하는 물건을 가지고 있는지 없는지도 모르는 사람과 물건 값을 흥정할 필요가 없는 것이다.

주식공모제도도 있는데 왜 ICO를?

주식을 공모하는 방법은 많이 있다. 인터넷에서 전문으로 소액 공모를 해주는 업체들도 다수가 있다. 그런데 왜 ICO를 택할까? 그만큼 가상화폐를 가진 사람들이 투자에 적극적이라는 이야기다. 가상화폐의 장점은 투자를 해서 가상화폐를 받으면 어떻게든 거래를 할 수 있다는 것이다. 이에 비해서 작은 회사의 주식은 정말 사고 팔기가 어렵다. 투자자들은 이부분에 주목하는 것 같다.

정부는 이부분을 두려워 하는 것 같고.(왜지?)

작년 같은경우 수십배, 수백배 값이 오르는것이 이상하지도 않았으니 당연히 그렇다. 투자자들의 기대도 어느때 보다 높다. 그런데 올해 들어오면서 가상화폐는 하향 안정세(?)로 돌아서고, 주식이나 별반 다름없는 변동이다. 최근에 주식시장이 활황이라는데 가상화폐 떄문에 주식에 관심가진 사람들이 많아지지 않았나 싶다.

그러니 아이디어가 있다. 정부가 나서든지, 거래소가 나서든지, 아니면 민간기업이라도 나서서 블록체인을 이용한 비상장 거래시스템을 만들면 좋겠다. 비상장 주식을 현재의 가상화폐 거래소에서 자유롭게 거래하게 해주는 것이다. 법을 조금 손질해야 겠지만 지금처럼 개인간 거래만 되더라도 이게 훨씬 낳고 투자자들에게 투자의욕을 가지게 할 것이다.

현재의 비상장주식 거래는 38커뮤니티가 가장 활발한데, 이사이트를 한번 가보시라 깜짝 놀란다.

일부러 전화번호 부분을 잘라서 캡춰 했는데 사이트에 가면 그냥 다 노출이다. 로그인도 안하고 그냥 다 보인다. 현행법은 비상장 주식거래를 개인간 면대면으로 하게 되어 있다보니 사이트가 중개하지 못하고 저렇게 전화번호를 남기고 연락하고 하는 것이다.(저거 개인 정보보호법인지에 안걸리나 모르겠다.)

비상장주식을 블록체인상의 토큰으로 지급하면(물론 주식이므로 실명 등록한 지갑을 통해서 관리가 되어야 하겠다.) 저렇게 할 필요없이 P2P거래라 할지라도 훨씬 활발하고 쉽게 될수 있을 것이다. 거래가 활발하면 기업도 좋고, 정부도 거래세 걷어서 좋고, 블록체인 기술 활성화하고 얼마나 좋은가?

얼마전에 블록체인을 이용한 비상장주식 거래 개발했다고 해서 들어가 봤다. 뭘 했다는 건지 알수가 없다. 그냥 38커뮤니케이션이 낫겠다 싶은 생각. 누가 또 정부돈 받아서 프로젝트 하는 시늉했구나 정도. 그렇게 따로 만들지 말고 기존 가상화폐 거래소에서 거래 될수 있도록 하면 되지 않겠나? 참 답답하다.