develop custom_top_html:no
default debug random = 0 / type = READ / detected = READ / doc_Srl = 10300179

안녕하세요.

쌩광부입니다.

 

이번 시간에는 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 [email protected]

 

오늘 강좌에서는 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
  • profile
    크림메일 2018.11.21 22:53
    좋은 정보 감사드립니다.
    쌩광부님 지갑만들기 시리즈 잘 스크립 해놓고 있습니다.
    아직은 수준이 안되지만, 언젠가는 지갑 만들기도 도전하려고 합니다.
    앞으로도 잘 부탁드립니다.
  • profile
    쌩광부 2018.11.21 22:55
    @크림메일
    네. 응원합니다. ^^
  • profile
    ddengle BOT 2018.11.21 22:55
    @쌩광부
    쌩광부님 축하합니다. 4 보너스 캐시에 당첨되셨습니다.!!
  • ?
    Investor 2018.11.21 23:12
    진짜 감사합니다. 최근에 계속 바빠서 아직은 못보고 있는데 시간 나면 바로 공부 시작해야겠어요!
  • profile
    쌍둥아빠 2018.11.21 23:39
    좋은 강의 감사합니다. ^^
  • profile
    ddengle BOT 2018.11.21 23:39
    @쌍둥아빠
    쌍둥아빠님 축하합니다. 5 보너스 캐시에 당첨되셨습니다.!!
  • profile
    쌍둥아빠 2018.11.21 23:39
    관리자에 의해 삭제된 댓글입니다
  • profile
    abcoin 2018.11.21 23:42

    지갑만들기 시리즈 잘 읽고 있습니다.
    좋은 정보 감사합니다..^^

  • profile
    ddengle BOT 2018.11.21 23:42
    @abcoin
    abcoin님 축하합니다. 6 보너스 캐시에 당첨되셨습니다.!!
  • ?
    존버중 2018.11.22 09:46
    좋은 정보 진심 감사드립니다. ㅎ
  • profile
    디엠스토리 2018.11.23 10:20
    좋은 정보 추천 꾸욱이요~
  • ?
    김상가 2018.11.23 10:21
    좋은 정보네요 ^^
  • profile
    감사합니다.
  • profile
    ddengle BOT 2018.11.23 10:29
    @신이라불리우는사나이
    신이라불리우는사나이님 축하합니다. 6 보너스 캐시에 당첨되셨습니다.!!
  • ?
    김상가 2018.11.23 10:29
    좋아요 눌렀어용~~~~~~~
  • ?
    initialch 2018.11.23 10:36
    지갑만들기 좀 어렵지만 잘 보고 있습니다.

