-
비트코인 지갑 생성하기 (node.js) 및 잔액 확인Node 2023. 1. 28. 15:16
- 비트코인은 bip 44, bip49, bip 84와 같이 지갑을 생성하는 표준이 형성되어 있다.
🍸 bip 44는 계층지갑, bip49는 P2WPKH-nested-in-P2SH 기반 계정, bip84는 P2WPKH 기반 계정을 생성하는 표준이다.
https://trezor.io/learn/a/what-are-bips-slips
https://trezor.io/learn/a/what-are-bips-slips
trezor.io
- 자바스크립트로 비트코인 지갑을 생성하는 코드를 작성하였다.
- ecpair 라이브러리를 통해서 비트코인 지갑 키쌍을 생성할 수 있다.
const bip39 = require("bip39"); const { ECPairFactory } = require("ecpair"); const bitcoin = require("bitcoinjs-lib"); const { BIP32Factory } = require("bip32"); const ecc = require("tiny-secp256k1"); const base58 = require("bs58"); const crypto = require("crypto"); const fetch = require("node-fetch"); // node-fetch@2 const ecpair = ECPairFactory(ecc); const bip32 = BIP32Factory(ecc); const dummyData = "dummy data"; const entropy = crypto.createHash("sha256").update(dummyData).digest("hex"); const mnemonic = bip39.entropyToMnemonic(entropy); bip39.mnemonicToSeed(mnemonic).then((seed) => { const rootNode = bip32.fromSeed(seed); const childNode = rootNode.derivePath("m/84'/0'/0'/0/0"); const bitcoinKeyPair = ecpair.fromPrivateKey(childNode.privateKey); console.log( base58.encode(bitcoinKeyPair.publicKey), base58.encode(bitcoinKeyPair.privateKey) ); const payment = bitcoin.payments.p2pkh({ pubkey: bitcoinKeyPair.publicKey, }); console.log("address", payment.address); fetch(`https://blockchain.info/rawaddr/${payment.address}`).then( (balance) => { balance.json().then((jsonBalance) => { console.log("balance", jsonBalance.final_balance); }); } ); });- 비트코인의 잔액을 확인하는 방법으로 외부 API를 사용하였다.
- https://www.blockchain.com/explorer/api/blockchain_api
Blockchain Developer APIs
The most popular and trusted block explorer and crypto transaction search engine.
www.blockchain.com
- bip32 라이브러리를 사용하여 HDNode를 생성, 비트코인 path의 첫 번째 index 지갑을 생성하였다.
- ecpair 라이브러리로 비트코인 키페어를 생성하였고, bitcoinjs-lib 라이브러리로 결제 주소를 생성할 수 있었다.
- 비트코인은 다양한 지갑 주소를 생성할 수 있고, 필요에 따라서 선택할 수 있다.
- 만약 Segwit이 적용된 트랜잭션을 사용한다면, 다음과 같이 주소를 생성한다.
const paymentP2wpkh = bitcoin.payments.p2wpkh({ pubkey: bitcoinKeyPair.publicKey, network: bitcoin.networks.bitcoin, });- 위와 같이 주소 생성 시, 두번째 인자로 네트워크를 전달할 수도 있다.
- 비트코인 주소의 잔액을 확인하는 방법으로 API 요청을 보낼 수 있다.
- https://www.blockchain.com/explorer/api/blockchain_api 의 API를 사용하면, 다음과 같이 비트코인 주소의 잔액을 확인할 수 있다.
const balance = await fetch( `https://blockchain.info/rawaddr/${address}`, ); const jsonBalance = await balance.json(); console.log('balance', jsonBalance.final_balance);Blockchain Developer APIs
The most popular and trusted block explorer and crypto transaction search engine.
www.blockchain.com
생성한 bitcoinKeyPair는 복구를 위한 값인 wif로 변환할 수 있다.
const wif = bitcoinKeyPair.toWIF(); console.log('wif', wif); // 지갑 복구를 위한 값 const restoreKeyPair = ecpair.fromWIF(wif); // 복구wif로 키쌍을 복구하는 메서드가 제공되므로, wif값만 알고 있어도 지갑에 대한 정보를 복구할 수 있다.
'Node' 카테고리의 다른 글
간단하게 노드 서버에서 로그 기록하기 (morgan 사용하기) (0) 2023.03.10 Node.js 의 Crypto - Cipher, Decipher 사용하기 (0) 2023.02.09 Node.js의 문자열과 바이트 배열 (Uint8Array, Buffer) (0) 2023.02.07 Node.js 서버 생성하기 (with express) (0) 2023.01.21 Node.js를 사용하여 서버 생성하기 (0) 2023.01.20