이더리움 스몰렛 베타 테스터 신청 안내.

이더리움 스몰렛은 스몰렛 네트웍스에서 앞으로 나올 다양한 가상화폐 지갑 중에서 가장 먼저 발표되는 것입니다. 스몰렛은 하나의 키 보관소 앱(스몰렛 키 볼트)이 다양한 가상화폐의 키를 한 곳에서 보관하고 지갑 앱들이 이를 공유하는 개념입니다. 모든 가상화폐 키를 하나의 마스터 키에 의해서 관리하는 것을 목표로 하고 있습니다.

베타 테스트에 참가 하는 테스터 여러분들 중 1,000분을 선발하여 SILC재단에서 배포하는 SILC 토큰을 1,000개씩 드릴 예정입니다. 활동이 활발하신 분들께는 더 많은 SILC 토큰을 배포할 예정입니다.

테스터 참가 방법은 다음과 같습니다.

우선 아래 링크 두개를 눌러서 베타 테스터 신청을 합니다. 두개의 앱으로 구성되어 있으므로 반드시 둘다 신청해야 합니다.

키 볼트 베타 테스터 신청

이더리움 스몰렛 베타 테스터 신청

신청이 완료되면 아래 링크로 들어가거나 구글 플레이에서 “스몰렛”을 검색하여 이더리움 스몰렛을 다운 받습니다. 알파 테스트나 기타 이유로 이전 버전이 설치된 분들은 앱을 모두삭제하고 다시 설치하시기 바랍니다. 삭제전에 마스터 시드를 백업 하는것을 잊지 마세요.

구글 플레이 이더리움 스몰렛 다운로드

 

설치 후 이더리움 스몰렛을 실행하면 위 화면과 같이 키 볼트 설치 안내가 나옵니다.  확인을 눌러서 설치 페이지로 이동하여 스몰렛 키 볼트를 설치 합니다.

설치 후 다시 이더리움 스몰렛으로 돌아오면 위 화면과 같은 메시지가 나옵니다. 스몰렛 키 볼트에 아직 마스터 시드가 생성되지 않았기 때문에 마스트 시드를 생성하라는 메시지입니다. “실행”을 눌러서 스몰렛 키볼트를 실행 합니다.

 

스몰렛 키 볼트 화면은 붉은색입니다. 필요시 키볼트로 이동할때가 있으므로 어느 앱에 있느지 확인 하는데 좋습니다. 이 화면에서 패스워드를 입력하고 “새 마스터 시드 생성”을 누르면 새로운 12단어의 마스터 시드가 생성됩니다. BIP39 표준의 마스터 시드를 가지고 있으면 “마스터 시드 가져오기” 버튼을 눌러서 가져 올 수 도 있습니다. 베타 테스트 동안은 새로 생성한 시드를 사용하시기를 추천 합니다.

생성된 마스터 시드는 안전한곳에 반드시 보관하시기 바랍니다. 베타 테스트에 사용된 이 마스터 시드에서 생성된 주소로 SILC 토큰이 배분 되므로 절대 잃어 버리면 안됩니다.

“마스터 시드 백업 완료”를 누르면 첫번째 이더리움 계정이 생성되고 이더리움 스몰렛 앱이 다시 열립니다.

앱이 열리면 상단의 탭 바로 아래에 있는 “Main Network”를 눌러서 “Ropsten Test Network”로 바끕니다. 그 다음 “컨트랙트 탭을 누릅니다.

컨트랙트 탭으로 가면 기본으로 “SILC Test Contribution”이라는 컨트랙트가 선택되어 있습니다. 이 스마트 컨트랙트는 Ropsten Test Network에 존재하는 스마트 컨트랙트로 이곳에서 테스트용 SILC 토큰을 받게 됩니다. “SILC Test Contribution” 우측의 “전송” 버튼을 누릅니다.

 

그러면 위 화면과 같이 다시 이더리움 탭으로 돌아오면서 받을 주소에 컨트랙트 주소가 자동으로 입력 됩니다. 이제 이 SILC Test Contribution 스마트 컨트랙트로 이더를 전송해야 하는데 이더가 없습니다. 그러니 Faucet에 가서 이더를 받아와야 합니다. 화면 우측 상단의 수도꼭지를 누릅니다. 그림 과 같이 “1 ether 요청에 성공하였습니다” 메시지가 나오면 곧 1 이더가 현재 계정으로 입금 됩니다. 요청은 24시간에 한번씩만 가능합니다.

이더가 들어오면 수량에 0.1 이상을 쓰고 “사인 & 전송” 버튼을 누릅니다.

 

“사인 & 전송” 버튼을 누르면 위 화면과 같이 키 볼트에서 사인을 하게 됩니다. “지불확인”을 누릅니다. 전송이 완료되면 아래쪽에 전송되었다는 메시지가 나옵니다. 메시지를 터치하면 etherscan.io에서 최종 전송 결과를 확인 할 수 있습니다.

