develop custom_top_html:no
default debug random = 2 / type = READ / detected = READ

안녕하세요.

쌩광부입니다.

 

이번 시간에는 RN에 대한 설명을 잠시 접어두고 이더리움 계열 코인의 지갑 구조에 대해서 설명하도록 하겠습니다.

 

#4. 이더리움 계열 지갑 만드는 방법

 

1. Private Key, Public Key

 

일반적으로 블록체인의 지갑 구조는 모든 코인이 다 똑같다고 보시면 되는데요.

 

간단하게 공개키(Public Key)와 개인키(Private Key)라는 두 개의 대칭되는 키값으로 되어있습니다.

이게 무슨 소리냐?

Public Key는 암호화된 글자를 해독할 때 사용할 비밀번호라고 말할 수 있으며

Private Key는 어떤 문장들을 암호화 시킬 때 사용하는 비밀번호입니다.

 

좀 더 쉽게 설명하자면 2개의 비밀번호가 있다고 치면 1개의 비밀번호는 암호화만 할 수 있으며 다른 하나는 암호문을 해독만 할 수 있습니다.

그리고 암호화를 해독만 할 수 있는 비밀번호는 모두에게 공개하는 거죠.

그럼 누구든지 그 암호문을 해독해서 내용을 볼 수 있겠죠. 그러나 내용을 볼 수 있다 쳐도 그 내용을 다시 고쳐서 암호화를 시킬 수는 없습니다.

왜냐하면 암호화 시킬 수 있는 비밀번호를 알지 못하기 때문이죠.

 

이런 원리를 이용해서 암호화폐 코인의 주인은 자신의 코인을 타인에게 보내기 위해 영수증을 작성하고 Private Key로 암호화하여 블록체인 노드에 전송합니다.

블록체인 노드에서는 공개된 Public Key를 이용하여 영수증의 내용을 확인하여 받을 사람에게 코인을 전송합니다.

이때 누군가 영수증을 변조하려고 해도 Private Key를 알지 못하기 때문에 절대로 영수증을 수정할 수가 없게 됩니다.

 

아마도 암호화폐를 조금이라도 접하신 분들은 Private Key(일명 지갑 파일과 비밀번호)를 절대로 분실하면 안 된다는 말을 수도 없이 들었을 텐데요.

이제 그 이유를 아시겠죠?

 

그럼 Private Key와 지갑 파일은 어떤 연관이 있을까요?

지갑 파일은 사실 그냥 복잡스러운 텍스트만 들어있는 파일인데요.

그 파일에는 지갑 주소와 Private Key를 알아낼 수 있는 암호문이 들어있습니다.

그 암호문과 지갑 파일을 만들 때 입력했던 비밀번호를 특정한 규칙으로 조합하면 바로 Private Key가 나옵니다.

만약 비밀번호를 알지 못한다면 암호문과 조합할 무언가가 없기 때문에 Private Key를 찾아낼 수가 없는 것이지요.

 

아하~

그래서 지갑 파일과 비밀번호를 절대로 분실하면 안 되는 것이었군요.

 

그럼 왜 그냥 Private Key를 지갑 파일에 저장하면 되지 이런 복잡한 구조를 짰는냐고요?

바로 해킹에 대비하기 위해서죠.

만약 PC가 해킹돼서 Private Key가 들어간 지갑 파일이 남의 손에 넘어갔다 치면 모든 코인이 자신도 모르게 사라지겠죠!

그렇기 때문에 Private Key를 최대한으로 노출시키지 않기 위해 위와 같은 지갑 파일 구조를 가지게 된 것입니다.

 

2. 이더리움 계열 코인의 지갑 구조

 

대부분의 이더리움 계열 코인들은 모두 동일한 지갑 구조를 가지고 있습니다.

ETH, ETC, ESN, CLO 등등 이더리움 소스를 포크해서 만든 코인들은 모두 동일하다고 보시면 됩니다.

쌩광부의 지갑 만들기를 마스터하신다면 모든 이더리움 계열 모바일 지갑을 만들 수 있게 됩니다.

물론 서버측 API가 필요하겠지만요. ^^

 

이더리움의 지갑은 아래와 같이 3개의 키값으로 구성되어있습니다.

 

Private Key - 개인키로써 이 값을 알고 있다면 Public Key를 알 수 있습니다.

Public Key - 공개키로써 이것으로 암호화된 문장의 복호화가 가능합니다.

Address - 이더리움에서 계정을 구분하는 주소로써 이 값으로 Public Key를 알 수 있습니다.

