EOS 계정과 권한

Youngbae An
RayonProtocol
Published in
9 min readJun 22, 2018

--

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"    ]}

--

--