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

안녕하세요.

쌩광부입니다.

 

저의 강좌는 오랜시간의 노력과 열정의 결과물입니다.

내용이 길고 지루하더라도, 강좌 내용에 관심없으셔도 "좋아요" 한방 눌러주시면 좋겠습니다.

그럼 더 열심히 강좌를 쓸 수 있겠죠. ^^

 

지난 시간에는 지갑을 만드는 방법에 대해서 설명했었는데요.

이번 시간에는 기존 지갑을 불러오는 방법에 대하여 설명해 보도록 하겠습니다.

이번 강좌가 이해되지 않는다면 지난 강좌를 복습하는 센스가 필요하겠죠. ^^

 

#7. 지갑 불러오기

 

1. importwallet.js 파일을 수정합니다.

 

전체 소스는 아래 링크에서 확인하시고요.

https://github.com/topmining/topwallet/blob/master/src/screen/importwallet.js

 

import { View, Text, StyleSheet, AsyncStorage, TextInput, Button, Alert }

  from 'react-native';

지난 시간과 마찬가지로 StyleSheet, AsyncStorage, TextInput, Button, Alert 컨포넌트를 사용하기 위해 import를 해줍니다.

TextInput은 문자를 입력받기 위한 컨포넌트입니다.

 

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

지갑 주소를 생성하기 위해 ethers 패키지에서 필요한 컨포넌트들을 import합니다.

 

import LoadingSpinner from 'react-native-loading-spinner-overlay';

로딩 스플레시 화면을 구현하기 위해 위 패키지를 import 합니다.

 

componentWillMount 함수를 추가합니다.

componentWillMount() {

  this.setState({

    importValue: '',

    loading: false,

    showResult: false});

}

화면이 시작할때 importValue, loading, showResult State를 설정합니다.

여기서 importValue는 입력된 값을 저장하기 위한 상태값입니다.

 

<TextInput style={styles.input} multiline={true} placeholder='프라이빗 키 또는 니모닉 단어'

  onChangeText={(text) => this.setState({importValue: text})}/>

유저가 입력한 문자값을 얻기위한 코딩입니다.

TextInput 컨포넌트에는 onChangeText Props가 있는데요.

이것은 문자가 입력되면 호출되는 함수입니다. 이 함수를 통해 어떤 문자가 입력되었는지 알 수 있겠죠. ^^

유저는 이곳에 Private Key 또는 니모닉 단어를 입력하겠죠.

 

<Button onPress={() => this.importWallet()} title="불러오기"/>

불러오기 버튼을 추가하고 눌렀을 경우 importWallet 함수를 호출합니다.

 

{this.renderImportedWallet()}

불러오기가 완료된 경우 지갑에 대한 정보를 표시합니다.

다시 한번 설명하면 위와 같이 특정 함수를 { }안에 넣게 되면 그것이 화면에 출력된다고 보시면 됩니다.

물론 함수를 사용하지 않고 바로 코딩해도 되나 소스가 복잡해지기 때문에 분리했다고 보시면 되겠네요.

renderImportedWallet 함수에서는 State에 설정된 지갑 주소가 있는 경우 State에서 지갑에 대한 내용을 가져와 출력하는 코딩이 되어 있습니다.

 

<Button onPress={() => this.saveWallet()} title="저장하기"/>

지갑을 정상적으로 불러온 경우 이것을 저장하기위해 버튼을 만들고 눌렸을 경우 saveWallet 함수를 호출하도록 지정합니다.

 

const { importValue } = this.state;

유저가 입력한 값을 가져오고요.

 

const regexp = /^[0-9a-fA-F]+$/;

이것은 Regular expression 인데요.

한글말로 하면 정규 표현식이라고 합니다.

어떤 단어들이 일정한 규칙으로 되어 있는지를 확인하기 위해 고안된 언어인데요.

입력한 값이 16진수(Hexdecimal)인지 확인하기 위해 사용합니다.

우리는 16진수로 된 Private Key를 식별할때 매우 유용합니다.

Regular expression에 대한 자세한 사항은 아래 링크를 참고하세요.

https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D

 

const isHex = importValue.substring(0, 2) === '0x' && importValue.length == 66

  && regexp.test(importValue.substring(2));

Private Key는 16진수이고 앞자리가 0x로 시작되고 66자리로 구성되어있습니다.

즉, 입력된 단어가 정해진 구조와 일치하면 바로 Private Key라는 거죠.

그게 아니면 니모닉 단어이고요. ^^

 

try {

  ...

} catch(error) {

  ...

}

만약 유저가 얼토당토않은 글자를 입력한 경우 에러가 발생될 수 있는데요.

에러가 발생되면 앱이 다운되기 때문에 사전에 에러를 검출하여 다운되는 것을 방지해야만 합니다.

이때 사용하는 것이 try catch 구문입니다. 이것은 자바 스크립트의 명령어인데요.