결론적으로 우리는 Private Key와 Address만 알고 있다면 Public Key를 얼마든지 찾아낼 수 있기 때문에 Public Key에 대해서는 신경 쓸 필요가 없습니다.

또한 Private Key와 Address만 알고 있다면 굳이 지갑 파일을 만들 필요도 없겠죠?

단지 이 값을 저장할 때 보안을 위해서 지갑 파일을 생성한다고 생각하시면 되겠습니다.

음...

쌩광부의 지갑 만들기 강좌에서는 지갑 파일을 읽어오거나 불러오는 것에 대해서는 설명하지 않도록 하겠습니다.

모바일에서 지갑 파일에 대한 작업은 생각보다 복잡합니다. 성능 문제 때문이죠.

 

3. 지갑(Private Key, Address) 만들기

 

지갑을 만든다는 것은 결국 Private Key와 Address를 만드는 것인데요.

아무리 DHA 많은 참치를 먹고 계산한다 하더라도 사람 머리로 계산하는 것은 힘들겠죠. ^^

 

우리는 모바일에서 이런 지갑을 만들어야 되기 때문에 ethers.js 패키지를 이용합니다.

ethers.js 패키지를 이용하는 이유는 제 경험적으로 가장 편하고 쉽습니다.

자세한 내용은 아래 링크에서 참고하세요.

https://github.com/ethers-io/ethers.js/

 

ethers.js 패키지의 도움말은 아래 링크에서 참고하세요.

단, 3.0 버전과는 다른 부분이 조금 있으니 주의하셔야 합니다.

https://docs.ethers.io/ethers.js

 

ethers.js 패키지를 설치하기 위해 아래와 같이 입력합니다.

한가지 주의하실 점은 패키지 이름에 @3.0.29 이것이 포함되어 있는데요.

특정 버전을 지정해서 설치하는 것입니다.

경험적으로 3.0.29 버전이 가장 안정적이었기 때문에 이 버전으로 설치했습니다.

그 상위 버전에서는 빌드가 제대로 안되는 문제가 있었네요.

 

C:\Users\YOUR_USERNAME\topwallet> npm install --save ethers@3.0.29

 

오늘 강좌에서는 ethers.js 패키지를 이용해 지갑을 만드는 방법에 대해서만 설명할 것인데요.

차후에 실제 소스에 다시 코딩을 할 테니 걱정 붙들어 매세요. ^^

 

ethers.js 패키지의 모듈을 사용하기 위해 import를 합니다.

 

import { HDNode, providers, utils, Wallet } from 'ethers';

 

그리고 임의의 지갑을 생성할 때는 Wallet.createRandom 함수를 만들면 됩니다.

 

const wallet = Wallet.createRandom();

 

위와 같이 호출하게 되면 wallet.address, wallet.privateKey를 통해서 우리가 원하는 값을 얻을 수 있게 됩니다.

간단하죠.

 

만약 우리가 privateKey를 알고 있다면

 

const wallet = new Wallet(privateKey);

 

이렇게 해서 지갑을 만들 수 있고요.

 

한가지 더 추가해서 Mnemonic Word를 이용해서도 지갑을 만들 수 있는데요.

Mnemonic Word라는 것은 '기억술 단어'라고 직역할 수 있는데요.

Private Key 값이 인간의 언어가 아니다 보니까 좀 더 쉬운 일반 단어들을 나열하고 그것으로 Private Key를 만들어 내는 것입니다.

그렇기 때문에 많은 지갑들이 Mnemonic Word를 사용하고 있습니다.

 

const mnemonicWords = HDNode.entropyToMnemonic(utils.randomBytes(16));

const wallet = Wallet.fromMnemonic(mnemonicWords);

 

위에 코딩을 보면 mnemonicWords을 랜덤하게 생성하고 그 값으로 지갑을 생성하고 있습니다.

mnemonicWords를 출력해 보면 12자리의 일반 단어들이 나열되어 있습니다.

예를 들어 apple table school .... 이런 식으로 말이죠.

그럼 우리들은 Private Key 말고 Mnemonic Word를 기억하고 있어도 되겠죠.

물론 암기력이 매우 떨어지는 우리는 종이에 적어놔야만 하겠죠. ^^

 

오늘 강좌는 여기까지입니다.

실제 구현해볼 내용이 없어서 조금 실망이신가요?

실망 안 하셔도 됩니다. 앞으로의 강좌에서 빡씨게 할테니까요. ^^

 

