EOS 계정 생성

공식 문서 https://developers.eos.io/eosio-nodeos/docs/learn-about-wallets-keys-and-accounts-with-cleos#section-creating-an-account 를 기준으로 약간의 커스터마이징과 과도한 친절함을 가미했다.

블록체인의 상태에 영향을 미치는 액션을 수행하려면 계정이 필요하다.

cleos를 써서 nodeos로 하여금 계정을 생성하고 생성된 계정을 블록체인에 발행하게 할 수 있다. 계정을 생성하려면 기존 계정과 기존 계정의 key가 필요하다. 이를 위해 지갑이 필요하며, 지갑을 사용하려면 keosd를 실행해야 한다.

또한 계정을 생성하고 발행할 nodeos를 실행해서 EOS 노드를 띄워야 한다.

이런 관계는 아래 그림을 보면 더 쉽게 이해할 수 있다.

Imgur

keosd 실행

계정 생성을 하려면 keosdnodeos를 동시에 띄워야 하는데, keosdcleos를 통하지 않고 직접 실행하면 8888 포트에서 실행되는데 nodeos도 8888 포트에서 실행되게 설정되어 있으므로 keosd의 설정을 변경해야 하는데, 아래 두 가지 방식 중 하나를 택해서 keosd를 실행하면 된다. 여기에서는 keosd 실행 시 옵션 지정 방식으로 진행한다.

keosd 설정 파일 수정

keosd 설정 파일은 --data-dir로 지갑 데이터 저장 위치를 따로 지정하지 않았다면 기본값으로 ~/eosio-wallet/에 저장된 config.ini 파일이다. http-server-address = 127.0.0.1:8888로 되어 있는 것을 http-server-address = 127.0.0.1:8899로 변경한다.

Imgur

keosd 실행 시 옵션 지정

다음과 같이 혹시 실행 중일 수 있는 keosd를 종료하고 새로 keosd를 실행한다. EOSIO 빌드 및 설치 과정에서 make install을 해줬다면 어느 디렉터리에서 실행해도 무방하다.

pkill keosd

keosd --http-server-address=localhost:8899

1.0.9부터는 아래와 같이 --http-validate-host=false를 추가해줘야 cleos로 계정 생성 시 에러가 발생하지 않는다.

keosd --http-server-address=localhost:8899 --http-validate-host=false

Imgur

nodeos 실행

새로운 터미널에서 nodeos 명령으로 EOS 노드를 띄운다.

nodeos -e -p eosio --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --http-validate-host=false

nodeos 명령으로 EOS 노드를 띄우는 자세한 내용은 EOS Single Node Testnet 실행을 참고한다.

Imgur

계정 생성 준비

사전 준비

EOS 블록체인에서 계정을 생성하려면 여러가지 사전 준비가 필요하다.

  • nodeos: 계정 생성도 트랜잭션이므로 nodeos가 실행되어 있어야 한다.
  • 이미 존재하는 계정: 계정 생성이 이미 존재하는 계정이 실행하는 트랜잭션이므로 이미 존재하는 계정이 필요하다.
  • 이미 존재하는 계정의 키가 연동된 지갑: 계정 생성의 주체인 authorizing_account의 서명, 즉 authorizing_account의 개인키가 필요하며, 개인키를 읽어올 수 있도록 authorizing_account의 개인키가 연동된 지갑이 있어야한다.
  • keosd: 지갑을 사용하므로, keosd가 실행되어 있어야 한다.
  • 새로 생성할 계정의 owner 자격에 사용될 공개키
  • 새로 생성할 계정의 active 자격에 사용될 공개키

Single Node Testnet 에는 EOS 노드를 부트스트랩하는 eosio 계정 하나만 존재하므로, 최초의 사용자 계정을 만들 때는 eosio 계정을 사용할 수 밖에 없다. 그리고 eosio 계정으로 서명을 하므로 eosio 계정의 비밀키가 필요하다.

eosio 계정의 비밀키는 리눅스의 경우 ~/.local/share/eosio/nodeos/config/config.ini, 맥의 경우 ~/Libraries/Application Support/eosio/nodeos/config/config.ini 파일 안에 signature-provider라는 항목의 KEY에 명시되어 있다.

이미 존재하는 계정의 키가 연동된 지갑 생성

아래의 명령으로 계정 생성에 사용되는 eosio 계정의 키와 연동된 지갑 temp를 만든다.

cleos --wallet-url=http://localhost:8899 wallet create -n temp

!15

아래와 같이 지갑 목록을 조회하면 temp 지갑이 표시되며, 지갑 이름 옆의 * 표시는 지갑의 잠금이 해제되어 있음을 의미한다.

!16

새로 생성할 계정에 사용될 키 생성

새로 생성할 계정의 owner_key, active_key에 사용될 키 두 개 생성

cleos create key

!17

Imgur

계정 생성 명령

계정 생성 명령은 다음과 같다.