List of Articles
번호 분류 제목 추천 수 조회 수 글쓴이 날짜
공지 [땡글운영위] 이사진 구성원 변경 공지 7 file 13 756
땡글운영위
2019.09.03
공지 로그인이 안되시는 분은 문의해주시기 바랍니다. 3 4 1615
땡글개발자
2019.08.21
공지 개인 정보 유출에 따른 사과문 54 file 8 3454
땡글개발자
2019.08.21
1452 질문 [Python] Dataframe 계산된 행까지만 계산하는 코드 관련 문의드립니다. from pandas import Series, DataFrame   raw_data = {'': ['2018-01-01  12:00:00 AM', '2018-01-02  12:00:00 AM', '2018-01-03  12:00:00 AM', '2018-01-04  12:00:00 AM'],             'drop': [None, 1, None, ... 1 355
축당첨
2018.11.25
1451 개발 BTC와 이더리움 전송에 관한 데이터를 수집해보았습니다. *** 답변 댓글이 있을 때 글 내용 삭제시 경고 없이 계정이 정지됩니다. *** *** 개인정보가 포함된 경우 혹은 불법적인 요소의 수정은 가능합니다.*** -----------------------------------------------------------... 3 file 8 596
Null_name
2018.11.25
1450 [강좌] 이더소셜 PHP API 서버 만들기 - 프롤로그 안녕하세요. 쌩광부 입니다.   제가 진행하고 있는 "모바일 지갑 만들기"를 완성하기 위해서는 API 서버가 필수적으로 필요하게 되는데요. 기존 API로는 부족한 것이 조금 있기 때문에 별도의 API 서버를 제작해 보도... 8 19 2595
쌩광부
2018.11.24
1449 질문 Python Dataframe 고수님들께 질문드립니다. 여기가 한국의 stackoverflow 군요!   저는 파이썬으로 알고리즘 매매 개발 중인 자동차 설계 엔지니어입니다.   앞으로 이곳에서 열심히 활동할 수 있을 것 같아 의욕이 활활 타오르네요!       각설하고, MACD를 살... 2 383
축당첨
2018.11.24
1448 [강좌] 쌩광부의 모바일 지갑 만들기 #5. React Native AsyncStorage 안녕하세요. 쌩광부입니다.   이번 시간에는 RN에서 데이터를 파일로 저장하는 방법을 배워 보겠습니다. 간단하게 파일 입출력 함수를 이용해서 데이터를 저장할 수도 있겠지만 모바일에서는 보안 관련 문제가 많기 ... 5 15 1075
쌩광부
2018.11.24
1447 질문 마이닝 리워드 트랜잭션에서의 주소의 의미 안녕하세요 블록체인 고수님들께 질문이 있어 처음 글 올려봅니다.   현재 litecoin-core를 베이스로 재미삼아 알트코인을 만들어 보고 있습니다. (만들다긴 보단 파라미터만 변경하는 수준;;)   빌드까지는 성공해서... 3 284
숫소
2018.11.23
1446 블록체인에서 쓰이는 스마트 컨트랙트란 어떤 기능일까? ETC_01         우리는 살면서 많은 계약을 하며 살아갑니다. 스마트폰을 하나 사더라도 여러 계약서에 서명을 해야 합니다. 계좌 만들 때, 보험 가입 할때, 자동차를 사거나 부동산을 매매할 때 이 모든 것은 계약으로 진행... 16 file 18 873
풀트리
2018.11.22
1445 블록체인 강의 03 - P2P 블록체인과 P2P에 대한 강의입니다. 블록체인을 밑바닥부터 완벽하게 알필요까지는 없으신 분은 패스해도 됩니다. 편집 기술이 전혀 없어서 그냥 대충 잘라서 넣은 점 양해 부탁드립니다. !!!!! 혹시라도 제가 틀린 ... 9 15 834
쌍둥아빠
2018.11.22
1444 질문 비트코인 월렛 개발중입니다. BIP44에 대해 질문드립니다. ㅠㅠ 안녕하세요. 비트코인 BIP44 2가지 질문 드립니다.   m / purpose' / coin_type' / account' / change / address_index 일단 bip44 path를 남깁니다.   1. 밸런스 스캔   리미트 갭을 20개라고 명시해 놨던데 이 말뜻... 7 903
dugong
2018.11.22
[강좌] 쌩광부의 모바일 지갑 만들기 #4. 이더리움 계열 지갑 만드는 방법 안녕하세요. 쌩광부입니다.   이번 시간에는 RN에 대한 설명을 잠시 접어두고 이더리움 계열 코인의 지갑 구조에 대해서 설명하도록 하겠습니다.   #4. 이더리움 계열 지갑 만드는 방법   1. Private Key, Public Key... 16 30 1160
쌩광부
2018.11.21
1442 블록체인 강의 02 - 총론-트랜잭션, 블록, 블록체인의 구조 블록체인, 블록, 트렌젝션에 대한 총론입니다. L* 기업 개발팀을 교육한 실제 강의 영상입니다. 편집 기술이 전혀 없어서 그냥 대충 잘라서 넣은 점 양해 부탁드립니다. !!!!! 혹시라도 제가 틀린 부분이나 부족한 부... 3 12 716
쌍둥아빠
2018.11.21
1441 질문 지갑은 ERC 토큰을 받았음을 어떻게 알 수 있나요?   ESN 계정을 가지고 있고, 해당 계정으로 누군가 땡글 토큰을 보냈다고 가정할때 지갑은 전달 받은 내역이 땡글 토큰임을 어떻게 확인하나요?   일반 거래와 토큰 거래의 다른점이 금액을 0으로 하고, input data에 ... 9 508
AppA
2018.11.21
1440 블록체인 교육 실제 강의 유튜브 영상 L* 기업 개발팀을 교육한 실제 강의 영상입니다. 필요한 말만 다시 모아서 편집하려니 시간이 상당히 많이 걸리네요. 총 16시간 교육했으며 조금씩 잘라서 계속 유튜브에 올리겠습니다. 오늘은 첫 강의라 주의집중하... 20 25 1199
쌍둥아빠
2018.11.20
1439 개발 플라즈마(Plasma) 리서치 월드 맵 - 이더리움 확장성 솔루션 플라즈마 연구자료   이 글은 온더의 박정원(Aiden) 연구원님의 미디엄 글[https://medium.com/onther-tech/plasma-world-map-kr-9c1eec16859e]을 옮긴 것으로, 이더리움의 확장성 솔루션인 플라즈마의 연구내역들을 한눈에 살펴보도록 ... 3 file 4 763
철학자
2018.11.20
1438 개발 업비트 거래량 관련 개발문의요..       1. 업비트의 btc 마켓의 모든 코인의 거래량을 엑셀 또는 한곳으로 가져옴 2. 그중 10초 거래량이 이전 5분 평균 거래량보다 X% 많으면 해당코인 표시 3. 30초 거래량이 이전 5분 평균 거래량보다 X% 많으면 해... 6 615
몰라용
2018.11.19
1437 개발 웹 마이닝 모니터링 자작   자동 트레이딩 봇 프로그램 개발 중 막혀서 진척이 안되는 구간이 있어서 주말 이틀 동안 마이닝 모니터링 페이지 좀 만들어 봤네요. Ajax jQuery로 만들었습니다. 간단 명료하게 GPU 온도는 그냥 색깔로 표시했어... 3 file 3 2049
bestbester
2018.11.19
1436 개발 웹 모니터링 - CCMINER, Claymore's Dual(Ethash), EWBF miner(Ethash), xmr-stak-*(Cryptonight), claymore's -XMR   안녕하세요.   조용히 운영중인 사이트 오랜만에 소개 합니다.   마이닝허브 모니터링 사이트에서    기존 지원 모니터링 툴 CCMINER, Claymore's Dual(Ethash), EWBF miner(Ethash), xmr-stak-*(Cryptonight), cla... 14 12 1245
stigma8326
2018.11.19
1435 이더리움 데브콘4 참관기 1 이더리움 데브콘4 참관기 1 2018년 프라하에서 열린 이더리움 데브콘4에 참석했었습니다. 행사 참석 기사를 위해 썼던 내용을 정리해보았습니다.   데브콘4에서 가장 인상깊었던 내용   세션하나만을 뽑기는 좀 어렵... 24 file 34 2787
atomrigs
2018.11.18
1434 질문 빗썸 all ticker는 미래에서 온걸까요? 파이썬을 이용해 가격을 끌어왔는데 1542430950.476311 1542430951.405 위가 time.time()을 이용한현재 시간이고 아래가 빗썸 all ticker의 date입니다. 빗썸 티커가 1초 더 미래네요;; 1초 후 미래의 가격을 알 수 ... 3 561
Mist.B
2018.11.17
1433 질문 삭제한 글입니다 삭제한 글입니다 444
빗하이
2018.11.15
Board Pagination Prev 1 ... 8 9 10 11 12 13 14 15 16 17 ... 85 Next
/ 85

개인 정보 유출에 따른 안내

개인정보 유출에 따른 사과문

https://www.ddengle.com/board_free/11420106

8월20일 땡글 해킹사고 경과 보고

https://www.ddengle.com/board_free/11420345

로그인이 안되시는 분

https://www.ddengle.com/board_free/11420465
8월18일~20일 해커에 의해 땡글 사이트에서 땡글 회원님들의 아이디 및 비밀번호가 유출되고 있음을 발견하였습니다.
더이상 피해가 발생하지 않도록 조치된 상태이나 일부 사용자의 개인정보가 유출되었으며, 해커는 추가적으로 사용자 정보를 불법적으로 공개하겠다고 합니다.
  • 최근에 접속한 사용자의 경우 ID와 비번이 유출되었을 가능성이 높습니다. 최대 비번을 꼭 바꿔주시기 바랍니다. (특히 8월부터 8월21일까지)
  • 최근에 접속하지 않은 사용자의 경우에도 해커는 사용자 정보를 입수하여 그 일부 정보를 불법적으로 공개하였습니다.
  • 해커에 의한 사용자 도용을 방지하고자, 최근 수개월간 비번 변경을 하지 않은 약 1만8천명의 사용자를 이용정지시켰습니다.
이 글을 보시는 땡글 유저분은 자신이 계정이 정지된 상태라면 [email protected] 혹은 [email protected] 으로 메일주셔서 자신임을 간단히 인증하여 다시 계정을 활성화시키는 해킹 안내메일을 받으시기 바라며, 혹은 기존 계정 삭제 요청을 해주시기 바랍니다.
Close