[블록체인] 니모닉(Mnemonic) 지갑 개발하기

조미진·2022년 2월 7일
1

블록체인 실습

목록 보기
2/5
post-thumbnail

📚 INTRO

니모닉이 무엇인지 알아보고 니모닉 지갑을 개발해봅시다!

🔎 니모닉(Mnemonic)

니모닉(Mnemonic)은 지갑을 복구하기 위해 12개의 단어를 조합하는것을 의미합니다.
암호화폐 지갑은 비대칭키 암호방식을 사용하기때문에 공개키와 비밀키(개인키)가 있는데,
이 비밀키를 사람이 쓰기 편하게 만든것이 니모닉 입니다.

니모닉은 단어 12개를 순서대로 맞추는것으로 암호화된 보안 비밀번호 방식으로
니모닉 문자를 초기대로 하지 못하면 아무도 지갑을 열 수 없습니다.

👉 암호화폐 지갑을 잘 모르겠다면?
👉 니모닉에 대해 더 자세히 알고싶다면?

🔎 니모닉 지갑 개발하기

니모닉 지갑을 만들어봅시다🤗

🧐 개발 전 환경세팅

⚠️ 코들르 작성하기 위해 vscode와, 로컬 서버에 키스토어 파일이 생기는지 확인하기 위해서 Postman, Insomnia와 같은 API 테스트 플랫폼이 필요합니다! 먼저 설치해주세요😆
저는 Insomnia를 사용했습니다👍

🧑‍💻 필요기능 설계

니모닉 지갑에서 필요한 기능들을 정리해봅시다

  1. 랜덤으로 니모닉 코드를 생성할 수 있어야한다
  2. 니모닉 코드와 비밀번호를 입력하면 지갑이 생성된다

가장 중요한것은 이렇게 두가지겠죠?
그럼 이 기능들을 구현하기 위해 어떤 함수를 구현해야하는지, 어떤 모듈을 사용해야하는지 생각해봅시다.

우리는 간단한 이더리움 자바스크립트 지갑인 LightWallet모듈을 사용해서 지갑을 만들어 봅시다.

🧑‍💻 개발시작!

설계라고 할것도 없이 간단했지만..! 어떤것을 만들어야하는지 간단하게라도 적어보는게 생각보다 정말 중요하답니다!
그럼 설계한것을 기반으로 코드를 작성해봅시다.

⭐️ 니모닉 코드를 생성하는 API작성

니모닉 코드를 만드는 API를 만들어봅시다.

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

이더리움 자체 코드 함수를 통해 니모닉코드를 생성하고, 변수에 저장합니다.

그럼 나의 로컬서버에서 니모닉코드를 잘 받아오는지 확인해봅시다🧐

다음은 니모닉코드를 통해서 지갑을 생성하는 API를 만들어봅시다.

app.post("/getWallet", 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({ message: "실패" });
            } else {
              res.json({ address });
            }
          });
        });
      }
    );
  } catch (exception) {
    console.log("NewWallet ===>>>" + exception);
  }
});

니모닉코드와 비밀번호를 입력하면 생성된 지갑 주소를 반환해줍니다.

완성입니다!🤗

📚 회고

유니콘을 만들고싶었지만 결국 지렁이를 만들었다!

처음에는 정말 예쁜 지갑생성 프로그램을 만들고싶어서
그만뒀던 웹디자인에 다시 손을대서 그림부터 열심히 그렸더랬다,,😭
배경도 만들고 오랜만에 정말 신나서 버튼 디자인도 다 해보고
글씨체도 찾아가면서 싱글벙글하며 꿈에 부풀었었는데
이게웬걸 손가락이 맘대로 움직이지를 않고...
아직 욕심부려서 만들때는 아닌것 같아서 정말 배웠던것만 생각하면서 만들었다😭

그래도 내가 모르는것을 아는게 제일 중요하다고 약한 부분을 알았으니
열심히 공부해서 꼭 내 디자인을 써먹어봐야겠다!

🐈 코드는 여기!(Github)

profile
Hello World! 🙌

0개의 댓글