eos는 다른 블록체인과 달리 계정과 지갑이 분리되어 있다.
1개의 지갑에 n개의 계정이 연결될 수도 있으며 1개의 지갑에 n개의 키가 등록가능하다.
지갑과 계정을 생성하는 과정을 요약하면 아래와 같다.
- 지갑을 생성하고
- 지갑에 키를 생성한 뒤
- 생성된 공개키를 계정에 연결해 줘야 한다.
자세히 알아보자.
1. 지갑 만들기
# cleos wallet create -n <지갑이름> --to-console
위 명령으로 생성을 하면 비밀번호가 표시된다. 이 비밀번호는 지갑내의 개인키가 아니라 지갑 그 자체의 비밀번호이다. 지갑의 명령을 수행할때 확인하므로 반드시 기록해 놔야 한다.
"-n <지갑이름>" 을 지정하지 않으면 default 지갑이 된다.
2. 지갑에 키 연동하기
# cleos wallet private_keys -n <지갑이름>
처음 지갑을 만들고 난뒤에 위 명령으로 키를 확인해 보면 비어있다. 지갑에 키를 연동하는 방법은 두가지 방법이 있다.
하나는 기존에 가지고 있는 키를 import 하는 방법이고 또 다른 하나는 자동으로 생성해서 연동시키는 방법이 있다.
1) 기존에 가지고 있는 키 연동하기
# cleos wallet import -n <지갑이름>
# private key:
import 명령을 내리고 private key 를 입력한다. 키 입력시 화면에 표시되지 않는다. 붙여넣기 할때는 마우스 오른쪽 버튼을 누르면 된다.
지갑은 기본적으로 15분이 지나면 자동으로 닫힌다. (~/eosio-wallet/config.ini 파일내에 unlock-timeout 항목에서 시간을 변경할 수 있다)
혹시 지갑이 닫혀 있을 경우에는 open 하고 unlock 한 다음에 다시 해보면 된다.
open 하고 unlock 하기
# cleos wallet open -n <지갑이름>
# cleos wallet unlock -n <지갑이름>
# password:
password: 는 "1. 지갑 만들기" 에서 기록한 비밀번호를 입력한다.
import 가 잘되었는지 확인한다.
# cleos wallet private_keys -n <지갑이름>
화면에 개인키와 공개키가 표시되는 걸 볼 수 있다.
2) 자동으로 생성해서 연동시키기
# cleos wallet create_key -n <지갑이름>
# password:
password: 는 "1. 지갑 만들기" 에서 기록한 비밀번호를 입력한다.
※ 지갑 삭제하기
지갑은 ~/eosio-wallet/ 경로에 <지갑이름>.wallet 로 저장되어 있다. 해당 파일을 삭제하고 아래 명령어로 keosd 데몬을 stop 시킨다.
# cleos wallet stop
시작명령은 따로 없고 cleos wallet list 와 같은 명령을 수행하면 자동으로 시작된다.
# cleos wallet list
위 명령으로 확인해보면 지갑이 삭제된 것을 확인할 수 있다.
3. 계정 생성과 지갑과의 연동
# cleos create account <기존계정> <새계정> <owner key> <active key>
eos는 계정을 만들때 기존의 다른 계정이 필요하다. staking 이란 개념이 있어서인데 여기서는 다루지 않겠다. eosio 를 설치하면 eosio 라는 이름의 시스템 계정이 존재한다. 다른 계정을 지정하지 않을것이라면 <기존계정> 에 "eosio" 를 입력한다.
<새계정> .12345abcdefghijklmnopqrstuvwxyz 만 허용하며 12자리까지 입력할 수 있다.
<owner key> 와 <active key>는 위에서 생성한 지갑내의 공개키를 입력하면 된다. <active key> 를 생략하면 <owner key> 와 동일하게 생성된다. 두개를 다르게 하는것이 보안에 좋으며 다르게 하기 위해서는 해당지갑에 개인키/공개키 쌍이 두개가 있어야 한다.
이렇게 공개키를 지정함으로서 계정과 지갑이 연동이 된다. 계정에서 트랙잭션을 수행할때 연동된 지갑의 키로 서명을 한다.
기존에 존재하는 계정에 키를 변경하려면 아래와 같이 하면 된다.
# cleos set account permission <계정이름> active <공개키> -p <계정이름>@owner
# cleos set account permission <계정이름> owner <공개키> -p <계정이름>@owner