cleos create account ${authorizing_account} ${new_account} ${owner_key} ${active_key}

  • ${authorizing_account}: 새 계정을 생성해서 블록체인에 발행하는 역할을 담당하는 기존 계정
  • ${new_account}: 새로 생성될 계정의 이름
  • ${owner_key}: 새로 생성될 계정의 owner 자격(authority)에 할당될 공개키
  • ${active_key}: 새로 생성될 계정의 active 자격(authority)에 할당될 공개키

새 계정 이름 규칙

  • 12글자까지 허용
  • 허용되는 문자: .12345abcdefghijklmnopqrstuvwxyz

owner 자격(owner authority)

계정의 소유권을 나타내는 자격이다. owner 자격을 필요로 하는 트랜잭션은 별로 없지만 소유자 권한을 변경하는 액션에는 owner 자격이 필요하다.

owner 자격에 할당된 키는 콜드 저장소(cold storage)에 저장하는 것이 좋으며 누구와도 공유하지 말아야 한다.

도용된 권한(permission)을 복구하는데도 owner 자격이 필요하다.

active 자격(active authority)

송/수금, 블록 생산자(BP, Block Producer) 투표 및 고차원의 계정 사항 변경에 사용되는 자격이다. 대부분의 트랜잭션은 이 active 자격으로 생성할 수 있다.

계정 생성

계정 생성 과정을 이해하기 위해 먼저 앞서 다룬 사전 조건과 시나리오를 정리해보자.

${authorizing_account}(계정 생성을 실행하는 계정)

Single Node Testnet에 이미 존재하는 유일한 계정은 Single Node를 실행할 때 사용되는 eosio밖에 없다. 따라서 처음 커스텀 계정을 생성할 때는 eosio 계정을 사용해야 한다. 이는 eosio 계정의 비밀키도 알아야 한다는 의미이며 비밀키 확인 방법은 위 ‘사전 준비’ 부분에 나와있다.

${new_account}

새 계정 이름은 규칙에 맞에 임의로 지정하면 된다. 예제에서는 homo.efficio로 한다.

${owner_key}, ${active_key}

새로 생성될 계정의 owner 자격과 active 자격에 사용할 키는 앞서 EOS 지갑 만들기 및 Key 연동에서 ‘Homo-Efficio’ 지갑에 연동했던 두 개의 키의 공개키를 사용한다.

  • owner 자격에 사용할 ${owner_key}: EOS5pBeZiRgKRrLCCCFZ23EuP2d7XXK8UhYdbRSauXjyGrPjApLAW
  • active 자격에 사용할 ${active_key}: EOS8cQKoirjCNSVVywC7WwhuzSg1bC5Q5vG5YhDmAcwf3bVoPys3e

시나리오 이해

계정 생성 시나리오를 정리하면 다음과 같다.

homo.efficio라는 신규 계정 생성에 eosio라는 기존 계정을 사용하며,

‘Homo-Efficio’ 지갑에 연동했던 두 개의 키를 새로 생성할 계정의 owner_key, active_key로 설정한다.

그림으로 나타내면 다음과 같다.

Imgur

결국에는 키를 매개체로 해서 Homo-Efficio라는 지갑과 homo.efficio라는 계정이 간접적으로 연결되는 모양새다. 위 그림을 토대로 새 계정이 생성된 후 새 계정과 지갑의 관계를 정리해보면 다음과 같다.

homo.efficio라는 계정으로 어떤 트랜잭션을 발생시킬 때

필요한 키 정보를 Homo-Efficio라는 지갑에서 가져온다.

계정 생성 실행

오류 테스트

시험 삼아 길이가 12자를 넘는 계정 이름으로 계정을 생성해보면 다음과 같은 에러가 발생한다.

Imgur

지갑 잠금 오류

지갑 잠금 해제 되지 않은 상태에서 계정 생성을 실행하면 다음과 같은 에러가 발생한다.

Imgur

지갑 잠금 오류는 keosd 실행 화면에도 로그가 찍힌다.

Imgur

지갑 잠금 해제 후 계정 생성

계정 생성의 주체인 eosio 계정의 키를 연동하는 지갑가 연동되어 있는 지갑을 해제한 후, homo.efficio 계정 생성을 실행하면 다음과 같은 에러가 발생한다.

Imgur

이 에러는 keosd 관련 오류가 아니므로 keosd 화면에는 별다른 로그가 찍히지 않지만, nodeos 화면에 더 자세한 에러 로그가 찍힌다.

Imgur

에러 내용은 serialization 수행 시간이 초과된 것이 원인인 것 같다.

혹시 잠금 해제해야할 지갑이 Homo-Efficio가 아니라 default 지갑인가 싶어서 다음과 같이 Homo-Efficio 지갑을 다시 잠그고 default 지갑을 잠금 해제한 후 다시 계정 생성을 시도하면, 이번에는 계정이 이미 있다는 에러가 발생한다.

Imgur

nodeos 화면에 더 자세한 로그가 찍힌다.

Imgur

cleos get account homo.efficio 명령으로 계정을 확인해보면 계정이 생성되어 있는 것으로 나온다.

Imgur


크리에이티브 커먼즈 라이선스HomoEfficio가 작성한 이 저작물은(는) 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.