try 다음에 어떤 명령했는데 만약 에러가 나면 catch가 실행됩니다.

 

this.setState({loading: false, showResult: false});

Alert.alert(null, '잘못 입력하였습니다.', [ {text: '확인'}, ], { cancelable: true });

return;

에러가 난 경우 잘못 입력했다는 메시지와 함께 로딩을 중단 시키고 결과값을 표시하지 않도록 합니다.

그리고 함수를 중단(return)합니다. 

 

const mnemonic = isHex ? '' : importValue;

니모닉 단어가 있어야만 Private Key를 만드는데 Private Key로는 니모닉 단어를 알 수 없습니다.

그래서 유저가 Private Key를 입력한 경우 니모닉 단어는 없는 것으로 처리합니다.

 

자~~ 여기까지 설명이 완료되었고요.

나머지 부분은 이전 강좌와 모두 동일합니다.

 

마지막으로 앱을 실행해보면

 

C:\Users\YOUR_USERNAME\topwallet> react-native run-android

 

ImportWallet.png

 

네~~ 오늘도 미션 컴플리트~~!!

수고하셨습니다.

 

저의 모든 강좌를 보시려면 블로그를 방문해주세요.

https://www.ddengle.com/@TopMining


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

쌩광부님의 서명

Attachment
첨부 '1'
댓글 9
default debug random = 0 / type = READ / detected = READ

