JavaScript

이더리움 지갑과 관련된 javascript 라이브러리들 살펴보기

citron031 2023. 1. 6. 08:51

bip39

-       Bip39Mnemonic과 관련된 내용이 담긴 라이브러리

-       Bip39 라이브러리는 generateMnemonic, mnemonicToEntropy, mnemonicToSeed, wordlists, entropyToMnemonic, validateMnemonic 등의 메서드를 제공한다.

🍙 Entropy는 임의의 난수를 의미한다.

-       임의의Mnemonic 생성, entropy를 통한 Mnemonic 생성, Mnemonicseed 변환, Mnemonicwordlist, 유효한 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

-       Bip32HD월렛과 관련된 라이브러리.

-       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 라이브러리로 web3ethers가 있다.

Web3

-       new Web3().eth.accounts.privateKeyToAccount(private key) 메서드를 통해서 하나의 wallet account를 만들 수 있다.

🍮 private key64 lengthstring

-       생성된 account 객체의 구조

interface Account {
	address: string;
	privateKey: string;
	sign: Function;
	signTransaction: Function;
	encrypt: Function;
}

 

-       객체 내부의Encrypt 함수를 통해서 keystore를 생성할 수 있다.

-       역으로 new Web3().eth.accounts.wallet.decrypt() 메서드로 keystoreaccount객체로 변환할 수 있다.

-       new Web3().eth.accounts.wallet.create(생성할 지갑 수, entropy)를 통해서도 지갑을 생성할 수 있다.

-       여러 개의 지갑 객체를 한 번에 생성할 수 있다.

-       createprivateKeyToAccount로 생성된 지갑 객체의 구조는 동일하다.

-       web3.eth.accounts.signTransaction, web3.eth.signTransaction 또는 web3.eth.personal.signTransaction 으로 트랜잭션에 서명을 하고, return값인 raw 혹은 rawTransactionweb3.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

 

ethersweb3 무엇을 사용하든 동일한 private key로부터 생성되는 지갑은 항상 일치한다.