전송이 잘 되었으면 “토큰” 탭으로 갑니다. 토큰 탭에서 “시가총액 순 500개 토큰 검색”을 누릅니다. 화면처럼 SILCTEST 토큰이 들어와 있으면 성공입니다. 이 테스트 토큰을 받으신 분들에게 베타테스트 마감시에 실제 SILC토큰을 드리게 됩니다.

스몰렛 월렛을 기반으로 하는 SILC 에코시스템에 대한 기여 행사도 테스트가 진행중입니다. 자세한 사항은 아래 링크를 참고 하세요.

SILC Contribution

 

이더리움 스몰렛 베타 오픈

베타테스터 신청은 아래 링크에서.

키 볼트 베타 테스터 신청

이더리움 스몰렛 베타 테스터 신청

토큰을 등록하고 전송 할 수 있게 되었으며 컨트랙트 함수도 실행이 가능하다. 이전 버전이 설치된 경우에는 마스터 시드를 백업하고 키볼트 및 이더리움 스몰렛 모두 삭제 후 재설치가 필요하다.

Android O service

안드로이드 앱을 테스트 하다보면 주로 낮은 버전의 기계가 문제가 많으므로 상위버전 OS 테스트는 잘 안하게 되는데 최신 버전인 안드로이드 O버전(API 26)에서 서비스관련 내용이 바뀌었다. 조금 바뀐것이 아니라 정책이 바뀌어서 예전 방식으로는 동작을 안했다.

다른 앱의 Service를 호출 할때 startService를 사용하는데 안드로이드 O이상에서는 이렇게 부르면 다른앱이 실행중이 아닌경우 서비스 호출을 실패한다. 안드로이드 O 문서에 보면 아래와 같은 내용이 나온다.

Android 8.0 이전에 포그라운드 서비스를 생성하는 일반적인 방법은 백그라운드 서비스를 생성한 후 이 서비스를 포그라운드로 승격시키는 것이었습니다. Android 8.0에서는 좀 복잡하며, 시스템은 백그라운드 앱이 백그라운드 서비스를 생성하는 것을 허용하지 않습니다. 이 때문에 Android 8.0에서는 새 서비스를 포그라운드에서 시작하는 새로운 메서드 Context.startForegroundService()를 소개합니다. 시스템이 서비스를 생성한 후, 앱은 5초 이내에 해당 서비스의 startForeground() 메서드를 호출하여 새 서비스의 알림을 사용자에게 표시해야 합니다. 앱이 이 시간 한도 내에 startForeground()를 호출하지 않으면 시스템이 서비스를 중단하고 이 앱을 ANR로 선언합니다.

복잡한 이야기인데 결론적으로 startForegroundService를 호출 하지 않으면 백그라운드 앱은 백그라운드 서비스를 생성하지 못한다는 것이다. 그러므로 백그라운드에 있더라도 서비스가 호출 되어야 한다면 startForegroundService를 사용해야 한다. 이 경우 위 설명에 있는 바와 같이 호출된 서비스는 startForground를 반드시 실행해야한다. startForground는 노티피케이션을 동반하므로 조용히 실행될 수는 없다. 이렇게 한 이유는 정확히 실행되는 서비스들을 사용자에게 보여주기 위함일 것이다.

안드로이드 P(API 28)에서는 이부분이 좀 더 강화 되어 startForegroundService를 사용하려면 별도 퍼미션까지 요구한다고 한다. 그렇지만 실제로 해보니 퍼미션 요구는 안하는데 좀 더 들여다 봐야 할 것 같다.

여담으로 안드로이드 P를 테스트 하기 위해서 에뮬레이터(Pixel XL)를 설치 했는데 에뮬레이터 상태에서도 정말 빠르다. 에뮬레이터에서 개발하는 분들에게는 이 버전을 추천한다.

 

Smallet Key Vault, Ethereum Smallet 0.3 release

이 버전은 내 손을 떠나는 첫번째 버전이다. 개발하면서는 버전코드를 한번도 안 올렸으니 버전코드 1번이다.

현재 나와 있는 가상화폐들의 종류가 매우 다양하여 모든 가상화폐를 한 지갑 앱에 담는 것은 무모하다. 특히 최근의 가상화폐들은 단순하게 화폐를 전송하고 받는 기능을 넘어 스마트컨트랙트나 기타 유사한 DApp을 사용할 수 있게 됨에 따라 지갑의 기능이 계속 부가될 수 밖에 없다. 그러므로 비트코인 종류의 단순 화폐기능을 가지고 있고 프로토콜이 유사한 것들을 합쳐서 비트코인류 지갑으로 만들고, 이더리움은 수많은 토큰들이 이미 존재하므로 이들도 같이 관리하고 DApp도 처리가 가능한 지갑을 별도로 만들었다. 모든 앱들의 아이콘에는 SILC아이콘을 포함시켜 한 식구 임을 쉽게 알 수 있도록 하였다.

향후 통합장부(ICMP)에서 이러한 지갑들의 입출금 상황을 통합관리 하게 될것이다.

기본적으로 모든 지갑은 Key Vault에 키를 저장한다. 즉 지갑앱들은 개인키를 보관하지 않으며 모든 키는 Key Vault 앱에서 관리한다.

 

