블록체인 기반의 앱을 만든다면 제일 먼저 하는 일이 비밀키를 생성하는 일입니다. 그 이후에 생성한 비밀키로 스마트 컨트랙을 호출하거나 코인을 이체하는 등 다양한 일을 할 수 있습니다. 비밀키를 잃어버리면 가지고 있던 권한이나 코인을 잃어버리는 것은 물론, 외부에 공개했던 공개키도 쓸 수 없기 때문에 비밀키를 잘 보관해야 합니다.
하지만 비밀키의 관리는 골치 아픈 문제입니다. 단순히 문자열로 변환하여 디스크에 저장하기도 찝찝하고, 직접 암호화 포맷을 만드는 것도 부담스럽습니다. 알아서 비밀키를 안전하게 저장하고, 필요할 때 간단한 방법으로 꺼내 쓸 수 있는 도구가 필요합니다.
Photo by Luka Siemionov from Pexels
코드체인 키스토어 CLI가 하는 일
코드체인의 키스토어 CLI를 사용하면 커맨드라인 인터페이스를 이용해서 간단하게 비밀키를 생성하고 관리할 수 있습니다. 키를 암호화할 때 passphrase를 받아 암호화 하는 방식으로, 기본적인 암호화가 제공됩니다. CLI에서 만든 파일을 코드체인 SDK에서 불러와 내가 필요할 때 쉽게 비밀키를 사용할 수 있습니다.
이 글에서는 다음과 같은 내용을 실습합니다.
1. 키스토어 CLI를 사용하여 플랫폼 계정과 에셋 계정을 생성
2. SDK에서, 키스토어 CLI로 생성한 계정을 사용하여 코드체인에 나만의 에셋 생성
설치
자바스크립트의 패키지 매니저를 사용하여 설치할 수 있습니다. 혹은, 미리 빌드된 바이너리 파일을 다운받는 방법으로 코드체인 키스토어를 설치할 수 있습니다. 설치하기 편한 방법을 사용하면 됩니다.
npm을 사용하여 설치하기
npm install -g codechain-keystore-cli
yarn을 사용하여 설치하기
yarn global add codechain-keystore-cli
바이너리 파일을 다운 받기
이 주소에 들어가면 실행파일을 다운받을 수 있습니다.
설치 확인
설치가 잘 되었다면 cckey 명령어를 사용하여 키스토어 CLI를 사용할 수 있습니다. 가장 간단한 명령어로, 아래 명령어를 터미널에서 입력하면 설치한 키스토어 CLI의 버전을 확인할 수 있습니다.
cckey --version
프로젝트 생성
키스토어 CLI는 현재 디렉토리에 키 파일을 저장합니다. 앞으로 코드체인의 SDK를 사용할 예정이므로 미리 nodejs 개발환경을 세팅한 뒤 계정을 생성합니다.
터미널에서 아래 명령어를 입력하여, 디렉토리를 만들고, nodejs 프로젝트를 생성합니다.
mkdir keystore-example cd keystore-example npm init npm install --save codechain-sdk@"^0.4.0-rc" npm install --save request
계정 생성
아래 방법으로 플랫폼 계정과 에셋 계정을 생성합니다.
플랫폼 계정과 에셋 계정 코드체인은 목적에 따라 계정이 두 종류로 나뉘어 있습니다. 하나는 파셀을 처리하기 위한 수수료를 내는 계정 종류로 플랫폼 계정이라고 부릅니다. 다른 하나는 코드체인에서 다른 누군가가 발행한 에셋을 소유하거나 거래할 수 있는 계정 종류로 에셋 계정이라고 부릅니다. 이 예제는 두 종류의 계정을 모두 생성하여 사용합니다.
플랫폼 계정 생성 아래 명령어를 사용하여 플랫폼 계정을 생성합니다. 생성한 계정은 명령어를 실행했을 때의 작업 디렉토리에 생성됩니다. 이 명령어가 성공하면 디렉토리에 keystore.db 파일이 생성됩니다.
cckey create -t platform --network-id tc
-t platform 옵션으로 플랫폼 계정을 생성하라고 지정합니다.
--network-id 옵션으로 어떤 네트워크의 계정을 생성할지 지정합니다.
코드체인은 목적에 따라 다른 테스트 네트워크를 운영하고 있고 각 테스트 네트워크에서 사용하는 계정의 형식이 다릅니다. 이 예제에서는 Husky 테스트 네트워크를 위한 계정을 생성할 것이기 때문에 “tc”를 사용합니다.
계정을 생성한 뒤 아래 명령어를 사용하면 키스토어 CLI가 관리하는 모든 계정을 확인할 수 있습니다.
cckey list -t platform --network-id tc
플랫폼 계정에 CCC 받기 앞서 생성한 플랫폼 계정을 사용하여 파셀을 보낼 때 수수료인 CCC가 필요합니다. 코드체인 테스트 네트워크는 누구나 테스트를 할 수 있도록 CCC를 공짜로 보내주는 서비스를 제공하고 있습니다. 이 링크에 들어가서 앞서 만든 계정에 테스트용 CCC를 받습니다.
에셋 계정 생성 코드체인에서 에셋을 소유, 이체를 하기 위해서 에셋 계정이 필요합니다.
다음 명령어를 사용하여 에셋 계정을 생성합니다.
cckey create -t asset --network-id tc
생성된 계정들을 다음 명령어를 사용하여 확인할 수 있습니다.
cckey list -t asset --network-id tc
키스토어 CLI가 생성한 파일을 코드체인 SDK에서 사용
앞서 생성한 계정을 코드체인 SDK에서 쉽게 사용할 수 있습니다.
읽기 아래와 같은 내용으로 read_example.js 파일을 생성 후 node read_keystore.js 로 실행합니다.
createLocalKeyStore 함수가 키스토어 CLI가 생성한 파일을 읽어오는 코드입니다. 이 함수의 인자로 키스토어 CLI가 생성한 파일의 패스를 입력합니다. 이 예제에서는 기본 파일 이름을 사용했기 때문에 “keystore.db” 값을 사용합니다.
서명하기 키스토어 CLI가 만든 키를 사용해 임의의 값을 서명할 수 있습니다.
다음과 같은 내용으로 sign_example.js 를 실행합니다. passphrase 변수에 플랫폼 키를 생성할 때 사용했던 passphrase를 적습니다.
에셋 발행하기 아래 예시는 앞서 키스토어 CLI로 만든 플랫폼 계정의 키와 에셋 계정의 키를 가지고 새로운 애셋을 만드는 예시입니다.
결론
CodeChain을 사용해서 어플리케이션을 만들고 싶다면, 키를 관리하는 가장 간단한 방법은 키스토어 CLI를 쓰는 것입니다. 간단한 방법으로 키를 생성 및 관리하고, SDK에서도 쉽게 읽을 수 있습니다. 코드체인을 사용하실 때 키스토어 CLI도 꼭 써보시길 권장합니다.