EOS 지갑 만들기 및 Key 연동

공식 문서인 https://developers.eos.io/eosio-nodeos/docs/learn-about-wallets-keys-and-accounts-with-cleos 를 기준으로 약간의 커스터마이징과 과도한 친절함을 가미했다.

EOSIO 아키텍처 다시 보기

Imgur

이 글에서는 위 3가지 컴포넌트 중 cleoskeosd에 대해 알아본다.

지갑과 계정

지갑(Wallet)

지갑은 블록체인의 상태에 영향을 미치는 연산을 승인할 때 필요한 공개키-비밀키 쌍을 담고 있는 저장소다. 지갑 데이터는 keosd에 의해 관리 되지만 대부분 직접 keosd 명령을 실행하지 않고 cleos를 통해 keosd를 실행한다.

keosd는 지갑 파일을 기본 옵션으로 ~/eosio-wallet 디렉터리에 저장한다.

계정(Account)

계정은 블록체인에 대한 접근 권한을 가진 식별자라고 할 수 있다. nodeos가 계정의 발행과 블록체인에 대한 계정 관련 액션(action)을 관리하지만, cleos를 통해서도 관리할 수 있다.

지갑과 계정의 관계

직관적으로는 계정이 지갑을 가지고 있을 것 같지만, EOS의 지갑과 계정은 직접적인 관계가 없다. 계정은 지갑의 존재를 모르고, 지갑은 계정의 존재를 모른다. 둘 사이에 직접적인 관계가 없음은 위의 EOSIO 아키텍처 그림에서도 알 수 있다. nodeoskeosd 사이에는 직접적인 관계가 없고 서로의 존재를 모른다.

둘 사이에 간접적이나마 관계가 발생하는 것은 서명이 필요할 때다. 지갑을 사용하면 보안을 위해 암호화되어 잠금 처리를 할 수 있는 로컬 저장 공간에서 서명을 효율적으로 가져올 수 있다. 키 조회를 담당하는 keosd와 키를 사용하는 서명을 필요로 하는 액션 처리를 담당하는 nodeos 사이에서 cleos가 효과적인 중재자 역할을 담당한다.

지갑 목록 확인

Imgur

위 캡처 화면 내용은 다음과 같다.

  1. cleos wallet 명령으로 keosd를 실행하기 전에는 ~/eosio-wallet 디렉터리는 생성되어 있지 않다.

  2. cleos wallet list 명령을 실행하면 keosd가 실행되고 지갑 목록이 표시된다. 아직 지갑을 생성하지 않았으므로 지갑 목록은 비어 있다. 이처럼 cleos wallet 명령을 통해 keosd가 자동으로 실행되므로 별도로 직접 keosd 명령을 실행할 필요가 없다.

  3. ps -ef | grep keosd 명령을 실행하면 keosd가 실행되어 있고 http://127.0.0.1/8900으로 접근할 수 있음을 알 수 있다.

  4. keosd가 실행되면서 ~/eosio-wallet 디렉터리와 keosd 설정 파일인 config.ini 파일이 생성된다.

지갑 생성

지갑의 생성도 다음과 같이 cleos 명령을 통해 실행한다. 지갑은 nodeos의 실행 여부와 관계없이 생성될 수 있다.

cleos wallet create

Imgur

이름이 default인 지갑은 이제 keosd의 관리 대상에 포함되며, 생성된 지갑의 마스터 패스워드가 생성되고 화면에 표시된다. 이 패스워드로 지갑 파일의 잠금을 해제할 수 있으므로 분실되지 않도록 잘 보관해야 한다.

keosd는 지갑 파일을 ~/eosio-wallet 폴더에 저장한다(eos/programs/keosd/main.cpp 에 하드코딩 되어 있음).

ll ~/eosio-wallet

Imgur

