EOS 블록체인에서는 기존의 블록체인과는 다르게 계정을 만드는 게 좀 까다롭다.  비트코인이나 이더리움 블록체인에서는 간단하게 랜돔한 프라이빗키->퍼블릭키를 생성해 계정으로 사용할 수 있다. 하지만 EOS에서는 퍼블릭키, 프라이빗키와 더불어 account라는 것이 추가되었다. Account는 human-readable characters로서 정확하게 12자리의 알파벳으로 만들 수 있다. 12자 보다 짧아서도 안되고 길어서도 안된다. (물론 12자보다 짧은 account를 얻는 방법이 있긴 하지만 여기서는  언급하지 않겠다.)  그래서 EOS를 전송할 때는 퍼블릭키 대신 어카운트를 사용해 보낸다. 이메일과 비슷한 방식으로 보내기 때문에 외우기도 쉬워 EOS의 장점으로 꼽힌다. 다만, 이 어카운트를 만들 때 약간의 금전(EOS)가 필요하다는 점과  새 계정을 만들 때는 반드시 기존 계정을 이용해서 만들어야 한다는 점은 좀 불편할 수 있다.

위의 내용을 기본으로 하여 이번 포스팅에서는 기존 account가 있는 상태에서 새 account를 만드는 방법을 설명해 보겠다.

위에서 언급하였지만 새 account를 만들기 위해서 돈(EOS)가 든다. 이 부분에 대해 조금 더 설명하자면 비트코인이나 이더리움은 가상화폐를 전송할 때 수수료가 들지만 EOS는 전송 시 수수료는 들지 않지만 계정을 만들 때 돈이 든다. 왜냐하면 블록체인 내의 RAM을 구입해야 하기 때문이다. 간단히 비유하자면 전통적인 서버-클라이언트 구조에서 서버서를 빌릴 때 지불하는 금액으로 생각하면 되겠다. 메모리가 크고 빠른 서버를 구입하기 위해서는 더 많은 금액을 지불해야 하는 것 처럼 EOS 블록체인에서도 용량이 크고 빠른 dapp을 만들기 위해서는 좀 더 많은 EOS를 지불해 많은 컴퓨팅파워를 확보해야한다. 

두서 없이 말했다. 정리하자면 새 account를 만드는데 필요한 것은 아래와 같다.

1. 기존 EOS account

2. 기존 EOS account 내 EOS

기존 account 이름을 existing1234 이라 하고 새로 생성하려는 아이디를 creating1234(public key: EOSXXXX) 라고 하자. 다시 한번 명심해야 할 것은 EOS블록체인의 account 명은 반드시 12글자여야 한다는 점이다. 위 account명이 12자가 아니면 에러가 난다.

cleos를 이용해서 새 account를 만드는 명령어는 아래와 같다.

$ cleos system newaccount existing1234 creating1234 EOSXXX -stake-net "0.1 EOS" --stake-cpu "0.1 EOS" --buy-ram-kbytes 8

이렇게 하면 새로운 계정이 만들어진다. --stake-net "0.1 EOS"의 경우 account의 brandwidth를 0.1 EOS만큼 예치하여 사용 하겠다는 뜻이고 --stake-cpu는 계정의 cpu를 0.1 EOS를 예치하여 사용하겠다는 것이다.  

이상.

EOS 스마트계약은 C++로 작성되어 Web assembly 언어로 컴파일되어 실행된다. 여기서는 이 개발 툴(CDT)를 설치해 보겠다.

1) GIT HUB에서 clone 하기.

일단 임의 폴더에 clone 명령어를 통해 다운 받는다. 

$ git clone --recursive https://github.com/eosio/eosio.cdt --branch v1.2.1 --single-branch
cd eosio.cdt

2) 그리고 설치한다.

./build.sh


sudo ./install.sh


Chapter1-2: EOSIO/EOS image 다운 및 설치

전편에서 설명한 Docker를 설치하였다면 이제 docker 명령어를 이용하여 EOS Docker 이미지를 다운 받아 컴퓨터안에 EOS node를 생성할 차례이다. 이 단계가 정상적으로 끝난다면 지금 당신의 컴퓨터 내에 EOS 노드가 생성될 것이고 EOS Mainnet과 통신을 할 수 있게 된다.

