10분만에 나만의 ERC20 토큰 발행하기.

앱설치하는 시간 포함 12분 안에 컨트랙트를 생성해서 토큰 발행을 해 보겠습니다. 준비물은 안드로이드 폰입니다. 이 데모는 Ropsten Testnet을 이용했지만 mainnet에서도 거의 다르지 않을 것입니다. 자 그럼 시작해 보겠습니다. 동영상을 선호 하시는 분들은 이 포스팅 끝에 전과정을 담은 동영상이 있으니 참고 하시기 바랍니다.

 

위 사진과 같이 구글플레이 가서 “smallet” 검색하여 “이더리움 스몰렛”을 설치합니다. 아니면 아래 구글 플레이 로고를 누르세요.

 

이더리움 스몰렛을 실행하면 위 화면과 같이 “키 볼트”를 설치 하도록 안내합니다. 키 저장소와 지갑앱이 분리된 이유는 나중에 따로 설명 하겠습니다. 우선은 안내대로 설치를 합니다.

 

처음으로 이더리움 스몰렛을 실행하면 위 화면과 같이 “마스터 시드가 없음” 안내가 나오고 다시 키 볼트를 실행하게 됩니다. 키 볼트에서 패스워드를 입력하면 새로운 마스터 시드를 생성하게 됩니다. 키 볼트는 BIP39 기준에 따라 마스터시드를 이용하여 지갑 키들을 생성하게 됩니다.

 

키 볼트에서 지갑키 생성은 자동으로 됩니다. 이더리움 스몰렛으로 화면이 돌아올때까지 잠깐만 기다리면 됩니다. 이더리움 스몰렛은 네가지 이더리움 네트웍을 지원합니다. 그 중에서 Ropsten Test Network을 선택합니다. Ropsten Test Network을 선택하면 화면 상단 우측에 수도꼭지가 나타납니다. 이것을 누르면 테스트용 이더 한개를 전송 받게 됩니다. 참고로 테스트용 이더는 하루에 한개씩 신청 할 수 있습니다. 신청을 하고 조금 기다리면 이더가 들어옵니다. 입금은 자동으로 갱신되지 않으니 화면을 아래로 당겨서 갱신을 하거나 화면 하단 우측 책읽은 사람 아이콘을 클릭합니다.

 

이더가 들어왔으면 컨트랙트 탭으로 이동하여 “토큰 만들기” 버튼을 터치 합니다. 위 화면처럼 원하는 토큰 심볼, 이름, 소수점 자리수를 입력하고 “생성” 버튼을 누릅니다.

화면이 다시 이더리움 탭으로 자동으로 이동됩니다. 토큰 생성에 필요한 모든 입력이 완료되어 있으므로 “사인&전송” 버튼을 누릅니다. 화면처럼 사인을 할 경우 키 볼트 앱으로 다시 자동으로 넘어가서 거기서 사인을 합니다. 모든 프라이비트 키는 키 볼트가 보관하기 때문입니다. “거래승인”을 누릅니다.

 

거래를 전송하고 블록체인에 기록이 될때까지 기다립니다. 화면과 같은 “전송완료” 안내가 나올때까지 기다립니다. 통상 1분안에 됩니다. “확인”을 누릅니다.

 

위 단계에서 블록체인상 토큰 컨트랙트 생성은 마무리 되었지만 편리를 위해서 지갑에 생성된 토큰과 컨트랙트를 추가하는 과정이 자동으로 진행됩니다. 토큰을 추가하고 컨트랙트도 추가 합니다. 따로 입력할 내용은 없이 모두 자동으로 입력 됩니다. 이제 토큰을 발행해 봅니다. 컨트랙트 탭으로 갑니다.

토큰을 받을 주소를 클립보드에 미리 넣어 둡니다. 데모에서는 현재 계정으로 받기 위해서 좌측 상단 메뉴에서 “받을 주소”를 선택하여  현재 본인 계정을 복사해 두었습니다. 컨트랙트 탭에서 “My First Token” 컨트랙트를 선택합니다.(아마도 이미 선택되어 있을 것입니다.) 컨트랙트 이름 우측의 책읽는 아이콘을 터치 하면 위 화면과 같이 아래쪽에 컨트랙트가 제공하는 함수들이 나열됩니다.