Key Vault는 색상을 붉은 색으로 하였다. 키를 생성할때 월렛과 Key Vault화면을 오가게 되고, 전문을 사인할때도 키 볼트에서 하게 되므로 사용자가 확실히 어느 앱에 있는지를 확인하기 쉽게 하기 위해서 이다. 각 월렛들도 다른 색상의 Theme를 사용하여 구분이 쉽도록 하였다. 현재로서는 키 볼트는 BIP39 마스터 시드로 생성한 키만을 생성하거나 다른 곳에서 가져와서 사용할 수 있다. 개별 키의 Import를 지원할지 아직 결정하지 못했다. 개별키를 가져오게 될 경우 복잡도가 높아져서 사용자들이 관리하기 힘들어 질 것이다.

모든 코인은 12개 이상의 단어로 이루어진 Master Seed로 부터 생성된다. HD키(Hierarchical, Deterministic)를 지원하므로 이 Master Seed만 있으면 모든 지갑 주소는 그대로 복원된다. 물론 이걸 잃으면 모두 다 잃는다.

실크에코시스템 백서에 나와 있듯이 키 볼트를 지갑에서 분리한 이유는 보안때문이다. 기능이 점점 많이 지면서 코드가 복잡해지고 다양한 권한을 가질 수 밖에 없는 지갑에서 분리하여 단순한 코드를 유지하고 아무런 OS권한도 사용하지 않음으로서 원천적으로 해킹을 막는 것이다. 코드가 복잡해지면 해킹을 막기가 그만큼 어려워진다. 또한 키 볼트 부분은 완전한 오픈소스여야 하므로 더욱더 코드를 단순하고 읽기 쉽게 하여 누구든 보안에 위협이 되는 사항을 확인하고 볼 수 있도록 하므로 복잡한 지갑 코드와의 분리는 필수 적이다.

즉 앱 자체가 인터넷 접근권한이 없으므로 네크웍을 통한 해킹은 루팅된 상태가 아닌다음에는 불가능 하다고 봐야한다. 월렛과의 통신은 서비를 통해서 하는데 월렛과 키 볼트 사이에서만 호출이 가능하다. 이 또는 앱사인에 의한 방어 이므로 OS자체의 앱 사인을 해킹하지 못한다면 다른 앱이 이 통신에 끼어 들기는 어렵다.

마스터 시드와 프라이비트 키는 안드로이드 키 스토리지를 사용하여 보관되며 모든 소스를 본다해도 이를 복원 할 방법은 없다.

이제 부터는 모든 지갑들이 다 가진 기능들이다.

  

이더리움 지갑 화면이다. QR코드 읽기, 보여주기를 지원하고 30여가지 화폐 단위로 잔고를 보여준다. 배경 색상은 이더리움 색상을 기본으로 하였다.

  

메인넷 외에도 3가지 테스트넷을 제공한다. 초보자들은 돈 많이 드는 메인넷을 사용하기 전에 테스트넷을 이용하여 충분히 기능을 사용해 볼 수 있다. Ropsten을 추천한다. 테스트용 돈 받기가 쉽다. 설정에서 개발자 모드를 켜면 Ropsten Faucet 화면에 바로가서 테스트용 이더를 받을 수 있다.

화면을 보면 다른 지갑과 달리 사인과 전송을 분리하고 있다.

  

사인화면을 보면 붉은색이다. 즉 월렛이 아니라 키 볼트에서 사인을 한다. 프라이비트 키를 키 볼트만 가지고 있으니 당연하다. 사인이 되면 아래쪽에 사인된 전문이 보인다. 사인을 분리한 이유는 완전한 오프라인 사인을 가능하게 하기 위해서다. 즉 사인버튼을 누르기 전에 항공기 모드를 켜거나 하는 방법으로 완전히 네트웍을 차단하고 사인을 할 수 있다. 사인된 전문이 오면 네트웍을 켜고 전송 버튼을 누르면 된다. 계정 추가를 통해서 계정은 몇개든 추가 할 수 있으며 따로 운영이 된다.

구글플레이에 등록 했으니 곧 노출될 것이다.

스몰렛 키볼트

이더리움 스몰렛

새로 발견한 멋진 개발 툴들

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

간만에 개발을 본격 해보려고 하는데 에디터를 한번 바꿔 보고 싶었다. 그동안 좋은게 나왔겠지 생각했다. 인터넷을 찾아보니 너도 나도 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의 주체가 된다면 회사는 장부상에 없는 가상화폐라는 물건을 가지게 된다. 회사의 모든 자산은 법정화폐 단위로 평가되어 장부상에 기록된다. 그런데 가상화폐의 법정화폐 가치는 공식적인 것이 없다. 가상화폐 거래소 가격이 있지만 회사가 이를 공식 가격으로 하여 일시에 장부에 반영하기 어려운 측면이 많다. 가격의 변동이 심해서 자산가치가 심하게 변동되게 되므로 세금 문제나 기타 다양한 자산 재평가에 따른 문제들을 해결하기 어렵다.

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

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

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

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

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

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

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