니모닉 지갑(Mnemonic Wallet) 개발 하기

NonamedBread·2022년 2월 9일
0

니모닉 지갑(Mnemonic Wallet) 개발

1. eth-lighwallet 모듈 Postman 설치

eth-lightwallet 모듈에 내장되어 있는 함수를 사용하여 니모닉 지갑을 개발할 것이기 때문에 LightWallet을 설치한다

npm install eth-lightwallet

응답을 Postman을 사용하여 확인할 것이므로 Postman 또한 설치한다.

2. 니모닉 코드 얻기

랜덤한 12개의 니모닉코드를 생성하고 Postman을 통하여 응답을 확인한다.

router.post('/newMnemonic', async(req,res) => {
  let mnemonic;
  try {
      mnemonic = lightwallet.keystore.generateRandomSeed();
      res.json({mnemonic});
  } catch(err) {
      console.log(err);
  }
});

  • mnemonic 변수를 만들고 ightwallet.keystore.generateRandomSeed() 을 담아 응답으로 전송한다
  • 로컬 서버를 실행하고 Postman에서 니모닉 코드를 확인하는데 여기서 엔드포인트는 http://localhost:3000/wallet/newMnemonic이다.

3. newWallet API 만들기

니모닉 코드와 패스워드를 이용하여 newWallet API를 만들고 Postman으로 확인한다.

router.post('/newWallet', async(req, res) => {
    let password = req.body.password
    let mnemonic = req.body.mnemonic;

    try {
      lightwallet.keystore.createVault(
        {
          password: password, 
          seedPhrase: mnemonic,
          hdPathString: "m/0'/0'/0'"
        },
        function (err, ks) {
          ks.keyFromPassword(password, function (err, pwDerivedKey) {
            ks.generateNewAddress(pwDerivedKey, 1);
            
            let address = (ks.getAddresses()).toString();
            let keystore = ks.serialize();

            res.json({ keystore: keystore, address: address });
          });
        }
      );
    } catch (exception) { 
      console.log("NewWallet ==>>>> " + exception);
    }
});

  • 얻은 니모닉 코드를 mnemonic이라는 키의 값으로, 임의의 비밀번호를 password에 입력후 서버에 요청하면 keystore와 address를 응답받는다.
  • 여기서 엔드포인트는 http://localhost:3000/wallet/newWallet이다

4. keystore 로컬서버에 저장하기

router.post('/newWallet', async(req, res) => {
  let password = req.body.password
  let mnemonic = req.body.mnemonic;

  try {
    lightwallet.keystore.createVault({
      password: password, 
      seedPhrase: mnemonic,
      hdPathString: "m/0'/0'/0'"
      },
      function (err, ks) {
        ks.keyFromPassword(password, function (err, pwDerivedKey) {
          ks.generateNewAddress(pwDerivedKey, 1);

          let address = (ks.getAddresses()).toString();
          let keystore = ks.serialize();

          fs.writeFile('wallet.json',keystore,function(err,data){
            if(err) {
                res.json({code:999,message:"실패"});
            } else {
                res.json({code:1,message:"성공"});
            }
          });
        });
      }
    );
  } catch (exception) { 
    console.log("NewWallet ==>>>> " + exception);
  }
});

  • 응답 대신 fs.writeFile을 사용하여 로컬 서버에 json 파일을 저장 fs.writeFile('wallet.json',keystore,function(err,data){ if(err) { res.json({code:999,message:"실패"}); } else { res.json({code:1,message:"성공"});
  • 성공했다는 응답을 받으면 로컬 서버의 경로에 wallet.json 파일이 생성된다.

깃헙 주소
https://github.com/NonamedBread/Mnemonic-Wallet

5. 개발회고

목적

니모닉 지갑을(Mnemonic Wallet)을 개발하고, Postman을 사용하여 테스트한다.

Keep

직접 니모닉 지갑을 개발해 보면서 니모닉에 대해서 좀 더 알아보고 이해할 수 있었던것은 좋은 경험이였다.

Problem

Postman으로 응답을 확인하는것도 좋지만 직접 프론트를 개발하여 응답을 확인할 수 있었으면 좋았을텐데 이부분이 아쉽다.

Try

프론트부분을 좀 더 공부하고 블록체인을 적용한 웹을 개발할 수 있으면 좋을것 같다.

0개의 댓글