学习区块链之记录

kavo / 2024-07-08 / 原文

前言,请自行安装最新 nodejs 环境

安装所需依赖

npm i bitcoinjs-lib 

npm i create-hash

npm i bip32

npm install ecpair tiny-secp256k1

 生成私钥、公钥、WIF、地址

const bitcoin = require('bitcoinjs-lib');
// bitcoin -> mainnet, testnet -> testnet
const TestNet=bitcoin.networks.bitcoin;
const createHash = require('create-hash');
const { ECPairFactory } = require('ecpair');
const crypto = require('crypto');
// 导入tiny-secp256k1库,它提供了必要的椭圆曲线加密功能
const tinysecp = require('tiny-secp256k1');
//WIF编码
const wif=require('wif');

// 使用ECPairFactory创建ECPair API,传入tinysecp作为ECC库
const ECPair = ECPairFactory(tinysecp);



let keyPair=ECPair.makeRandom({network:TestNet});

//16进制表示的私钥和公钥
var private_key=keyPair.privateKey.toString('hex');
var public_key=keyPair.publicKey.toString('hex');
console.log('pri_key = '+private_key);
console.log('pub_key = '+public_key);

var encoded=wif.encode(0x80,Buffer.from(private_key,'hex'),false);
console.log('WIF编码 = '+encoded);

//利用公钥生成地址
const { address }=bitcoin.payments.p2pkh({pubkey:keyPair.publicKey});
console.log('address = '+address);

 以上代码可能有点杂乱,看到一篇在 quicknode 的文档,比较规范

const bitcoin = require('bitcoinjs-lib');
const ECPairFactory = require('ecpair').default;
const ecc = require('tiny-secp256k1');
const fs = require('fs');

const ECPair = ECPairFactory(ecc);
const network = bitcoin.networks.testnet; // Otherwise, bitcoin = mainnet and regnet = local

async function createP2PKHwallet() {
    try {
        const keyPair = ECPair.makeRandom({ network: network });
        const { address } = bitcoin.payments.p2pkh({
          pubkey: keyPair.publicKey,
          network: network, //这里是network,不填写该参数则默认为主网
        });
        const privateKey = keyPair.toWIF()

        console.log(`| Public Address | ${address} |`)
        console.log(`| Private Key | ${privateKey} |`)

        const wallet = {
            address: address,
            privateKey: privateKey
        };

        const walletJSON = JSON.stringify(wallet, null, 4);

        fs.writeFileSync('wallet.json', walletJSON);

        console.log(`Wallet created and saved to wallet.json`);
    } catch (error) {
        console.log(error)
    }
}

createP2PKHwallet();

 在这里说下,如果你想使用更少的代码来生成这些信息,你可以使用 http://cryptocoinjs.com/guide/getting-started/

安装

npm i coinkey

使用

var CoinKey = require('coinkey') //1.0.0

var ck = new CoinKey.createRandom()

console.log("Private Key (Wallet Import Format): " + ck.privateWif)
console.log("Private Key (Hex): " + ck.privateKey.toString('hex'))
console.log("Address: " + ck.publicAddress)