1) 간단한 명령어로 Docker eosio 이미지 다운 받기

$ sudo docker pull eosio/eos

2) 그리고 임의의 공간에 contracts라는 폴더를 만든다. 그리고 pwd명령어를 이용해 경로 파악한 후 보관한다. 여기에 EOS관련 계약 등이 담길 것이다.

$ mkdir contracts

$ cd contracts

$ pwd

3) 노드 생성 시키기. CONTRACT_DIR에 위에서 파악한 contracts 폴더의 경로를 대체한다.

$ docker run --name eosio \
  --publish 7777:7777 \
  --publish 127.0.0.1:5555:5555 \
  --volume CONTRACTS_DIR:CONTRACTS_DIR \
  --detach \
  eosio/eos \
  /bin/bash -c \
  "keosd --http-server-address=0.0.0.0:5555 & exec nodeos -e -p eosio --plugin eosio::producer_plugin --plugin eosio::history_plugin --plugin eosio::chain_api_plugin --plugin eosio::history_plugin --plugin eosio::history_api_plugin --plugin eosio::http_plugin -d /mnt/dev/data --config-dir /mnt/dev/config --http-server-address=0.0.0.0:7777 --access-control-allow-origin=* --contracts-console --http-validate-host=false --filter-on='*'"

위 명령을 수행하면 로컬노드가 생성된다. 그러나 아직  Development용으로 실제 EOS Mainnet과 연결되지 않았다. 실제 Mainnet과 연결하려면 아래의 명령을 수행한다.

$ docker run --rm --name eosio -d -v ~/eosio-wallet: /root/eosio-wallet eosio/eos-dev/ bin/bash -c 'keosd'

그리고 cleos 단축키 만든다. 리눅스의 경우 "bashrc"파일에 아래의 문구를 삽입한다.


alias cleos='docker exec -it eosio /opt/eosio/bin/cleos --url http://127.0.0.1:7777 --wallet-url http://127.0.0.1:5555'

4) 실제 EOS Mainnet 과 연결되었는지 확인하기

$ cleos get info

위 명령을 수행하면 json파일 형식이 리턴 되는데 head_block_producer가 eosio로 되어 있으면 현재 메인넷과 연결이되지 않은 상태이고 eosio가 아닌 eoslaomaocom 등 이 나타난다면 정상적으로 EOS Mainnet과 연결된 것이다.

여기까지 정상적으로 끝냈다면 일단 컴퓨터에 EOS 노드가 만들어진 것이다. 다음에는 EOS 스마트 계약을 만들 수있는 CDT를 설치하도록 하자.

요새 이 쪽 바닥에서 핫하다는 EOS Blockchain 플랫폼을 맛보기 위한 작업에 착수하였다. 일단 관련 documentation과 인터넷 기사를 읽어보았다. 가장 눈에 띄는 사실은 블록체인 플랫폼인데 기존 centralized platform처럼 빠른 속도를 지향한다는 점이다. 예전 이더리움 플랫폼으로 무언가 만들어보려던 나는 너무 느린 속도에 상품성이 없을 거 같아서 중단한 적이 있다. 그런데 이더리움의 대항마로 혜성처럼 나타난 EOS는 그런 단점을 해결해 줄 수 있을 것 처럼 보인다.

지식이 거의 전무한 C++를 익혀야 된다는 사실이 좀 마음에 걸리지만 그냥 시작해 보기로 결심하였다.

Chapter 1-1 : Docker 설치하기

모든 개발작업이 그렇듯 EOS Dapp을 만드려면 개발 환경을 만들어주어야 하는데 그 첫번째는 Docker를 설치하는 작업이다. 혹시 모르는 독자들을 위해 Docker에 대해 설명이 잘되어 있는 블로그 페이지를 소개한다.

https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html

참고로 나는 Ubuntu 18.04 를 사용하고 있다.

1) 패키지 업데이트와 시스템 업그레이드

$ sudo apt update

$ sudo apt upgrade

2) 필수 dependency 설치

$ sudo apt install apt-transport-https ca-certificates curl software-properties-common

3) Docker's GPG 키와 repository 추가

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

