니모닉이 무엇인지 알아보고 니모닉 지갑을 개발해봅시다!
니모닉(Mnemonic)은 지갑을 복구하기 위해 12개의 단어를 조합하는것을 의미합니다.
암호화폐 지갑은 비대칭키 암호방식을 사용하기때문에 공개키와 비밀키(개인키)가 있는데,
이 비밀키를 사람이 쓰기 편하게 만든것이 니모닉 입니다.
니모닉은 단어 12개를 순서대로 맞추는것으로 암호화된 보안 비밀번호 방식으로
니모닉 문자를 초기대로 하지 못하면 아무도 지갑을 열 수 없습니다.
니모닉 지갑을 만들어봅시다🤗
⚠️ 코들르 작성하기 위해 vscode와, 로컬 서버에 키스토어 파일이 생기는지 확인하기 위해서 Postman, Insomnia와 같은 API 테스트 플랫폼이 필요합니다! 먼저 설치해주세요😆
저는 Insomnia를 사용했습니다👍
니모닉 지갑에서 필요한 기능들을 정리해봅시다
- 랜덤으로 니모닉 코드를 생성할 수 있어야한다
- 니모닉 코드와 비밀번호를 입력하면 지갑이 생성된다
가장 중요한것은 이렇게 두가지겠죠?
그럼 이 기능들을 구현하기 위해 어떤 함수를 구현해야하는지, 어떤 모듈을 사용해야하는지 생각해봅시다.
우리는 간단한 이더리움 자바스크립트 지갑인 LightWallet모듈을 사용해서 지갑을 만들어 봅시다.
설계라고 할것도 없이 간단했지만..! 어떤것을 만들어야하는지 간단하게라도 적어보는게 생각보다 정말 중요하답니다!
그럼 설계한것을 기반으로 코드를 작성해봅시다.
니모닉 코드를 만드는 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);
}
});
니모닉코드와 비밀번호를 입력하면 생성된 지갑 주소를 반환해줍니다.
완성입니다!🤗
유니콘을 만들고싶었지만 결국 지렁이를 만들었다!
처음에는 정말 예쁜 지갑생성 프로그램을 만들고싶어서
그만뒀던 웹디자인에 다시 손을대서 그림부터 열심히 그렸더랬다,,😭
배경도 만들고 오랜만에 정말 신나서 버튼 디자인도 다 해보고
글씨체도 찾아가면서 싱글벙글하며 꿈에 부풀었었는데
이게웬걸 손가락이 맘대로 움직이지를 않고...
아직 욕심부려서 만들때는 아닌것 같아서 정말 배웠던것만 생각하면서 만들었다😭
그래도 내가 모르는것을 아는게 제일 중요하다고 약한 부분을 알았으니
열심히 공부해서 꼭 내 디자인을 써먹어봐야겠다!