EOS 지갑 만들기 및 Key 연동
공식 문서인 https://github.com/EOSIO/eos/wiki/Tutorial-Comprehensive-Accounts-and-Wallets 를 기준으로 약간의 커스터마이징과 과도한 친절함을 가미했다.
EOSIO 아키텍처 다시 보기
이 글에서는 위 3가지 컴포넌트 중 cleos
와 keosd
에 대해 알아본다.
지갑
지갑은 블록체인의 상태에 영향을 미치는 액션을 승인할 때 필요한 비밀키를 담고 있는 저장소다. 지갑 데이터는 keosd
에 의해 관리 되지만 대부분 직접 keosd
명령을 실행하지 않고 cleos
를 통해 keosd
를 실행한다.
keosd
는 지갑 파일을 기본 옵션으로 ~/eosio-wallet
디렉터리에 저장한다.
지갑 목록 확인
위 캡처 화면 내용은 다음과 같다.
cleos wallet
명령으로keosd
를 실행하기 전에는~/eosio-wallet
디렉터리는 생성되어 있지 않다.cleos wallet list
명령을 실행하면keosd
가 실행되고 지갑 목록이 표시된다. 아직 지갑을 생성하지 않았으므로 지갑 목록은 비어 있다. 이처럼cleos wallet
명령을 통해keosd
가 자동으로 실행되므로 별도로 직접keosd
명령을 실행할 필요가 없다.ps -ef | grep keosd
명령을 실행하면keosd
가 실행되어 있고http://127.0.0.1/8900
으로 접근할 수 있음을 알 수 있다.keosd
가 실행되면서~/eosio-wallet
디렉터리와keosd
설정 파일인config.ini
파일이 생성된다.
지갑 생성
지갑의 생성도 다음과 같이 cleos
명령을 통해 실행한다. 지갑은 nodeos
의 실행 여부와 관계없이 생성될 수 있다.
cleos wallet create
이름이 default인 지갑은 이제 keosd
의 관리 대상에 포함되며 마스터 패스워드가 생성되고 화면에 표시된다. 이 패스워드로 지갑 파일의 잠금을 해제할 수 있으므로 분실되지 않도록 잘 보관해야 한다.
keosd
는 지갑 파일을 ~/eosio-wallet
폴더에 저장한다(eos/programs/keosd/main.cpp 에 하드코딩 되어 있음).
ll ~/eosio-wallet
참고: 공식 문서(https://github.com/EOSIO/eos/wiki/Tutorial-Comprehensive-Accounts-and-Wallets)에는 --data-dir
옵션으로 지갑 파일이 저장되는 데이터 폴더를 지정할 수 있다고 언급되어 있지만, 어느 명령의 --data-dir
옵션으로 지정해야하는지 정확하게 나와있지 않다. keosd
명령의 --data-dir
이나 --wallet-dir
옵션으로 다른 폴더를 지정하더라도 ~/eosio-wallet
폴더에 지갑 파일이 생성된다.
-n
옵션을 이용하면 이름을 지정해서 지갑을 생성할 수도 있다. 따옴표를 이용하면 공백이 포함된 이름도 가능하다. 이 글을 처음 쓸 때는 공백이 허용됐었는데 아래 화면과 같이 2018-06-07에 관련 소스가 변경되어 공백은 허용되지 않고 알파벳과 숫자, ._-
만 허용된다.
따라서 아래에 나오는, 공백이 포함된 Homo Efficio
는 더이상 유효하지 않으며 Homo-Efficio
라고 썼다고 가정하자(다시 다 캡처해서 올리자니 눈물이.. ㅠㅜ).
cleos wallet create -n 'Homo Efficio'
지갑 목록 확인
cleos wallet list
생성한 지갑 목록이 표시된다. *
표는 지갑이 잠금 해제(unlocked) 되어 있음을 의미한다.
cleos wallet create
명령으로 생성된 지갑은 편의상 잠금 해제된다.
지갑 잠금
아래와 같이 'Homo Efficio' 지갑을 잠그고 지갑 목록을 확인하면 'Homo Efficio' 지갑 옆에는 *
표시가 나타나지 않는다.
cleos wallet lock -n 'Homo Efficio'
cleos wallet list
지갑이 잠긴 상태에서는 블록체인에 상태 변화를 일으키는 액션을 수행할 수 없다.
지갑 열기
이제 keosd
를 종료하고 다시 시작하면 어떤 현상이 발생하는지 알아보자.
cleos wallet stop
명령으로 keosd
를 종료할 수도 있고, 브라우저에서 http://localhost:8900/v1/keosd/stop
에 접속해서 keosd
를 종료할 수도 있다.
다시 cleos wallet list
명령을 실행하면 keosd
가 자동으로 실행되지만 앞에서 생성한 지갑 목록은 표시되지 않는다.
이유는 cleos wallet create
로 지갑을 생성했을 때는 지갑이 잠금해제 된 상태로 만들어지고 열린(open) 상태가 되지만, keosd
가 종료되면 지갑은 자동으로 잠금 상태가 되고 닫힌 상태가 되기 때문이다.
cleos wallet open
명령을 실행하면 default
지갑이 열리고 cleos wallet list
명령을 실행하면 지갑 목록에 표시되지만, 잠금 상태는 해제되지 않으므로 *
는 표시되지 않는다.
cleos wallet unlock
명령을 실행하고 패스워드를 입력하면 default
지갑이 잠금 해제 되어 *
가 표시된다.
이름을 지정해서 만든 'Homo Efficio' 지갑도 열고, 잠금해제 한다.
Key 생성 및 지갑 연동
EOSIO의 공개키/비밀키를 생성하는 방법은 여러가지가 있지만, 일단 cleos
를 사용해서 만들어보자.
cleos create key
거듭 강조하지만 튜토리알 말고 실제 사용할 때는 Private key를 아무에게도 노출해서는 안되며 분실되지 않도록 잘 보관해야 한다.
'Homo Efficio' 지갑에 방금 생성한 key를 연동해보자. 역시 cleos
를 사용한다.
cleos wallet import -n 'Homo Efficio' PRIVATE_KEY_VALUE
연동할 때 입력한 비밀키의 쌍인 공개키 값이 화면에 표시된다. 앞에서 공개키/비밀키 생성 시 Public key로 표시된 값과 같다.
하나의 지갑에 여러개의 키를 연동할 수 있다. 다음과 같이 키 쌍을 하나더 생성하고 연동해보자.
cleos wallet keys
명령을 사용하면 잠금 해제된 모든 지갑에 연동된 공개키/비밀키 쌍의 목록이 표시된다.
cleos wallet keys
특정 지갑에 연동된 키 목록만을 조회하는 방법은 없는 것 같다. EOSIO 1.0.2 에서는 다음과 같이 private_keys
서브명령으로 특정 지갑에 연동된 키 쌍 목록을 조회할 수 있다. 실행하려면 지갑의 비밀번호가 필요하며 비밀키까지 같이 확인할 수 있다.
cleos wallet private_keys -n 'default'
cleos wallet create_key
명령을 사용하면 cleos create key
와 cleos wallet import
두 번의 명령으로 하던 작업을 한 번의 명령으로 실행할 수 있다.
지갑 백업
지갑의 백업은 단순하다 ~/eosio-wallet
디렉터리에 있는 지갑 파일을 다른 곳으로 복사해서 백업하면 된다.
저도 EOS DApp관련 글을 쓰고 있는데, 정말 친절한 글이네요^^
감사합니다. 둘러보니 이미 많이 앞서 나가고 계시는군요! 많이 참고하겠습니다. ^^
보고 열심히 따라하고 있습니다! 감사합니다 :)
저도 오늘 저녁에 한번 해볼래요. 저 #컴맹 이지만. ^^