참고: 공식 문서(https://developers.eos.io/eosio-nodeos/docs/learn-about-wallets-keys-and-accounts-with-cleos) 에는 keosd--data-dir 옵션으로 지갑 파일이 저장되는 데이터 폴더를 지정할 수 있다고 언급되어 있다. 하지만 이후 내용에서 keosd를 직접 실행하는 부분이 없고 cleos만을 사용하며, keosd를 사용하지 않으므로 --data-dir를 써서 지갑 데이터가 저장될 위치를 따로 지정할 기회가 없고, 결국 기본값대로 ~/eosio-wallet 폴더에 지갑 파일이 생성된다.

-n 옵션을 이용하면 이름을 지정해서 지갑을 생성할 수도 있다. 따옴표를 이용하면 공백이 포함된 이름도 가능하다. 이 글을 처음 쓸 때는 공백이 허용됐었는데 아래 화면과 같이 2018-06-07에 관련 소스가 변경되어 공백은 허용되지 않고 알파벳과 숫자, ._-만 허용된다.

Imgur

따라서 아래에 나오는, 공백이 포함된 Homo Efficio는 더이상 유효하지 않으며 Homo-Efficio라고 썼다고 가정하자(다시 다 캡처해서 올리자니 눈물이.. ㅠㅜ). 다시 캡처해서 업데이트 완료.

cleos wallet create -n Homo-Efficio

Imgur

지갑 목록 확인

cleos wallet list

Imgur

생성한 지갑 목록이 표시된다. *표는 지갑이 잠금 해제(unlocked) 되어 있음을 의미한다.

cleos wallet create 명령으로 생성된 지갑은 편의상 잠금 해제된다.

지갑 잠금

아래와 같이 ‘Homo-Efficio’ 지갑을 잠그고 지갑 목록을 확인하면 ‘Homo-Efficio’ 지갑 옆에는 * 표시가 나타나지 않는다.

cleos wallet lock -n Homo-Efficio

cleos wallet list

Imgur

지갑이 잠긴 상태에서는 블록체인에 상태 변화를 일으키는 액션을 수행할 수 없다.

지갑 열기

이제 keosd를 종료하고 다시 시작하면 어떤 현상이 발생하는지 알아보자.

cleos wallet stop 명령으로 keosd를 종료할 수도 있고,

Imgur

브라우저에서 http://localhost:8900/v1/keosd/stop에 접속해서 keosd를 종료할 수도 있다.

Imgur

ps -ef | grep keosd로 확인하면 keosd 프로세스가 죽은 것을 확인할 수 있다.

Imgur

다시 cleos wallet list 명령을 실행하면 keosd가 자동으로 실행되지만 앞에서 생성한 지갑 목록은 표시되지 않는다.

Imgur

이유는 cleos wallet create로 지갑을 생성했을 때는 지갑이 잠금해제 된 상태로 만들어지고 열린(open) 상태가 되지만, keosd가 종료되면 지갑은 자동으로 잠금 상태가 되고 닫힌 상태가 되기 때문이다.

cleos wallet open 명령을 실행하면 default 지갑이 열리고 cleos wallet list 명령을 실행하면 지갑 목록에 표시되지만, 잠금 상태는 해제되지 않으므로 *는 표시되지 않는다.

Imgur

cleos wallet unlock 명령을 실행하고 패스워드를 입력하면 default 지갑이 잠금 해제 되어 *가 표시된다.

Imgur

이름을 지정해서 만든 ‘Homo-Efficio’ 지갑도 열고, 잠금해제 한다.

Imgur

Key 생성 및 지갑 연동

EOSIO의 공개키/비밀키를 생성하는 방법은 여러가지가 있지만, 일단 cleos를 사용해서 만들어보자.

cleos create key

Imgur

거듭 강조하지만 튜토리얼 말고 실제 사용할 때는 Private key를 아무에게도 노출해서는 안되며 분실되지 않도록 잘 보관해야 한다.

‘Homo-Efficio’ 지갑에 방금 생성한 key를 연동해보자. 역시 cleos를 사용한다.

cleos wallet import -n Homo-Efficio PRIVATE_KEY_VALUE

Imgur

연동할 때 입력한 비밀키의 쌍인 공개키 값이 화면에 표시된다. 앞에서 공개키/비밀키 생성 시 Public key로 표시된 값과 같다.

하나의 지갑에 여러개의 키를 연동할 수 있다. 다음과 같이 키 쌍을 하나더 생성하고 연동해보자.

Imgur

cleos wallet keys 명령을 사용하면 잠금 해제된 모든 지갑에 연동된 공개키의 목록이 표시된다.

cleos wallet keys

Imgur

참고: 키 2개를 연동한 Homo-Efficio를 지정해서 공개키를 조회했는데 3개가 조회되어 나온다. 이유는 지갑을 생성하면 따로 연동하지 않아도 기본으로 1개의 키(default 지갑에 연동된 것과 같은 키)가 새로 생성한 지갑에 연동되기 때문 -> 이 부분은 v1.0.4에서 패치되어 default 지갑에 연동된 것과 같은 키는 지갑에 연동되지 않고 사용자가 직접 지갑에 연동한 키만 연동된다. 따라서 v1.0.4 이후 버전에서는 직접 연동한 2개만 화면에 표시된다.

특정 지갑에 연동된 키 목록만을 조회하는 방법은 없는 것 같다. EOSIO 1.0.2 에서는 다음과 같이 private_keys 서브명령으로 특정 지갑에 연동된 공개키/비밀키 쌍 목록을 조회할 수 있다. 실행하려면 지갑의 비밀번호가 필요하며 비밀키까지 같이 확인할 수 있다.

cleos wallet private_keys

Imgur

cleos wallet private_keys -n Homo-Efficio

Imgur

참고: 키 2개를 연동한 Homo-Efficio를 지정해서 비밀키를 조회했는데 3개가 조회되어 나온다. 이유는 지갑을 생성하면 따로 연동하지 않아도 기본으로 1개의 키(default 지갑에 연동된 것과 같은 키)가 새로 생성한 지갑에 연동되기 때문 -> 이 부분은 v1.0.4에서 패치되어 default 지갑에 연동된 것과 같은 키는 지갑에 연동되지 않고 사용자가 직접 지갑에 연동한 키만 연동된다. 따라서 v1.0.4 이후 버전에서는 직접 연동한 2개만 화면에 표시된다.

cleos wallet create_key 명령을 사용하면 cleos create keycleos wallet import 두 번의 명령으로 하던 작업을 한 번의 명령으로 실행할 수 있다.

Imgur

cleos wallet keys

Imgur

cleos wallet private_keys -n Homo-Efficio

Imgur

참고: 3개가 아니라 4개가 나오는 이유는 앞서 말한 것과 같음

지갑 백업

지갑의 백업은 단순하다 ~/eosio-wallet 디렉터리에 있는 지갑 파일을 다른 곳으로 복사해서 백업하면 된다.

Imgur


크리에이티브 커먼즈 라이선스HomoEfficio가 작성한 이 저작물은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.