이더리움 지갑과 관련된 javascript 라이브러리들 살펴보기
bip39
- Bip39는 Mnemonic과 관련된 내용이 담긴 라이브러리
- Bip39 라이브러리는 generateMnemonic, mnemonicToEntropy, mnemonicToSeed, wordlists, entropyToMnemonic, validateMnemonic 등의 메서드를 제공한다.
🍙 Entropy는 임의의 난수를 의미한다.
- 임의의Mnemonic 생성, entropy를 통한 Mnemonic 생성, Mnemonic의 seed 변환, Mnemonic의 wordlist, 유효한 Mnemonic인지 검증하는 기능을 제공한다.
https://github.com/bitcoinjs/bip39
GitHub - bitcoinjs/bip39: JavaScript implementation of Bitcoin BIP39: Mnemonic code for generating deterministic keys
JavaScript implementation of Bitcoin BIP39: Mnemonic code for generating deterministic keys - GitHub - bitcoinjs/bip39: JavaScript implementation of Bitcoin BIP39: Mnemonic code for generating dete...
github.com
bip32
- Bip32는 HD월렛과 관련된 라이브러리.
- Bip32 라이브러리를 사용하기 위해서는 tiny-secp256k1 라이브러리가 필요하다. (타원곡선암호기술(ECC)과 관련된 라이브러리)
import * as ecc from "tiny-secp256k1";
import { BIP32Factory } from "bip32";
const bip32 = BIP32Factory(ecc);
- Bip32 라이브러리의 fromSeed 메서드를 사용하면, seed키로부터 root키를 만들 수 있다.
- 생성된 root키 객체에서 derivePath 메서드를 사용하면, bip44규격에 맞는 HD월렛의 비밀키를 생성할 수 있는 것 같다.
https://github.com/bitcoinjs/bip32
GitHub - bitcoinjs/bip32: A BIP32 compatible library.
A BIP32 compatible library. Contribute to bitcoinjs/bip32 development by creating an account on GitHub.
github.com
Bip85
- Bip32 root키로부터 entropy를 파생하여 다른 지갑에서 사용할 수 있게 한다.
https://github.com/AndreasGassmann/bip85
GitHub - AndreasGassmann/bip85: JavaScript implementation of Bitcoin BIP85: Deterministic Entropy From BIP32 Keychains
JavaScript implementation of Bitcoin BIP85: Deterministic Entropy From BIP32 Keychains - GitHub - AndreasGassmann/bip85: JavaScript implementation of Bitcoin BIP85: Deterministic Entropy From BIP32...
github.com
Bip21
- 사용자가 웹 페이지의 링크를 클릭하거나 QR 코드를 스캔하기만 하면 쉽게 결제할 수 있도록 하는 URL을 생성한다.
https://github.com/bitcoinjs/bip21
GitHub - bitcoinjs/bip21: A BIP21 compatible URL encoding utility library
A BIP21 compatible URL encoding utility library. Contribute to bitcoinjs/bip21 development by creating an account on GitHub.
github.com
🍭 이더리움 블록체인과의 통신을 더 간편하게 해주는 대표적인 이더리움 자바스크립트 API 라이브러리로 web3와 ethers가 있다.
Web3
- new Web3().eth.accounts.privateKeyToAccount(private key) 메서드를 통해서 하나의 wallet account를 만들 수 있다.
🍮 private key는 64 length의 string
- 생성된 account 객체의 구조
interface Account {
address: string;
privateKey: string;
sign: Function;
signTransaction: Function;
encrypt: Function;
}
- 객체 내부의Encrypt 함수를 통해서 keystore를 생성할 수 있다.
- 역으로 new Web3().eth.accounts.wallet.decrypt() 메서드로 keystore를 account객체로 변환할 수 있다.
- new Web3().eth.accounts.wallet.create(생성할 지갑 수, entropy)를 통해서도 지갑을 생성할 수 있다.
- 여러 개의 지갑 객체를 한 번에 생성할 수 있다.
- create와 privateKeyToAccount로 생성된 지갑 객체의 구조는 동일하다.
- web3.eth.accounts.signTransaction, web3.eth.signTransaction 또는 web3.eth.personal.signTransaction 으로 트랜잭션에 서명을 하고, return값인 raw 혹은 rawTransaction을 web3.eth.sendSignedTransaction 메서드를 통해서 보낼 수 있다.
https://github.com/web3/web3.js
GitHub - web3/web3.js: Ethereum JavaScript API
Ethereum JavaScript API. Contribute to web3/web3.js development by creating an account on GitHub.
github.com
Ethers
- new ethers.Wallet(privateKey)를 통해서 지갑을 생성할 수 있다.
- 생성된 지갑의 구조는 web3의 것과 동일하지는 않다.
interface WalletType {
address: string;
_isSigner: boolean;
Etc…
}
- ethers는 가볍고 이더리움 블록체인의 관한 기능들의 요구사항을 충족하기에 인기가 많아져 web3.js보다 많은 주간 다운로드 수를 기록하고 있다.
- 또한 ethers.js는 web3.js에는 없는 니모닉과 관련된 기능들을 제공한다.
https://github.com/ethers-io/ethers.js
GitHub - ethers-io/ethers.js: Complete Ethereum library and wallet implementation in JavaScript.
Complete Ethereum library and wallet implementation in JavaScript. - GitHub - ethers-io/ethers.js: Complete Ethereum library and wallet implementation in JavaScript.
github.com
ethers나 web3 무엇을 사용하든 동일한 private key로부터 생성되는 지갑은 항상 일치한다.