4) 여기까지 하면 Docker repository 모두 설치완료 되었다. 그리고 다시 apt 패키지 업데이트 및 최신버전 Docker CE(community Edition) 설치하면 끝...

sudo apt update
sudo apt install docker-ce

5) Docker 버전 체크

docker -v

현재 기준 Docker의 최신 버전은 18.06.1 이다.

여기까지 하면 개발환경 구성 첫번째 단계인 Docker설치가 끝난다.


1. 미국 밖에서 인터넷으로 미국 방송 실시간 보기

대부분 아시겠지만 미국 밖에서 미국방송을 실시간으로 보기는 어렵습니다. 대부분의 웹사이트에서 저작권 문제로 해외에서 들어오는 아이피를 차단하기 때문이죠. 영화나 미드같은 건 넷플릭스 등으로 시청하면 되는데 스포츠나 UFC는 실시간으로 보지 않으면 재미가 반감되죠. 그래서 제가 이번 포스트에서 어떻게 하면 미국 방송을 실시간으로 볼 수 있을지에 대해서 포스팅을 해보려 합니다. 미국 방송을 실시간으로 스트리밍해주는 회사는 여러개가 있는데 이번에는 sling (https://www.sling.com/)이라는 회사를 소개해 드리겠습니다. 위 미국이 아닌 지역에서 URL로 접속해 보시면 아래와 같은 화면을 볼 수 있을 겁니다.

SLING TV는 미국 내에서만 접속가능하니 접속할 수 없다고 나옵니다. 인터넷을 사용할 시 사용자의 주소가 있는데 이를 아이피 주소라고 합니다. 이 주소를 미국 주소로 변경할 필요가 있습니다. 

2. Sling접속하기 위한 준비물: VPN

위에도 언급한 바와 같이 미국 방송을 실시간으로 보기 위해서는 미국아이피주소로 해당 웹사이트를 접속해야합니다. 따라서, 사용자의 아이피주소를 미국아이피주소로 바꿔주는 VPN이 필요합니다. ExpressVPN을 사용하여 보여드리도록 하겠습니다. ExpressVPN에 대해 자세한 내용은 아래  제 블로그 링크(http://mingmingking.com/11)를 참고해 주세요.

일단 ExpressVPN을 설치해 주시면 아래와 같은 프로그램이 설치가 됩니다. 

전원 버튼과 접속 장소(SELECTED LOCATION)을 선택하고 동그란 전원버튼을 눌러줍니다. 그럼 아래와 같이 됩니다. 


그럼 이제 이 상태로 인터넷에 접속하면 웹사이트는 한국이 아닌 미국 할리우드에서 접속하는 것으로 인식하죠. 왜냐하면 아이피 주소가 한국아이피주소가 아닌 미국할리우드 아이피주소니까요. 그럼 이 상태에서 SLING TV에 접속해 볼까요? 

접속이 됩니다. ㅎㅎㅎ "WATCH 7 DAYS FREE를 클릭하셔서 회원가입을 하시고요.

가입 옵션을 선택하세요. $25짜리 Orange와 Blue옵션과 $40짜리 옵션 1개가 있습니다. $40짜리는 이름이 없네요. $40짜리는 채널 수가 더 많습니다. 각 종 FOX, NBC 등의 뉴스프로는 물론 AMC, ESPN 등등 거의 모든 채널이 있다고 보시면 됩니다. 

그럼 스트리밍 화질을 확인해 보실까요? 


속도도 괜찮고 화질도 볼만합니다. 

만약 일주일 보시고 맘에 안들어 취소하고 싶으시다면 취소가능합니다. 아래 빨간화살표가 가르키는 설정버튼을 누르시고 Manage Account로 들어가신 후 Cancel Subscription을 클릭하시면 일주일이 지나도 결제되지 않습니다. 

참 쉽죠잉? 참고로 내일 모래 방영되는 McGregor vs KHABIB도 VPN과 SLING TV를 통해 실시간으로 볼 수 있습니다. 근데 이건 따로 돈을 더 지불해야하네요. ㅜㅜ 

그럼 이렇게 미국 티비 실시간 보기 포스팅을 마치겠습니다. 잘안되거나 궁금한 부분 있으면 비댓으로 남겨주세요. 




A random element in a python list can easily extracted with a newly added module called "secrets".

Without secrets module, you may consider a code as show below.


import random

alist= [1,3,4,5,3,2,1]

n = random.randint(0, len(alist)-1))

print(alist[n])


There is no problem in acheiving the goal, but it does not seem pythonic.

In python 3.6, a module called "secrets" was added. It describes as below.


"The secrets module is used for generating cryptographically strong random numbers suitable for managing data such as passwords, account authentication, security tokens, and related secrets."


Using the secrets module you can shorten the codes 2/3 as below. 


import secrets


alist= [1,3,4,5,3,2,1]

print(secrets.choice(alist))


It looks much better, cleaner so pythonic.






리스트에서 무작위로 배열안의 멤버를 추출하는 법을 소개한다.


아래처럼 random모듈로 난수(정수)를 발생시켜 추출하는 방법이 있다.


import random

alist= [1,3,4,5,3,2,1]

n = random.randint(0, len(alist)-1))