List of Articles
번호 분류 제목 추천 수 조회 수 글쓴이 날짜
1481 개발 라이트닝 네트워크 노드 돌리기       안녕하세요.    비트코인 확장성 솔루션 중 하나인 라이트닝 네트워크 노드를 돌려보려 합니다.   제가 워낙 프로그래밍에 무지해서 무슨 말인지 잘 모르겠습니다.   관심있으신 분은 아래... 13 file 5 2107
rhdwjd
2018.12.11
1480 비트코인을 현금처럼 쓸수있는 기술 라이트닝 네트워크 _ 블록체인 쿠키     비트코인은 10분에 한 번씩 거래내역들을 받아서 처리합니다. 초당 7건 정도의 거래를 처리할수 있다고 합니다.그러니 초당 거래 수가 7건을 넘어가면 필연적으로 거래가 밀리게 됩니다. 게... 31 24 2268
도원Dowon
2018.12.11
1479 질문 업비트 매도 주문 에러 문의 업비트 API를 쓰고있는데요   똑같은코드로 매수 매도 가격(body 값만변경)만 변경하여 주문함수가 동작중입니다.   그런데 매수는 이상없이 되는데 매도는 'Jwt의 query를 검증하는데 실패'하였... 3 0 2523
마지막시드
2018.12.10
1478 개발 블록체인 강의 04 - 암호화(1) *** 답변 댓글이 있을 때 글 내용 삭제시 경고 없이 계정이 정지됩니다. *** *** 개인정보가 포함된 경우 혹은 불법적인 요소의 수정은 가능합니다.*** ---------------------------------------... 16 14 1221
쌍둥아빠
2018.12.10
1477 질문 외부 커뮤니티 홍보를 하려면 어디에 하면 좋을지.. 제가 작은 블록체인 개발자 커뮤니티를 만들어서 이 게시판에 홍보를 했다가 경고를 먹고 삭제가 되었는데요.. 홍보를 하고 싶은데 딱히 어디에다가 하면 좋을지 잘 모르겠네요.. 네이버 검색에... 6 0 578
블록체인나라
2018.12.10
1476 질문 현재 이더리움 메인넷의 코어 크기(사이즈)가 몇기가 정도 되나요?   지금 서버를 임대해서 이더리움을 설치하고 geth 명령으로 이더리움서버를 실행했습니다.   2대를 실행해놨는데 한대는 체인데이타가 360기가가 넘었고 다른 한대(fast모드)는 150기가 정도됩... 1 2 1382
로텔
2018.12.10
1475 ProgPOW는 확실한 Anti-ASIC이 될 수 있을까요? ProgPOW에 대한 의문점 몇 가지.  ProgPOW는 확실한 Anti-ASIC이 될 수 있을까요?   https://eips.ethereum.org/EIPS/eip-1057 ProgPOW에 대하여 오늘 이 페이지를 정독해봤습니다. 아래 내용은 ... 29 21 2148
쌩광부
2018.12.09
1474 개발 웹디자이너분 계신가요? 안녕하세요..... 저 혼자 하나 만들었는데 디자인 센스가 없어서 사이트가 허름하네요 ㅠㅠ 웹디자인 도와주실분 없나요???   사이트는 www.weshareluck.io 입니다.   한번 둘러보시고 도와주실... 4 0 658
친절한냥이
2018.12.09
[강좌] 쌩광부의 모바일 지갑 만들기 #7. 지갑 불러오기 안녕하세요. 쌩광부입니다.   저의 강좌는 오랜시간의 노력과 열정의 결과물입니다. 내용이 길고 지루하더라도, 강좌 내용에 관심없으셔도 &quot;좋아요&quot; 한방 눌러주시면 좋겠습니다. 그럼 더 열심히... 9 file 19 1668
쌩광부
2018.12.09
1472 질문 Truffle 관련 질문 (이더리움 Dapp 개발) 거래소 api 공부하다가 최근 이더리움 Dapp 개발에 관심을 두게 되었고 Truffle을 사용하며 공부하고 있습니다.     oraclize 테스트 코드(https://docs.oraclize.it/#ethereum-quick-start)를 ... 3 0 622
빗코매앤
2018.12.08
1471 개발 업비트 호가창 멈춤 (api) api로 트레이딩하는 사람입니다. 오늘 새벽 4시 30분 경에 업비트 호가창이 멈췄는데요. 호가창이 멈췄는데 그 가격을 보고 주문하면 또 체결은 정상적으로 되어 버려서 손해를 봤네요 ㅠ 이번에... 5 0 1192
비락식
2018.12.08
1470 질문 알트제작중 지갑오류 문제 질문...     안녕하세요...   litecoin 8.7.4 버전을 포킹하여 수정제작을 해보고있사옵니다..   월렛 gui 까지 모두 코딩이 완료되었으나..   월렛을 실행을 하게되면 out of sync로 나타나며,, 연동이... 7 file 0 552
shinpok
2018.12.05
1469 질문 이더리움 코인이안보내집니다 ㅜ           안녕하세요 이더리움 연구중입니다. 테스트넷 패리티로 블록쌓고 동기화까지잘되었습니다. 코인전송받기 테스트중인데 코인받는건 테스트넷 수도꼭지로 잘받아집니다. 받은코인을 메타... 5 0 503
피로
2018.12.05
1468 질문 소규모 사무실에서 코인 개발하고 인계하고 개발자가 연락이 안됩니다 그나마 코인러인 저에거 문의를 하길래 아는게 트레이딩 인데;;   일단 ,   비트코인 소스로 코인 개발하고, cpu마이닝 까지는 한다고 합니다. GPU마이닝 환경은 안만들어 주고요..   그래서, 탐... 7 0 1112
쿠키맨
2018.12.05
1467 개발 해킹 불가능한 거래소 idea   로그인 자체가 없고 거래소는 그냥 TV처럼 거래기록만 방송하는 겁니다 거래소 서버는 항상 off-line 으로 동작하니까 해킹 자체가 불가능! 단 문자메시지로 매도,매수주문받고 시간상0.1초라... 18 0 1024
내가총대멘다
2018.12.04
1466 [강좌] 이더소셜 PHP API 서버 만들기 #1. 기본 설계 안녕하세요. 쌩광부입니다.   이더소셜 PHP API 서버 만들기 강좌를 시작하도록 하겠습니다. 이번 시간에는 실제 프로그래밍에 앞서 기본적인 구조에 대해서 설명하도록 하겠습니다.      프롤로... 16 file 23 3153
쌩광부
2018.12.03
1465 개발 트레이딩 봇 만들고 있습니다. 2월쯤에 이쪽에 글올리고, 한동안 구현 못하고 있다가, 최근에 한달정도 달리고 있습니다.   오늘 낮 데이터로 백테스트해보니 이렇게 나오네요. 분봉기준이고요. 저 와중에 안잃어서.. 올려봅니... 6 file 0 1162
jaypark
2018.12.03
1464 개발 블록체인 개발자가 꿈인 백수입니다. 안녕하세요, 개발자를 꿈꾸는 백수입니다. 블록체인 관련 회사에 입사하고 싶고 제가 직접 코인을 개발하고 싶은데요, 저는 현재 C++를 공부중에 있습니다. 네임스페이스 부분 하고있네요..ㅋㅋ ... 13 1 3361
railgun0
2018.12.03
1463 [강좌] 쌩광부의 모바일 지갑 만들기 #6. 니모닉 지갑 생성 안녕하세요. 쌩광부입니다.   저의 강좌는 오랜시간의 노력과 열정의 결과물입니다. 내용이 길고 지루하더라도, 강좌 내용에 관심없으셔도 &quot;좋아요&quot; 한방 눌러주시면 좋겠습니다. 그럼 더 열심히... 11 file 18 2150
쌩광부
2018.12.02
1462 개발 이오스 기반 로또 싸이트 지난 8월에 고수님들께 이것저것 물어보았는데 드디어 완성하고 서버에 올렸습니다.   www.weshareluck.io   이오스 기반으로 만들어보았습니다. (이오스가 전송수수료가 없어서.....ㅎ)   도움 ... 5 0 994
친절한냥이
2018.12.01
Board Pagination Prev 1 ... 14 15 16 17 18 19 20 21 22 23 ... 93 Next
/ 93
default debug random = 0 / type = READ / detected = READ