跳到主要内容

钱包和地址生成

· 阅读需 1 分钟
iamnivekx
Blockchain Developer

生成私钥

import { ethers } from 'ethers';

// https://docs.ethers.org/v5/api/signer/#Wallet
async function main() {
const wallet = ethers.Wallet.createRandom();
console.log('address : ', await wallet.getAddress());
console.log('public key : ', wallet.publicKey);
console.log('compressed : ', ethers.utils.computePublicKey(wallet.publicKey, true));
console.log('private key : ', wallet.privateKey);
}

main().catch(console.error);

私钥生成地址

import { privateToAddress, privateToPublic, isValidPrivate, publicToAddress, toChecksumAddress } from 'ethereumjs-util';
import { ec as EC } from 'elliptic';
import 'dotenv/config';

const ec = new EC('secp256k1');
const { PRIVATE_KEY } = process.env;
const privateKey = Buffer.from(PRIVATE_KEY!, 'hex');

const publicKey = privateToPublic(privateKey);
const address = privateToAddress(privateKey);

console.log('isValidPrivate : ', isValidPrivate(privateKey));
console.log('public key : ', publicKey.toString('hex'));
console.log('private to address : ', address.toString('hex'));
console.log('public to address : ', publicToAddress(publicKey).toString('hex'));
console.log('BIP55 address : ', toChecksumAddress(publicToAddress(publicKey, true).toString('hex')));

const pair = ec.keyFromPrivate(privateKey);
const compact = pair.getPublic(true, 'hex');
const decompose = pair.getPublic(false, 'hex');
const decomposeBuf = Buffer.from(decompose, 'hex');
const addr = publicToAddress(decomposeBuf, true).toString('hex');
console.log('compact : ', compact);
console.log('decompose : ', decompose);
console.log('address : ', addr);
console.log('bip55 address : ', toChecksumAddress(addr));