develop custom_top_html:no
default debug random = 4 / 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
번호 분류 제목 추천 수 조회 수 글쓴이 날짜
1840 개발 [긴급속보] Parity 개발팀이 비잔티움 하드포크에 관하여 연속적인 버그 발생으로 하드포크를 2주간 딜레이 ... https://www.reddit.com/r/ethereum/comments/76d97i/fork_should_be_postponed_until_2_w_of_no_bugs_as/dod6ece/   DAO 사태 이후 최대의 위기 같습니다.   Parity 팀이 4일 연속으로 Bug fix ... 42 17 39020
인텔지원
2017.10.15
1839 개발 이더리움은 인터넷을 지배하게 될까요? 아마도 땡글의 많은 분들은 이더리움으로 대박이 나셨고, 이더리움으로 큰 손실도 입으신 것으로 압니다.   이더리움은 비교적 최근까지도 땡글 내의 가장 인기있는 채굴 코인이었으며, 여전히 ... 16 8 38813
ethminer
2019.07.17
1838 개발 IPFS 따라해보기 IPFS(InterPlanetary File System)란 무엇인가? IPFS는 차세대 웹 3.0에 필수 요소의 하나라고 일컫을 수 있을만한 분산 저장소 구현중의 하나입니다.   기존 웹의 가장 큰 단점이라 할 수 있는 ... 19 10 34284
ethminer
2019.07.20
1837 질문 어짜피 켜있는 컴퓨터, 채굴에 전기세가 많이 늘어날까요? 개발자다 보니, 집에서 항상 서버를 돌리고 있습니다. 어떨땐 데스크톱으로.. 어떨땐 저사양 노트북으로, 어떨땐 게이밍노트북으로..   머 어떤 형태든 20여년간 계속 서버를 돌려왔는데요..   ... 12 1 28653
비폭력무저항
2020.09.14
1836 개발 클레이튼 소스 코드 간단 분석 소스분석이랄것까지는 없습니다만   현재 공개되어 있는 클레이튼 소스코드를 간단히 점검하는 기분으로 살펴보았습니다.   공개된 클레이튼 노드 소스코드 https://github.com/klaytn/klaytn   ... 18 6 28494
ethminer
2019.07.10
1835 개발 이더리움 작동원리의 이해(1)-동영상 -땡글 블록체인 강의 https://youtu.be/ddZ4wBfHGIo 주최 : 땡글 암호화폐 커뮤니티 후원 : 제너크립토(주) 해외거래소 이더리움 작동원리의 이해(워터마크).pdf ------------------------------------- 꼬리말 * 게... 23 file 29 27213
쌍둥아빠
2017.11.03
1834 개발 사달라 자동매매봇 업데이트 했습니다.     안녕하세요. 마루마루 입니다. 이전에 트레이딩봇 관련해서 테스트 버젼을 올렸었습니다.   이전글 참조 [ https://www.ddengle.com/traders_free/11193656 ]   당분간 유료화 예정이 없어 ... 1 3 26285
마루마루
2019.07.05
1833 질문 서버 이전중에 코인이 싹 사라졌습니다. 코인은 라이트코인 포크로 만든 새로운 코인이구요.. 서버 이전이 있어서 (A --> B)   1. A 서버에서 계정들과 코인수량 다 확인하고 2. B 서버에서 데몬 실행, 정상적으로 블록이 쌓이는 거 확... 13 2 26047
비폭력무저항
2019.06.14
1832 질문 빗썸 API 요즘도 연속 주문 안 되나요? 안녕하세요.   예전에 빗썸 API를 쓰다가 너무 문제가 많아서 안 쓰게 되었습니다.   가장 큰 문제는 연속으로 주문을 넣으면 거부된다는 점이었습니다.   그래서 3초 정도 여유를 두고 주문을 ... 0 25849
크리
2020.09.26
1831 개발 폰 & 컴 해커한테 다 뚫림! 보안 다 빵꾸남!     컴퓨터 전원을 켜는 순간 아무것도 안해도 100% 다 털린다. 폰 전원을 켜는 순간 아무것고 안해도 해커는 다 훔쳐간다!     https://www.youtube.com/watch?v=TU5LgrlJ4vQ&feature=youtu... 2 file 0 25778
내가총대멘다
2020.09.10
1830 질문 암호화폐/주식 교육 사이트를 만들고 있는데 PG,결제연동사가 허락을 안해주네요; 다른 동영상 강의 사이트들은 PG연동에 문제가 여태 없었는데   암호화폐랑 주식은 안된다고 거품물고 반대 하네요; (도서는 된다고 하는데.. 클라이언트가 책은 생각이 없다고 해서..)   그런 ... 9 1 25729
딥러닝은개뿔
2019.06.11
1829 개발 주식 자동 매매 프로그램 이번 주는 많이 바빴습니다. 회사 업무도 있었지만, 프로그램 만드는 일도 몇 일 걸렸습니다. ETF(Exchange Traded Fund) 자동 매매 프로그램입니다. 저가에 매수하고, 고가에 매도하는 전략이... 28 file 11 25687
drjoon
2014.11.21
1828 질문 자동 코인 거래를 위한 시스템? 을 개발하고 있습니다.   봇에 거래소 API 키 및 코인, 금액을 세팅하고 활성화 시키면 24시간 해당 코인의 가격을 보다가    지정된 가격에 도달하면 매수/매도를 걸게 되고, 동시에 라인 및 텔레그램으로 알람을 보내... 12 0 25566
몬스터에너지
2019.07.13
1827 개발 안녕하세요. 오픈소스로 자동 트레이딩+알림 봇 공유합니다.   파이썬3로 제작되었고요.   1. 텔레그램에서 문자인증 받고 자동으로 로그인하는 기능. 2. 텔레그램에서 해당 채널의 메시지를 자동으로 읽는 기능. 3. 읽은 메시지를 정규표현식으로 분석해서... 24 file 48 25503
소프트
2018.01.12
1826 개발 거래소 API 시세정보 및 알람 표시 HTML 예제 코드입니다. 안녕하세요. 땡글에 리플은 많이 달아보았지만 게시글은 처음이네요 ㅎㅎㅎ 자료실에 올릴까 개발에다 올릴까 고민했는데 html로 개발하실 분들 대상으로 보시라고 여기에 올립니다.   예전에 거... 35 file 23 25399
크로비
2017.08.02
1825 개발 이더리움 트랜젝션 처리속도를 25 TPS라고 하는 이유 이더리움의 초당 트랜젝션 처리 가능 회수는 15 TPS라고 알려져있습니다. 그러나 좀 더 찾아보면 20~25 TPS라는 내용도 나오긴 하는데 이에 대해서 간단히 살펴보도록 하겠습니다. 현재의 이더리... 3 file 4 25271
ethminer
2019.07.08
1824 개발 이더리움 블록체인과 영지식 증명 스터디원을 모집합니다^^   안녕하세요. 철학자입니다.   이더리움 블록체인 스터디그룹인 D-lab의 <Awesome ZKP>분과에서 공부 같이하실 스터디원을 모집합니다^^   <Awesome ZKP> 분과는 현업 이더리움 블록체인 개발자... 1 25077
철학자
2019.06.07
1823 개발 룸네트워크의 메인넷 소스코드 공개 룸네트워크를 들어보신 분 많으실겁니다. 룸네트워크의 Loom 토큰이 업비트에도 상장되어 있으며, DPoS 컨센서스 기반의 룸네트워크 메인넷, 일명 "플라즈마체인"(Plasma Chain)으로 유명하고, (... 4 file 3 24991
ethminer
2019.07.12
1822 개발 이더리움 노드 소스 (go-ethereum) 버전 1.9.0 릴리스 7월 10일 날짜로, 이더리움 코어 소스코드 (go-ethereum) 버전 1.8.0이 나온 2018년 2월 14일 이후로 1년 5개월여만에 1.9.0 버전이 나왔습니다! 간단 요약 - full/fast/archive sync 성능 향상 ... 1 file 3 24694
ethminer
2019.07.12
1821 개발 이런 코인있으면....   로그인 할때마다 코인자동으로 지급해주는 코인 어떨까요 웹싸이트들 대부분 수익모델이 제로입니다 이걸 로그인코인이 보상해주는 거조 채굴보상대신 로그인마다 코인을 주는거죠 그러면 수익... 1 1 24559
독수리
2019.06.11
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 92 Next
/ 92
default debug random = 0 / type = READ / detected = READ