JS根据助记词实现Bitcoin基础操作(账户,签名)
比特币账户地址类型有四种
一般目前常用的是 BC1P
开头的
然后每个地址对应的私钥都不一样,签名数据自然也不一样
const bip39 = require('bip39');
const ecpair = require('ecpair');
const ecc = require('tiny-secp256k1');
const ECPair = ecpair.ECPairFactory(ecc);
const bitcoinMessage = require('bitcoinjs-message');
const { BIP32Factory } = require('bip32');
const bip32 = BIP32Factory(ecc);
const bitcoin = require('bitcoinjs-lib');
bitcoin.initEccLib(ecc);
// 生成种子
const seed = bip39.mnemonicToSeedSync(mnemonic);
// 使用种子生成 BIP32 根密钥
const root = bip32.fromSeed(seed);
// 获取派生路径上的密钥对,bc1p:"m/86'/0'/0'/0/0"
const path = "m/86'/0'/0'/0/0";
const child = root.derivePath(path);
const keyPair = ECPair.fromPrivateKey(child.privateKey);
// bc1p地址
const { address } = bitcoin.payments.p2tr({ internalPubkey: keyPair.publicKey.slice(1, 33) });
console.log('BTC P2TR Address:', address);
//打印私钥和公钥
const privateKey = keyPair.privateKey.toString('hex');
const publicKey = keyPair.publicKey.toString('hex');
console.log('Private Key:', privateKey);
console.log('Public Key:', publicKey);
// 签名消息
const buffer = Buffer.from(keyPair.privateKey.toString('hex'), 'hex');
const signature = bitcoinMessage.sign(evm_address, buffer, keyPair.compressed);
signatureBase64 = signature.toString('base64')