EOS 계정과 권한
eosio에서 사용되는 계정(account), 지갑(wallet), 키 쌍(key pairs), 권한(permission)에 대한 개념과 연관관계를 살펴본다.
cleos 명령어를 실행하여 동작을 확인해 본다.
참고 문서는 EOSIO 공식 wiki문서 내 계정과 권한 문서를 참고하였다.
지갑 (wallet)
key pair들을 저장하는 공간이다. wallet들은 lock 또는 unlock 상태를 가질 수 있으며, unlock을 위해서는 비밀번호를 입력해야 한다. wallet들은 ‘keosd’ 명령어에 의해 관리되며, ‘cleos’ 명령어를 통해 값을 확인 할 수 있다.
계정 (account)
블록체인에 저장된 사람이 읽을 수 있는 형태의 식별자이다. 블록체인에 트랜잭션을 배포 하거나 실행할때 사용된다. account는 ‘owner’ 와 ‘active’에 해당하는 permission을 필요로 한다.
이더리움과 비슷하게 EOS의 계정도 token을 소유하는 사용자 계정과 contract의 계정으로 구성 할 수 있다.
권한 (permission)
모든 account는 ‘owner’ 와 ‘active (사용자)’에 해당하는 permission을 필요로 한다.
- owner : 계정의 소유권을 나타내는 권한. 해당 계정의 가장 높은 권한이다.
- active : 토큰 전송, 블록 프로듀서에게 투표 등 활동에 대한 권한. owner 다음의 높은 권한이다.
account 의 owner key는 계정의 속성을 변경할때 필요한 key이므로 분실되지 않게 잘 보관해두고, contract를 배포하거나 실행 할대는 active key를 이용하여 수행하면 된다.
Wallet 명령어들
wallet 생성
- ‘cleos wallet create’을 실행한다
- default wallet은 ‘default’ 이다.
- 생성된 wallet에 대한 정보는 ‘~/eosio-wallet’에 저장된다.
- 생성시 ‘master password’가 표시된다. 이 비밀번호는 잘 보관해두어야 한다.
default wallet 생성 명령어:
$ cleos wallet create
Creating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5JCiKLtsJjeoS7xG8vE452ixLBLwsi1rv5mjKNJ1cN5uvrf1JLw"
다른 이름의 wallet 생성 (-n name) 명령어:
$ cleos wallet create -n periwinkle
Creating wallet: periwinkle
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5J88idpePpBnymRaBMaULeekVo8oHhuur2oSn4PPW9Sa14kBquN"
wallet 목록 확인
- ‘cleos wallet list’ 로 확인 한다.
$ cleos wallet list
Wallets:
[
"default *",
"periwinkle *"
]
표시된 두 지갑에 각각 아스테리스크(*) 표시가 돼 있는 것은 잠금 해제돼 있다는 의미이다.
wallet lock & unlock
lock 명령어:
$ cleos wallet lock -n periwinkle
Locked: periwinkle
목록 확인 명령어:
$ cleos wallet list
Wallets:
[
"default *",
"periwinkle"
]
unlock 명령어
- unlock시 wallet의 master password를 입력해야 한다.
$ cleos wallet unlock -n periwinkle
- password 옵션으로 master password입력이 가능하다. 단 노출되기 때문에 보안에 취약하다.
$ cleos wallet unlock -n periwinkle --password PW5J88idpePpBnymRaBMaULeekVo8oHhuur2oSn4PPW9Sa14kBquN
Unlocked: periwinkle
key pair 명령어들
- key를 생성하고 wallet에 import를 시켜야 한다.
- wallet에 여러 key를 등록 할 수 있다.
key pair 생성
$ cleos create key
Private key: 5JKprrPtW4xoqKSbXgdWUobWThjGMHoW13PGBNrmBhyioj26Bnr
Public key: EOS8T18b3xLfWqVoTHbH57QXwMUTKYvtytbyWsit6AjCdYxQeEarx
$ cleos create key
Private key: 5KUxWKzxjvT9xBvEJcaUS9sPMRQoJ2bZhx4xhDZUMwV1GMKJrdZ
Public key: EOS8Duao8YYNVgnyYv4BxDu75tCZk8tbAraUkiPBy9SwvRUZ7VxBx
wallet에 key pair import
생성된 key를 wallet에 import한다:
$ cleos wallet import <private key> -n <wallet name>$ cleos wallet import 5JKprrPtW4xoqKSbXgdWUobWThjGMHoW13PGBNrmBhyioj26Bnr
imported private key for: EOS8T18b3xLfWqVoTHbH57QXwMUTKYvtytbyWsit6AjCdYxQeEarx
$ cleos wallet import 5KUxWKzxjvT9xBvEJcaUS9sPMRQoJ2bZhx4xhDZUMwV1GMKJrdZ -n periwinkle
imported private key for: EOS8Duao8YYNVgnyYv4BxDu75tCZk8tbAraUkiPBy9SwvRUZ7VxBx
key 목록 확인
$ cleos wallet keys
[
"EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
"EOS8Duao8YYNVgnyYv4BxDu75tCZk8tbAraUkiPBy9SwvRUZ7VxBx",
"EOS8T18b3xLfWqVoTHbH57QXwMUTKYvtytbyWsit6AjCdYxQeEarx"
]
위에 등록한 2개의 key가 포함되어 있다.
‘EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV’는 eosio 계정이 사용하는 키로 자동으로 포함되어 있는데, 그렇지 않다면 다음 명령을 실행시켜서 키를 import한다.
$ cleos wallet import 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
account 명령어들
account 생성
다음 명령어로 실행한다.
$ cleos create account ${authorizing_account} ${new_account} ${owner_key} ${active_key}
- authorizing_account: 계정 생성과 새 계정을 위한 비용을 지불할 계정의 이름. ‘eosio’ 계정으로 노드를 부팅하기 위해 사용되는 특별한 계정이다.
- new_account: 생성할 계정의 이름
- owner_key: 계정의 owner permission에 할당되는 public key
- active_key: 계정의 active permission에 할당되는 public key
$ cleos create account eosio account1 EOS8T18b3xLfWqVoTHbH57QXwMUTKYvtytbyWsit6AjCdYxQeEarx EOS8Duao8YYNVgnyYv4BxDu75tCZk8tbAraUkiPBy9SwvRUZ7VxBxexecuted transaction: 96d01abfce7c9b165b0a260d75b8eb31c30d87aee2c8997a1d5ed5c486ea1909 200 bytes 311 us# eosio <= eosio::newaccount {"creator":"eosio","name":"account1","owner":{"threshold":1,"keys":[{"key":"EOS8T18b3xLfWqVoTHbH57QX...warning: transaction executed locally, but may not be confirmed by the network yet
account 정보 확인
생성된 account의 정보를 조회한다:
$ cleos get account account1permissions:owner 1: 1 EOS8T18b3xLfWqVoTHbH57QXwMUTKYvtytbyWsit6AjCdYxQeEarxactive 1: 1 EOS8Duao8YYNVgnyYv4BxDu75tCZk8tbAraUkiPBy9SwvRUZ7VxBxmemory:quota: unlimited used: 2.66 Kbnet bandwidth:used: unlimitedavailable: unlimitedlimit: unlimitedcpu bandwidth:used: unlimitedavailable: unlimitedlimit: unlimited
public key로 속해있는 account 목록 확인한다:
$ cleos get accounts EOS8T18b3xLfWqVoTHbH57QXwMUTKYvtytbyWsit6AjCdYxQeEarx{ "account_names": [ "account1" ]}