print(alist[n])


위 처럼 해도 무작위로 추출하는데 문제는 없다마는 코드가 조잡하고 알아보기 어렵다. 


python3.6에서 secrets 모듈이 새로 생겼다. 암호학 적으로 훨씬 좋은 난수 발생기라고 한다.


"The secrets module is used for generating cryptographically strong random numbers suitable for managing data such as passwords, account authentication, security tokens, and related secrets."


import secrets


alist= [1,3,4,5,3,2,1]

print(secrets.choice(alist))


코드가 3줄에서 두 줄로 줄었고 훨씬 보기 좋다.







뉴욕타임즈를 읽다가 유용한 표현이 나와서 공유합니다.

"그건 단지 형식일 뿐이야" 를 영어로 하면?


NYT 의 2016년 12월18일 자 기사 "The Electroal College Meets Monday. Here's What to Expect" 의 내용 중 일부입니다. 

미국에는 대선이 끝난 후 6주 뒤, 각 주별로 선거인단이 모여서 대선 승자를 확정하는 절차가 있나 봅니다.  뭐 다들 아시겠지만 미국대선의 경우 끝나기 전에도 전세계사람의 대부분은 누가 다음 미국 대통령이 될 지 알고 있습니다. 다만 이건 6주후에 해야하는 형식적 절차일 뿐이지요. 뉴욕타임즈에 이 표현이 나왔습니다. "단지 형식적인 절차에 지나지 않는다 = "It is little more than a formality"  이 표현이 제 눈에 들어왔습니다. 

WASHINGTON — On Monday, 538 people will meet to determine who will be the next president.

"These meetings of the Electoral College, convened in every state and the District of Columbia just shy of six weeks after Election Day, have long been little more than a formality."

These meeting of the Electoral College, 각주와 DC에서 대선 후 6주 후에 소집되는, 단지 형식적 절차에 불과하다.  

formality 라는 단어를 살펴보기전에 또 주목해야 할 표현이 있지요. "A is little more than B" 이라는 표현은 "A는 B보다 조금도 더 크지 않다" 즉 "A는 B에 불과하다" 라는 표현으로 보시면 되겠습니다. 만약에 "A is a little more than B"라고 했다면 뜻은 확 달라지죠. A는 B 보다 조금 더 크다" 라는 의미로 해석됩니다. 이런건 표현은 듣고 알아듣기가 힘들지요. 듣고 알아들을 때는 문맥상 알아들어야 할 때가 많습니다. 

응용을 해볼까요. 

그 절차들은 그냥 형식적 절차야. 
The procedures are not more than a formality
little more than 을 no more than으로 대체해 보았습니다. 더 알아듣기 쉽죠? 
저같이 네이티브 스피커가 아닌 사람들은 이런 표현을 사용하기가 훨씬 수월할 겁니다. 

혹은 

The procedures are just a formality 
더 단순한 표현이죠. 이럴 땐 어투가 좀 중요할 것 같습니다. 별로 중요하지 않다라는 느낌을 주는 어투로 말해야겠.




"현장에서 사로잡다 or 현장에서 잡다. "를 영어로 하면?