그중에서 “mint”를 선택합니다. mint를 터치하면 위 화면과 같이 토큰을 받을 주소와 수량을 입력하게 됩니다. 수량에 “0” 엄청 많은데, 컨트랙트 생성시 소수점을 18로 줬기 때문에 토큰 1개를 보내려면 “0”을 18개 입력해야 합니다. 위 예제는 1,000개를 보내는 경우 입니다. “0”이 21개입니다. 입력이 다 되었으면 “사인”을 터치 합니다. 컨트랙트 생성때와 마찬가지로 다시 “이더리움” 탭에서 전송하고 사인하고 하면 됩니다.

토큰 탭으로 가보면 토큰이 들어와 있는 것을 확인 할 수 있습니다. 1,000개씩 두번을 보내서 2,000이 되었네요.

이 데모에서 사용된 계정에 대한 정보는 아래 이더스캔 링크에서 모두 보실 수 있습니다.

https://ropsten.etherscan.io/address/0xdAF41A6D6CAA5a2353cc24158C30519c7a36a79a

보시면 이미 소스코드 확인이 모두 되어 있어 소스코드까지 다 보입니다. 따로 확인을 하지 않아도 이렇게 되는 이유는 나중에 다른 기회에 설명을 드리겠습니다.

전과정을 동영상으로 담았습니다.

 

 

Smallet Key Vault, Ethereum Smallet release

아직 정식출시는 이르지만 조용히 릴리스 하다.

현재 나와 있는 가상화폐들의 종류가 매우 다양하여 모든 가상화폐를 한 지갑 앱에 담는 것은 무모하다. 특히 최근의 가상화폐들은 단순하게 화폐를 전송하고 받는 기능을 넘어 스마트컨트랙트나 기타 유사한 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 화면에 바로가서 테스트용 이더를 받을 수 있다.

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

  

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

스몰렛 키볼트

이더리움 스몰렛

가상화폐의 가치

여기저기 흩어져 있는 컴퓨터에 보관된 장부에 기록된 숫자가 어떤 가치가 있는 것일까? 가상화폐는 개개인이 가진 컴퓨터에 생성된 지갑에 기록된 숫자에 불과하다. 그런데 왜 이런 가상화폐의 시가 총액이 몇백조가 될 수 있을까?

회사들은 스스로 좋은 회사라는 것을 알리기 위해 많은 돈을 투자한다. 좋은 회사가 되기 위해서는 회사의 경영이 투명하고 건전하다는 것을 알려야 한다. 이를 위해서 전문 회계회사를 고용하고 많은 광고비를 쓴다.

가상화폐의 기반이 되는 기술인 블록체인의 큰 특징은 투명성이다. 누구나 장부를 열람해서 볼 수 있다. 돈이 어디서 와서 어디로 흘러가는지 눈으로 열람이 가능하고 프로그램을 동원하면 단 1원 이라도 추적이 가능하다. 이러한 투명성을 홍보하고 알리는 데는 위에서 회사의 예를 들었듯이 많은 비용이 들어가지만 블록체인을 이용하면 그 자체로 투명성이 확보되고 특별한 노력을 할 필요가 없다. 즉 크고 광고 많이 하는 회사만 투명성을 확보할 수 있는 것이 아니라 막 시작하는 작은 회사도 회사를 투명하게 운영하는 것이 가능하고 더욱 중요한 것은 그것을 객관적으로 인정 받을 수 있다는 것이다.

블록체인을 이용한 투자방식은 ICO가 대 유행하는 이유이다. 회사가 IPO를 하기 위해서는 회계장부 조사를 비롯한 다양한 방법으로 회사를 검증 받아야 한다. 회사가 상장이 되면 그만큼 많은 주주들을 거느리게 되고 회사가 주주를 속일 경우 주주들은 큰 피해를 보기 때문이다.

ICO는 대부분 가상화폐로 투자를 받고 운영도 가상화폐를 이용해서 한다. 투자자들은 투자받은 회사 또는 개인이 돈을 어떻게 운용하는지 항상 감시할 수 있다. 그러한 투명성 때문에 공신력있는 회계사나 증권사의 회사분석이 없어도 ICO는 자율적으로 운영이 가능한 것이다.