그럼 많은 응원 부탁드리며 다음에는 RN에서 데이터를 저장하는 방법에 대해서 설명할 예정입니다.

많~~~이 기대해주세요.


[알림: 이 게시글은 관리자에 의해 ''에서 '개발'로 이동되었습니다]
31,955

쌩광부님의 서명

댓글 16
default debug random = 0 / type = READ / detected = READ

List of Articles
번호 분류 제목 추천 수 조회 수 글쓴이 날짜
1834 개발 모니터링 프로그램 ver 0.82 업데이트 안녕하세요. 남자별입니다.   어제 하루 잠시 시간이 비어서 0.8 업데이트에 몇몇 기능 개선을 추가했습니다. 주요 업데이트 내용은 다음과 같습니다. 자세한 설명은 압축파일 안에 Readme.txt ... 107 file 97 12960
남자별
2018.03.20
1833 개발 허접하지만 알뜰한 기능의 채굴기 모니터링 프로그램입니다 기능 -채굴기 1set의 평균온도와 해쉬 -모든 그래픽카드들의 온도와 해쉬 -온도와 해쉬의 수치별 색상변화 -각 set별 혹은 그래픽카드별 설정수치시 알람 발생(sms 문자발생, 다수인원 가능) -설... 23 file 93 8222
503
2017.08.12
1832 개발 다중 수천대 가능 무료 원격조정 모니터링 알람 제어 ( 꽁짜 )     천리님 글  1. 마이너 컨픽 파일 수정2. 컨픽 파일 일괄 업로드3. 마이너 재시작4. 컴퓨터 리부팅5. 마이너 버전 업데이트 시 파일 일괄 업로드6. 마이닝 프로그램 일괄 변경 (ex. Claymore... 35 file 76 5799
다롱잉임
2018.04.08
1831 개발 오버클럭을 손쉽게! 이지 오버클럭을 릴리즈 합니다. 안녕하세요, 땡글을 통해 여러가지 도움을 얻고 있는 괴발개발 입니다.   애프터 버너는 좀 무겁고, 옵션이 너무많아 다루기가 쉽지 않습니다. 또한, 여러 그래픽카드의 정보를 한눈에 보기 어려... 70 file 73 6524
괴발개발
2018.04.20
1830 개발 모니터링 프로그램 ver 0.8 업데이트 안녕하세요. 남자별입니다.   0.7 업데이트 이후로 빠르게 업데이트 해드릴려고 했으나 여러 사정이 겹쳐서 이제서야 업데이트 했습니다. 이런저런 문의/요청사항에 대해서 추가 작업 및 명절이 ... 61 file 67 6783
남자별
2018.03.16
1829 개발 모니터링 프로그램 ver 0.6 업데이트 안녕하세요. 남자별입니다.   최근에 개인일이 바빠져서 모니터링 프로그램 업데이트를 당분간 보류할 생각이었으나 갑자기 핫해진 모네로 관련으로 문의가 많으셔서 -_-a 급하게 땜빵 수정했습... 75 file 61 16910
남자별
2017.08.28
1828 개발 누구나 따라할 수 있는 ETN 마이닝 풀 구축 가이드 입니다. 일렉트로니움 마이닝풀 운영을 위한 설치 가이드 입니다.   ETN 마이닝 풀 서버 설치를 해보려고 했는데 node 버전 문제로 여러번의 실패로 우분투를 재설치하면서 여러번의 삽질을 하여 성공하... 61 60 11922
번트마이너
2018.02.11
1827 개발 오픈소스 거래소 깃헙 공개하였습니다. 안녕하세요 몇일전 거래소 오픈소스로 깃헙에 공개하겠다고한 coinext 개발자입니다. 좀더 리팩토링이나, 보완할걸 하고 공개하려고 했는데, 전반적으로 크게 문제는 없어보여 선공개합니다. 시... 42 57 18805
coinext
2017.12.20
1826 개발 모니터링 프로그램 ver 0.7 업데이트 안녕하세요. 남자별입니다.   최근에 몇몇 분들이 개인적으로 Bminer 지원을 요청하시기에 api 분석만 하고 바로 적용했습니다. Bminer 지원 이외에 다른 수정사항은 아직 적용하기전이라 Bminer... 84 file 53 15326
남자별
2018.01.08
1825 개발 안녕하세요. 오픈소스로 자동 트레이딩+알림 봇 공유합니다.   파이썬3로 제작되었고요.   1. 텔레그램에서 문자인증 받고 자동으로 로그인하는 기능. 2. 텔레그램에서 해당 채널의 메시지를 자동으로 읽는 기능. 3. 읽은 메시지를 정규표현식으로 분석해서... 24 file 48 25236
소프트
2018.01.12
1824 개발 모니터링 프로그램 ver 0.4 업데이트 안녕하세요. 남자별입니다. 이번 업데이트는 좀 늦었습니다. 개인적인 사정과 회사프로젝트가 바빠져서 그랬습니다.   더이상 미루기 힘들어 몇시간정도 뚝딱 거려봤습니다. 저번에 요청오신 기... 71 file 47 18761
남자별
2017.07.19
1823 개발 모니터링 프로그램 ver 0.5 업데이트 안녕하세요. 남자별입니다. 이번 업데이트는 기존 요청사항들중 편의성 부분으로 개별 설정할 수 있도록 수정했습니다.   ver 0.5  업데이트                 monitor.ini 설정 추가. 기본 배포... 61 file 44 12814
남자별
2017.08.11
1822 개발 전세계 실시간 챠트/시세를 원화로 모아서 볼수 있는 사이트를 만들었습니다 전세계 3048개 코인, 648종 가상화폐를 실시간 차트/시세를 원화로 모아서 볼수 있는 사이트를 만들었습니다.   암호화폐 실시간 차트및 시세를 각국 통화로 암호화폐별, 거래소별, 관심코인으로... 33 file 42 4686
그냥초보
2018.04.10
1821 개발 SMT 토큰 이중지불 해킹에 대한 설명과 대비책   안녕하세요. 온더의 철학자입니다.   SMT라는 ERC20토큰의 토큰 이중지불 해킹이 일어났습니다. 이 해킹건에 대해 설명이 필요한 것 같아 긴급하게 글을 남깁니다.   Ethereum Transaction 0x1... 21 file 41 2879
철학자
2018.04.25
1820 개발 이더리움과 스마트 컨트랙(2) - 30분만에 ICO 하기 30분만에 ICO하기   안녕하세요. 오늘은 조금 자극적인 제목을 가지고 와봤습니다. 요즘 ICO 많이들 참여하시고,  직접 하시는 분들도 많이 계신데요. ICO에 필요한 토큰을 단 30분 만에 발행하... 28 file 40 8467
파이리
2018.02.22
1819 개발 단순 콘솔 모니터링 프로그램 ver 0.2 배포   안녕하세요. 지난번에 올린 모니터링 프로그램에 요청사항들이 있으셔서 수정했습니다. 이하는 개발노트입니다. 보안 관련으로 걱정하시는 분들도 계셔서 소스코드도 같이 첨부합니다. ver 0.... 44 file 39 8885
남자별
2017.06.26
1818 개발 채굴 관리프로그램 MINE ASSIST 베타버전 공개 안녕하세요. 저는 S전자에서 개발자로 일하다가 지금은 작은 스타트업을 하고 있는 파이리입니다.   얼마 전에 채굴기 관리 프로그램을 개발하고 있다고 글을 올린적이 있었는데, 베타 테스트에 ... 180 file 39 14897
파이리
2017.06.17
1817 이더리움 데브콘4 참관기 1 이더리움 데브콘4 참관기 1 2018년 프라하에서 열린 이더리움 데브콘4에 참석했었습니다. 행사 참석 기사를 위해 썼던 내용을 정리해보았습니다.   데브콘4에서 가장 인상깊었던 내용   세션하... 24 file 34 2865
atomrigs
2018.11.18
1816 개발 예스빗부스터 무료배포(ver 0.0.1)   예스빗매니저 오픈베타서비스에 참여해주신 분들의 요청으로 윈도우 최적화 프로그램(예스빗부스터)을 배포합니다. 앞으로도, 요청사항을 검토하여, 지속적인 업데이트를  진행할  예정입니다.... 22 file 34 4158
예스빗
2018.07.09
[강좌] 쌩광부의 모바일 지갑 만들기 #4. 이더리움 계열 지갑 만드는 방법 안녕하세요. 쌩광부입니다.   이번 시간에는 RN에 대한 설명을 잠시 접어두고 이더리움 계열 코인의 지갑 구조에 대해서 설명하도록 하겠습니다.   #4. 이더리움 계열 지갑 만드는 방법   1. Pri... 16 30 1656
쌩광부
2018.11.21
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 92 Next
/ 92
default debug random = 0 / type = READ / detected = READ