주로 수사기관에서 범인을 잡을 때 현행범을 잡다. 라는 표현을 씁니다. 이는 나쁜 짓을 한 후 시간이 지난 후에 체포하는 것이 아닌 그 자리에서 바로 체포하는 것을 의미합니다. 이를 영어로 표현할 할 때는 "catch someone in the act" 이라고 하면 됩니다.

응용을 해볼까요?

The police catch him in the act of stealing her money: 경찰은 그녀의 돈을 훔치는 그를 현장에서 체포했다.

수동태로 가보면...

He was caught in the act of stealing her money.

Usual Suspect라는 영화를 오랜 만에 보다가 갑자기 이 표현이 나와서 찾아봤어요.


두바이 정부의 '스마트 두바이' 관계자 Aisha Bin Bishr는 두바이 정부가 2020년까지 세계 최초로 전 도시의 블록체인(blockchain)화를 이루겠다고 발표했다. 이에 대해 과거 조그만 어촌에서 지구촌의 금융허브로 성장한 두바이가 또 다시 찾아오는 큰 변화의 물결을 준비하는 것이라고 WSJ은 긍정적으로 평했다.

전 도시의 블록체인화란 무엇일까?

블록체인이라는 용어를 한번 쯤은 들어 보았을 것이다. 최근 가장 핫한 가상화폐인 비트코인을 실현 시킨 기술이다. 비트코인이 가동되는 비트코인-블록체인은 2008년 최초로 만들어진 블록체인이고 현존하는 최대의 블록체인이지만 유일한 블록체인은 아니다. 현재 여러 종류의 블록체인이 존재하고 있으며 이 글을 읽고 있는 여러분도 고도의 프로그래밍 능력을 가지고 있다면 자기 자신만의 블록체인을 개발 할 수도 있다. 이처럼 두바이 정부는 자기들만의 블록체인 시스템을 만들겠다고 하는 것이다.

전 도시의 블록체인화를 알아보기 전 블록체인이란 무엇인지 부터 알아보자. 블록체인 기술이 4차 혁명을 일으킬 선봉장이라고들 모두들 말한다. 가장 핵심적인 이유는 블록체인은 거래 당사자들 사이에 존재하는 중개자를 완전히 없애 준다는 점에 있다. 보통 우리는 전혀 모르는 제 3자(untrustedd party)와 중요한 거래를 할 때 거래 안전성을 확보하기 위해 중개자를 고용한하고 상당한 대가를 지불한다. 돈을 송금할 때는 은행을 고용하고 부동산을 사거나 팔 때는 부동산 중개사를 고용한다. 또한 계약을 할 때는 변호사의 도움을 받고 기업은 은행에서 대출 받을 때 공인회계사의 도장을 받은 재무제표를 제출해야 한다. 하지만 블록체인 기술을 도입하면 위에 언급된 중개자들의 역할은 없어지고 자연스럽게 거래비용은 감소하고 거래 속도는 증가하게 된다.

비트코인이 어떻게 작동하는지를 이해하면 블록체인의 개념을 보다 쉽게 알 수 있다. 당신이 비트코인의 주소를 만들면 난수로 된 긴 Pulbic Key와 Secret Key를 받게 된다. 여기서 Public Key는 여러분의 비트코인 주소다. 이메일 주소와 비슷한 개념으로 누군가 당신에게 비트코인을 전송하기 위해서는 이 주소로 보내야 한다. 이름 그대로 누구에게나 공개된 키이다. 하지만 Secret Key는 주소의 소유자만 알고 있어야 하는 중요한 키다. 왜냐하면 Secret Key는 그 주소에 있는 비트코인을 전송할 수 있는 인증키이기 때문이다.

