2022년 6월 30일(목) W5 도깨비 레터_테크편 줄거리..🔮

지난주,
"Metamask(메타마스크)에서 Private Key(개인키)는 어떻게 관리 되는가?" 에 이어서

이번주,
Eth-lightWallet 라이브러리를 사용해서 지갑을 만들어 보겠습니다!🙌
안녕하세요, Ovadix입니다.😎 오늘은 Crypto Wallet을 만들어 볼껀데요, 니모닉 지갑을 직접 구현하지 않아도 손쉽게 만들 수 있게 해주는 라이브러리가 있습니다! 바로 eth-lightwallet 모듈 입니다.🤗 eth-lightwallet 모듈로 지갑을 만들어 보겠습니다! Follow ME!🙌
👀 니모닉이란?
지갑을 복구하기 위한 12개의 단어로, 개인 키가 복잡한 단어들로 구성되어 입력이 불편하다는 단점을 보완하기 위한 형식입니다.

암호화폐 지갑은 비대칭키 암호방식을 사용하기 때문에 공개키와 비밀키가 존재합니다. 니모닉 단어 목록은 비밀키를 사용자가 쉽게 읽고 쓸 수 있도록 만들어주며, 덕분에 지갑을 백업하기에도 좋습니다.

니모닉 지갑을 직접 구현하지 않아도 손쉽게 만들 수 있게 해주는 라이브러리가 있습니다. 바로eth-lightwallet 모듈입니다.
💻 소스코드
const express = require('express');
const cookieParser = require('cookie-parser');
const logger = require('morgan');
const cors = require('cors');
const lightwallet = require('eth-lightwallet'); // TIP! github: https://github.com/ConsenSys/eth-lightwallet#readme
const fs = require('fs');
const app = express();
const port = 3000;
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(
  cors({
    origin: ['http://localhost:3000'],
    methods: ['GET', 'POST'],
    credentials: true,
  })
);
app.get('/', function (req, res, next) {
  res.status(200).send({ message: 'Mnemonic server is running...' });
});


// 랜덤한 니모닉 코드 생성
app.get('/newMnemonic', async (req, res) => {
  let mnemonic;
  try {
    // generateRandomSeed(): Generates a string consisting of a random 12-word seed and returns it.
    mnemonic = lightwallet.keystore.generateRandomSeed();
    res.json({ mnemonic });
  } catch (err) {
    console.log(err);
  }
});


// 니모닉 코드와 패스워드를 이용해 keystore와 address 생성
app.post('/newWallet', async (req, res) => {
  let password = req.body.password;
  let mnemonic = req.body.mnemonic;
  try {
    // createVault(options, callback): the interface to create a new lightwallet keystore.
    lightwallet.keystore.createVault(
      {
        password: password,
        seedPhrase: mnemonic, //Optionally provide a 12-word seed phrase
        hdPathString: "m/0'/0'/0'", // Optional custom HD Path String; default:"m/0'/0'/0'"
      },
      function (err, ks) {
        // Some methods will require providing the `pwDerivedKey`,
        // Allowing you to only decrypt private keys on an as-needed basis.
        // You can generate that value with this convenient method:
        ks.keyFromPassword(password, function (err, pwDerivedKey) {
          // generateNewAddress(pwDerivedKey, [num]): default of num = 1
          // generate 'num' new address/private key pairs
          // the corresponding private keys are also encrypted
          ks.generateNewAddress(pwDerivedKey, 1);
          // getAddresses(): Returns a list of hex-string addresses currently stored in the keystore.
          let address = ks.getAddresses().toString();
          // serialize(): Serializes the current keystore object into a JSON-encoded string and returns that string.
          let keystore = ks.serialize();
          fs.writeFile('wallet.json', keystore, function (err, data) {
            if (err) {
              res.json({ code: -1, message: '실패' });
            } else {
              res.json({ code: 1, message: '성공' });
            }
          });
        });
      }
    );
  } catch (exception) {
    console.log('NewWallet ==>>>> ' + exception);
  }
});


app.listen(port, () => {
  console.log(`
   Server listening on port: ${port}
  http://localhost:${port}
  `);
});
 👂 API 테스트 결과
  • 니모닉 코드 생성
postman을 이용해서 post요청을 보내보내면 결과값으로 12자리의 니모닉코드를 받을 수 있습니다.
#DOKKAEBI LETTER
도깨비 레터 Editor 절찬리 모집중..!🔮

블록체인, Defi, NFT, DAO, Web3.0 등 자신이 관심있는 주제로 자신의 인사이트를 공유하고 싶은 분이면 누구나 환영합니다!🙌 공유하고 피드백 하면서 함께 성장 해 봐요!🚀

💌E-mail💌: dokkaebi.dao@gmail.com
  • 니모닉 코드를 시드로 한 키스토어 주소 생성
발급받은 니모닉을 가지고 키스토어 주소를 생성할 수 있습니다.
🤙 정리
저번주 뉴스레터와 이번주 뉴스레터를 보게된다면 니모닉코드가 어떤 역할을 하는지, 그리고 그 니모닉코드를 와 비밀번호를 가지고 어떻게 암호화 되어 있는지, 또 메타마스크는 어떻게 중요한 데이터들을 보관하고 사용자들은 어떻게 사용하고 있는지 대략적으로 생각해 볼 수 있는 시간이 될 것 같습니다.💕
#Disclaimer

본 자료는 투자 권유 목적으로 작성된 것이 아니라는 점 말씀 드리며, 크립토 및 web3 이해를 돕기 위한 각종 정보 제공 목적으로 작성되었습니다. 본 자료는 DOKKAEBI DAO 멤버에 의해 작성되었으며 무단 도용 및 배포를 금지합니다. 본 자료에 대한 이용 등 기타 문의사항 발생 시, 하단 메일로 전달 주시기 바랍니다.

이번주 도깨비 레터는 어땠나요?
어디가 좋았고😊/어디가 쫌 아쉬웠는지🧐,
아래 버튼을 통해 피드백 주세요!💕
DOKKAEBI DAO
dokkaebi.dao@gmail.com
수신거부 Unsubscribe