Mnemonic Wallet 개발 해보기

f475·2022년 2월 9일

blockchain

목록 보기
2/2
post-thumbnail

0. 필요한 것들

Ubuntu 20.04 LTS 에서 진행
node.js, npm, visual studio code 설치 필요
Postman 설치 필요

전체코드

https://github.com/aka773/mnemonic-wallet-api

1. API

~/routes/wallet/index.js를 아래와 같이 편집한다.

필요한 모듈 불러오기

var express = require('express');
var router = express.Router();
const lightwallet = require("eth-lightwallet");
const fs = require('fs');

var express = require('express') API를 구현하기 위하여 사용하는 모듈
const lightwallet = require("eth-lightwallet") 암호화된 개인 키를 저장할 수 있는 HD 지갑을 만들때 필요한 모듈
const fs = require('fs') API로 생성된 지갑을 .json 파일 형식으로 저장할 때 필요한 모듈

newMnemonic

router.post('/newMnemonic', async (req, res) => {

	let mnemonic;

	try {
		mnemonic = lightwallet.keystore.generateRandomSeed();
		res.json({ mnemonic });

	} catch (err) {
		console.log(err);
	}
});

/wallet/newMnemonic POST 요청을 받는다. 응답으로는 mnemonic을 생성하여 json형식으로 돌려준다. async를 사용하였으므로 비동기 방식으로 작동한다.

newWallet

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: 400, message: "실패" });
						} else {
							res.json({ code: 200, message: "성공" });
						}
					});
				});
			}
		);
	} catch (exception) {
		console.log("NewWallet ==>>>> " + exception);
	}
});

/wallet/newWallet POST 요청을 받는다. 먼저 요청시 mnemonicpassword 값을 받는다. lightwallet.keystore.createVault를 사용하여 keysotre 생성 후 fs 모듈을 사용하여 wallet.json 으로 저장한다. 이후 성공 여부를 상태코드로 응답해준다. async를 사용하였으므로 비동기 방식으로 작동한다.

2. 테스트

Postman을 사용하여 테스트 진행

POST wallet/newMnemonic

POST wallet/newWallet

Wallet 파일 생성

POST wallet/newWallet요청을 보내면 wallet.json 생성됨

3. 회고

간단한 API로 mnemonic을 생성 할수 있게 되었다. 비동기 작동방식 이해도가 완벽하지 않으므로 잘 이해할 수 있게 관련문서를 읽어야겠다. 이후에 시간이 된다면 웹 어플리케이션을 구성하여 클라이언트 쪽에서 직접 생성 할 수 있게끔 해볼 생각이다.

0개의 댓글