당신이 비트코인 주소를 만든 후 그 주소에 예치된 비트코인을 제 3자에게 보내는 거래를 생각해보자. 제 3자에게 비트코인을 전송할 때 당신은 Public Key와 Secret Key을 결합하여 특정한 "암호문"의 형태로 "내가 아무개에게 1BTC을 보냅니다."라는 사실을 비트코인-블록체인에 발표한다. 그럼 비트코인-블록체인에 존재하는 랜돔으로 선택된 누군가가 공포된 암호문이 정말로 당신의 Secret Key로 만들어진 암호문인지 암호문과 Public Key를 참고해 수학적으로 검증한다. 해당 거래가 유효한(Valid) 거래인지를 수학적으로 검증하는 절차이다. 이 검증이 문제 없이 완료되면 당신이 공포한 거래는 정식으로 비트코인-블록에 기록되고 영원히 블록에 남게 되어 거래가 완료되는 것이다. 이러한 거래들이 여러 개 묶여서 10분에 한번 씩 생성되는 블록에 기록되고 그 블록들이 체인에 묶여 영원히 사라지지 않는다고 해 이 기술을 블록체인이라고 부르는 것이다. 이렇게 기록된 블록들은 실시간으로 전 블록체인 멤버들에게 공유된다. 이 때 당신의 암호문을 검증하는 사람을 비트코인 마이너(miner)라고 하며 그런 행위를 "비트코인을 캔다"라고 한다. 검증을 하는 사람에게 약간의 비트코인 거래를 검증하게 할만한 인센티브 시스템을 만듬으로서 비트코인-블록체인이 원활하게 돌아가게 하는 것이다.

블록체인의 꽃은 중요한 것은 검증 작업이다. 이 검증은 흔히 생각하는 단순 계산기나 일반 개인용 컴퓨터로 할 수 있는 수준이 아니고 엄청난 컴퓨팅 파워를 가지고 있는 비트코인 채굴 전용 컴퓨터로만 가능하다. (참고로 비트코인 초기에는 채굴 난이도가 낮아 일반 PC로도 가능했지만 현재는 워낙 경쟁이 심해 일반 컴퓨터로는 채굴 근처에 가지도 못한다.) 이 검증 작업에서는 그 암호문이 당신의 Secret Key로 만들어진 암호문이라는 것 여부만 확인 할 수는 있을 뿐 Secret Key가 무엇인지는 알기는 사실 상 불가능하다. 즉 암호문이 유효한 것인지 Yes or No만 검증할 수 있을 뿐  Secret Key에 대한 정보는 알아내는 것이 사실상 불가능하다. (사실상 불가능하다는 뜻은 가능하긴 한데 엄청난 자원과 엄청난 컴퓨팅 파워가 필요해 Secret Key를 알아내는 비용이 그 효익을 초과한다는 뜻이다.) 따라서 검증이 완료된 후에도 Secret Key는 여전히 당신만 알고 있게 되는 것이다. 이런 식으로 블록체인 내 구성원들 끼리 일방향성 수학적 암호문을 이용해 검증하는 방식으로 거래가 이루워지기 때문에 중개자가 필요가 없다. 다만, 비트코인 마이너에게 제공하는 상대적으로 낮은 금액의 비트코인 수수료만 있을 뿐이다.

아직 상용화가 되지는 않았지만 딜로이트, IBM 등 다국적 회사들은 앞다투어 여러 분야에 블록체인 도입을 시도하고 있다. 하지만 정부기관이 나서서 도시 전체를 블록체인화 하겠다는 계획을 밝힌건 두바이가 처음이다. 비트코인은 블록체인 기술을 이용한 최초의 발명품으로서 10년 가까이 안정적으로 운영되고 있다. 이러한 사실은 블록체인 기술이 가상화폐 뿐 아니라 다른 분야에도 효과적으로 이용될 수 있다는 사실을 암시하고 있다. 블록체인 기술은 가상화폐에만 사용할 수 있는 것이 아니고 재고 추적, 스마트 계약서, Initial Public Offering(IPO), 부동산 등기부등본, 각족 자격증명서 발부, 국제자본거래 등 적용할 수 있는 부분이 무궁무진하다는 것이 전문가들의 일치되는 의견이다. 블록체인 기술로 하나의 거대한 값싸고 안전한 데이터베이스를 만들 수 있다는 것이다. 두바이는 이런 블록체인 기술을 이용해 현재 까지 종이로 이루어지는 계약을 블록체인을 사용한 스마트 계약서로 바꾸고 각 사업자 등록 그리고 자격증 발급과 같은 공공기관에서 이루어진는 모든 절차를 블록체인화 하겠다고 밝혔인 것이다.

+ Recent posts