Mnemonic Wallet 개발하기

1

블록체인

목록 보기
3/5

니모닉 코드를 이용하여 생성하는 방법

일반적인 단어로 표현되는 니모닉 코드는 암호화폐 지갑 사용자가 난해한 기술에 대한 이해 없이도 지갑을 편리하게 사용할 수 있도록 돕는다.

ex. 메타마스크, Kaikas

니모닉이란?

블록체인에서 니모닉(Mnemonic)은 지갑을 복구하기 위한 일반적인 단어들의 조합을 뜻합니다.
사전적 의미로는 정보의 기억을 위한 기억술입니다. 숫자의 나열처럼 직관적인 관계가 없어 외우기 어려운 정보에 다른 정보를 연결하여 외우기 쉽도록 하는 데 쓰입니다.

암호화폐 지갑은 비대칭 키 암호 방식을 사용합니다. 그래서 공개 키와 비밀 키가 사용이 되는데, 이 비밀 키를 사람이 쓰기 편하게 만들어진 것이 바로, 니모닉(mnemonic)입니다. (공개키는 계좌처럼 사용되고 비밀키는 누구에게도 공개하면 안된다.)

암호화 알고리즘 보안 성능은 2^256(2의 256승)을 활용하여 직접사용하기에는 사람으로서는 불가능하므로 좀 더 쉬운 단어들의 조합으로 활용했다고 생각하면 쉽다.

Untitled

니모닉 코드와 시드 생성 9단계로 니모닉 코드는 BIP-39에 정의되어 있으며, BIP-39는 니모닉 코드의 표준이 됩니다.

실제로 eth-lightwallet 모듈을 이용하여 간단한 Mnemonic Wallet을 개발하고, Postman을 사용하여 API 테스트를 진행하는 것을 목표로 했다.

  • eth-lightwallet 모듈에 내장되어 있는 함수를 사용하여 개발
    • 랜덤한 니모닉 코드를 생성
    • 니모닉을 시드로 키스토어를 생성
  • Postman을 사용하여 결과 확인
  • fs 모듈을 이용한 키스토어 로컬 저장

1. 환경설정

서버는 express로 생성, eth-lightwallet모듈로 지갑 생성, fs모듈을 사용해 keystore저장, npm으로 진행하였음.

2. **newMnemonic API 만들기 (시드구문 만들기)

router.post("/newMnemonic", async (req, res) => {
  let mnemonic;
  try {
    mnemonic = lightwallet.keystore.generateRandomSeed(); // 함수 실행후 랜덤된 12개 단어배열 얻음
    res.json({ mnemonic });
  } catch (err) {
    console.log(err);
  }
});

"mnemonic": "sadness vacuum rail meadow curtain retire trap ocean nominee nerve logic offer”

3. 니모닉코드와 패스워드로 지갑 생성

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);
    }
});

후에 postman으로 니모닉코드를 활용해 패스워드 지갑 주소를 얻음

전체코드

https://github.com/HYOSEUNGAN/Mnemonic

회고

니모닉 지갑에 코드를 하나 하나 해석하면서 부족한 부분을 많이 느꼈다. postman, node, express, 로컬 환경까지 좀 더 다양한 환경, 다양한 작업을 실행하면서 익숙해져야겠다. 기본에 충실하고 좀 더 탐구해보려는 자세가 개발자에겐 더욱 필요하고 그것이 내것이 된다는 것을 더욱 느끼는 프로젝트였다.

1개의 댓글

comment-user-thumbnail
2022년 6월 10일

good

답글 달기