EOS의 지갑과 계정에 대해서

in busy •  7 years ago 

image.png



들어가며


안녕하세요.

["EOS를 build해보자"]
["EOS의 RPC를 살려보자!"]

에 이은 세번째 글입니다. 첫번째 글에서는 git을 통해서 EOS를 build했고,
두번째는 EOS 서버를 돌리면서(로컬 서버) RPC를 살려서 HTTP나 CURL을 통해서 실제 RPC를 수행해 보았습니다.

오늘은 EOS Contract등을 만들기 전에 가장 기본적인 개념인 EOS의 wallet(지갑과) account(계정)의 개념과 생성에 대해서 알아보려고 합니다.

(source : https://github.com/EOSIO/eos/wiki/Tutorial-Comprehensive-Accounts-and-Wallets)
위의 소스에 있는 tutorial의 한국판 버전이라는 생각으로 글을 쓰게 되었고, 제 로컬 노드에서 시험한 log를 함께 올리도록 하겠습니다.

10일 전에 작성된 tutorial로 따끈따끈 한데요, EOS mainnet의 master branch는 더 따끈따끈 합니다.



기본적인 개념들

nodeos : 실제 block을 생성하고, 다른 peer와의 연결을 통해서 block의 confirm을 수행합니다. 또한 RPC기능도 제공을 하고, 더불어 account생성의 기능을 수행합니다. 꼭 별도의 command로 실행을 시켜 주어야 합니다. plugin을 포함하여 실행 시키는 것은 2번째의 링크를 참조 부탁 드립니다.

cleos : nodeos or keosd와 RPC를 통해서 여러가지 명령을 수행합니다.

keosd : 지갑의 관리를 수행합니다.
image.png
(source : https://github.com/EOSIO/eos/wiki/Tutorial-Comprehensive-Accounts-and-Wallets)

wallet : public key-private key의 저장소입니다.

account : 특정한 권한을 가지는 블록체인에 접근 가능한 구분자 혹은 ID입니다.

Steem의 예를 들면 Vessel이라는 wallet이 있고, 제가 글을 쓰는 jeaimetu라는 계정이 있는 것과 같은 관계입니다. 다만 wallet과 account는 직접적인 관계를 가지고 있지는 않습니다.

그림에서 보시는 것 처럼 아예 관리하는 주체와 storage자체가 다릅니다.



지갑을 만들어 봅시다.

$ cleos wallet create

이렇게 하면 지갑이 만들어 집니다. 지갑 이름이 생략된 경우 "default"라는 이름으로 만들어 집니다.

지갑이 만들어 지면 아래와 같은 결과가 나옵니다.

Creating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5KcDtcvjPsjxRukwnEMuiftkk7tqH7tw4xUTHANXjpd9dkcTfCY"

여기에서 제일 마지막에 있는 것이 지갑에 접근하기 위한 암호 입니다. 잘 저장해 놓으세요.

이를 master password라고 부릅니다.

특별이 폴더를 지정하지 않았다면

~/eosio-wallet

에 default.wallet파일이 생성이 됩니다.

cleos wallet create -n jeaimetu

이렇게 하면 jeaimetu라는 이름의 지갑이 생성이 됩니다. 계정이 아니라 지갑이니 혼돈하시면 안됩니다.

Creating wallet: jeaimetu
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"PW5KXektKTBCBfXmpscRR93ofern3ACXs8iAA5RnjDhFaRwnMzPsG"



지갑을 표시해 봅시다.

$ cleos wallet list
Wallets:
[
  "default",
  "jeaimetu"
]

현재 지갑의 리스트가 나옵니다. 처음 지갑을 생성하면 지갑 이름 뒤에 "*" 표시가 있고, 이 표시는 해당 지갑이 unlock되어 있음을 의미 합니다. 저는 지갑을 이미 만들었다가 open해서 lock이 되어 있는 상태 입니다.

지갑을 open하는 것과 unlock은 다른 개념이고, 처음에 생성하면 자동으로 unlock상태가 됩니다.

이제 지갑을 unlock해보겠습니다.

root@ubuntu-s-4vcpu-8gb-nyc1-01:~/eos/build# cleos wallet unlock
password: Unlocked: default
root@ubuntu-s-4vcpu-8gb-nyc1-01:~/eos/build#

아까 password기억나시죠? default 지갑의 password를 입력해주면 위와 같이 결과가 나옵니다.

다시 list를 해보면

root@ubuntu-s-4vcpu-8gb-nyc1-01:~/eos/build# cleos wallet list
Wallets:
[
  "default *",
  "jeaimetu"
]

말씀드린 것 처럼 default옆에 "*"표시가 되어 지갑이 열려있단 표시가 나옵니다.



지갑을 없애보자?


처음에 저도 참 헤매던 부분입니다. 지갑의 관리는 keosd가 한다고 말씀드렸는데요,

ps -ef

를 하면 현재 실행중인 keosd를 볼 수 있습니다.
keosd의 pid를 찾아서 kill을 해봅시다.

root@ubuntu-s-4vcpu-8gb-nyc1-01:~/eos/build# ps -ef | grep keosd
root      3216     1  0 00:08 ?        00:00:00 /usr/local/bin/keosd --http-server-address=127.0.0.1:8900
root      3917  1558  0 02:36 pts/1    00:00:00 grep --color=auto keosd

PID가 3216이군요.

root@ubuntu-s-4vcpu-8gb-nyc1-01:~/eos/build# kill 3216

그리고 다시 지갑의 리스트를 출력하는 명령어를 실행합니다. cleos를 실행하면 keosd가 자동으로 실행되니 따로 실행시킬 필요는 없습니다.

root@ubuntu-s-4vcpu-8gb-nyc1-01:~/eos/build# cleos wallet list
"/usr/local/bin/keosd" launched
Wallets:
[]
root@ubuntu-s-4vcpu-8gb-nyc1-01:~/eos/build#

분명이 지갑을 만들었는데 없습니다....왜냐구요?

지갑을 open하지 않았기 때문입니다. 지갑을 open하면 open한 지갑만 보이게 됩니다.

root@ubuntu-s-4vcpu-8gb-nyc1-01:~/eos/build# cleos wallet open
Opened: default
root@ubuntu-s-4vcpu-8gb-nyc1-01:~/eos/build#

지갑을 open하고..

root@ubuntu-s-4vcpu-8gb-nyc1-01:~/eos/build# cleos wallet list
Wallets:
[
  "default"
]

확인해 보면 default가 보이고, "*"표시가 없기 때문에 lock상태입니다. 나중에 사용하시려면 unlock을 해주시면 됩니다.



키를 생성하고 저장해 보자.


위에서 말씀드린 것 처럼 지갑은 공개키와 비밀키를 저장하는 공간입니다. 이를 위해서 키를 생성하고 지갑에 저장해 보겠습니다.

oot@ubuntu-s-4vcpu-8gb-nyc1-01:~/eos/build# cleos create key
Private key: 5Hx5JtnocCVbrcpYwpCz2uVmVEvMwNnRphiCG3iYoyGZDybiJKo
Public key: EOS8hrz3AMGY7skzuv4hLJ27Hj8Wuik2RpQWfwKyL3spktirftE6c

이렇게 하면 공개키와 비밀키가 생성이 됩니다. 위에 것이 비밀키이고 EOS로 시작하는 것이 공개키입니다. 어디서 많이 보신 것이죠? 맞습니다. EOS등록할때 보던 것입니다.

이걸 이제 지갑에 저장해야 합니다.(어디에 쓰는지는 smart contract때 다시 말씀드리겠습니다.)

root@ubuntu-s-4vcpu-8gb-nyc1-01:~/eos/build# cleos wallet import 5Hx5JtnocCVbrcpYwpCz2uVmVEvMwNnRphiCG3iYoyGZDybiJKo
Error 3120003: Locked wallet
Ensure that your wallet is unlocked before using it!
Error Details:
Wallet is locked: default
root@ubuntu-s-4vcpu-8gb-nyc1-01:~/eos/build#

지갑을 unlock하지 않으면 위와 같은 에러가 갑니다. 따라서 unlock을 하고 다시한번 합니다.

root@ubuntu-s-4vcpu-8gb-nyc1-01:~/eos/build# cleos wallet unlock
password: Unlocked: default
root@ubuntu-s-4vcpu-8gb-nyc1-01:~/eos/build# cleos wallet import 5Hx5JtnocCVbrcpYwpCz2uVmVEvMwNnRphiCG3iYoyGZDybiJKo
imported private key for: EOS8hrz3AMGY7skzuv4hLJ27Hj8Wuik2RpQWfwKyL3spktirftE6c

잘 저장이 되었습니다.

이제 저장된 키를 볼까요?

제가 이미 작업한 것이 있어서 다른 것들도 보이지만, 제일 마지막에 우리가 저장한 키가 보입니다.

root@ubuntu-s-4vcpu-8gb-nyc1-01:~/eos/build# cleos wallet keys
[[
    "EOS66UcsURuhtkztKUNdnGVdMFjk6hgfbN5PoYcycmpw2MRQEdiqL",
    "5JA7WkrAfNPWmWVKFHBKZ2DXsJHppzmnSZctiCTT3f5RLWcuf5S"
  ],[
    "EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
    "5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3"
  ],[
    "EOS7UwAA998WKXtNSHXqr5FaHnpDRvY1ubVzLQYz1snAJD9FMeFAJ",
    "5JY3YZsTV9zzU9J3t3EkVMFNBNw2F3XSUSpGXkngY3K6DvsM6XX"
  ],[
    "EOS8hrz3AMGY7skzuv4hLJ27Hj8Wuik2RpQWfwKyL3spktirftE6c",
    "5Hx5JtnocCVbrcpYwpCz2uVmVEvMwNnRphiCG3iYoyGZDybiJKo"
  ]
]
root@ubuntu-s-4vcpu-8gb-nyc1-01:~/eos/build#



계정을 만들어 보자


자 이제 거의 다 왔습니다. 이번에는 계정을 만들 차례 입니다.

원문의 tutorial에는 서버 주소와 port를 지정하는 것이 있는데요, git에서 받아서 따로 수정하지 않으셨다면 특별한 지정없이 그냥 실행하시면 됩니다. (아래 제가 적은 것처럼)

그리고 이것을 하기 위해선 꼭 nodeos가 수동으로 실행되어야 합니다. 위의 글에서 nodeos가 계정 생성을 담당하기 때문이죠.

$ cleos  create account eosio myaccount EOS7UwAA998WKXtNSHXqr5FaHnpDRvY1ubVzLQYz1snAJD9FMeFAJ  EOS7UwAA998WKXtNSHXqr5FaHnpDRvY1ubVzLQYz1snAJD9FMeFAJ

마지막에 위에 지갑에서 등록한 public key를 넣어 줍시다. 첫번째는 owner key이고 두번째는 active key인데요..steem의 서로 다른 권한을 가지는 key의 개념으로 보면 됩니다. 어떤 key를 쓰냐에 따라서 같은 계정이어도 권한이 달라지게 됩니다.

executed transaction: 8db2da0178ba7f8d0ce23007e97a5bc56e44bdc7f6dd79063e7fa27f381390d2  200 bytes  480 us
#         eosio <= eosio::newaccount            {"creator":"eosio","name":"myaccount","owner":{"threshold":1,"keys":[{"key":"EOS7UwAA998WKXtNSHXqr5F...
warning: transaction executed locally, but may not be confirmed by the network yet

이런 문장이 뜨면 잘 실행된 것입니다. 여기에서는 myaccount를 만들어 주었습니다.
마지막의 문구는 로컬 노드이기 때문에 아직 confirm이 나지 않았다는 것으로, 위의 계정은 local에서만 유효합니다.

자 이렇게해서 account까지 생성을 했고, account와 관련된 명령어를 사용해 볼 수 있습니다.
다른 몇몇 account관련 명령어가 잘 동작하지 않아서 이는 github에 문의를 해 놓았습니다.
답이 오게 되면 다시 업데이트 하겠습니다.
https://github.com/EOSIO/eos/issues/3523



마치며..

다음시간에는 EOS의 꽃인? smart contract에 대해서 알아보겠습니다. 추가로 transaction에 대해서도 같이 posting할 예정입니다.

그럼 모두 즐거운 EOS개발 생활 되시기 바랍니다.

잘 안되시는 것은 댓글 달아주세요~

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

넘누 어려운 내용인지라 저는 잘 모르겠다는ㅠ
그래서 인사만 드리고 가네요.ㅠ

인사애 감사인사 풀봇입니다. 감사합니다.

잘 보았습니다^^

감사합니다. 오늘도 좋은 금요일 되세요.풀봇 드렸습니다.~

@oalover님께서 이 포스팅에 많은 관심을 가지고 있어요. 리스팀을 해주셨군요~!

와오~! 굿입니다~

이더리움에서 web3js 써서 지갑 만드는 것과 크게 다르진 않네요 ^^

좋은 글 감사합니다. 이더리움 마물 짓고나면 함 eos도 도전해 봐야 될거 같네요 ㅎㅎ

짱짱맨 호출에 출동했습니다!!
고팍스에서 MOC상장 에어드롭 이벤트를 진행합니다.
혜자스러운 고팍스!
https://steemit.com/kr/@gopaxkr/moc