超簡単なやつ。

ブツ

インストール&実行

NAME='Node.js.CoinInfo.CreateAddress.20220922175527'
git clone https://github.com/ytyaru/$NAME
cd $NAME
npm install
node index.js

プロジェクト作成

NAME=hello-coininfo
mkdir $NAME
cd $NAME
npm init -y
npm i tiny-secp256k1 ecpair coininfo bitcoinjs-lib
node index.js

ソースコード作成

vim index.js

追記

前回コメントで教えていただいたObject.keysでリファクタリングした。

const tinysecp = require('tiny-secp256k1');
const coininfo = require('coininfo');
const ecpair = require('ecpair');
const bitcoin = require('bitcoinjs-lib');

const names = Object.keys(coininfo)
const units = Object.values(coininfo).map(coin=>coin.main.unit)

function error() {
    console.log('第一引数に以下のうちいずれかを指定してください。')
    console.log('出力結果はアドレス(p2pkh,p2wpkh)、公開鍵、秘密鍵の順に一行ずつ出力します。')
    console.assert(names.length === units.length)
    console.log(units.join('\n'))
    process.on("exit", ()=>process.exit(1))
}
function createAddress(unit) {
    const network = coininfo(unit).toBitcoinJS();
    const ECPair = ecpair.ECPairFactory(tinysecp)
    const key = ECPair.makeRandom()
    function getAddr(func, arg) { try { return func(arg).address } catch(e) { return '' } }
    return {
        'PrivateKey': key.privateKey.toString('hex'),
        'PublicKey': key.publicKey.toString('hex'),
        'Addresses': {
            'p2pkh': getAddr(bitcoin.payments.p2pkh, { pubkey: key.publicKey, network: network }),
            'p2wpkh': getAddr(bitcoin.payments.p2wpkh, { pubkey: key.publicKey, network: network }),
        }
    }
}
if (process.argv.length < 3) { error(); return; }
if (!units.includes(process.argv[2])) { error(); return;  }
address = createAddress(process.argv[2])
console.log(address.Addresses.p2pkh)
console.log(address.Addresses.p2wpkh)
console.log(address.PublicKey)
console.log(address.PrivateKey)

コインによっては出力されないものもあった。原因不明。秘密鍵や公開鍵はすべて出力されたのだが。

通貨 p2pkh p2wpkh
BCH
BLK
BTC
BTG
RYO
CITY
DASH
DNR
DCR
DGB
DOGE
GRS
LTC
VIA
MONA
NBT
NMC
PPC
QTUM
RVN
RDD
VTC
x42
ZEC
旧コード

旧コード

const tinysecp = require('tiny-secp256k1');
const coininfo = require('coininfo');
const ecpair = require('ecpair');
const bitcoin = require('bitcoinjs-lib');
if (process.argv.length < 3) {
    console.log('第一引数に以下のうちいずれかを指定してください。さもなくばBTCとして出力します。')
    console.log('出力結果はアドレス(p2pkh,p2wpkh)、公開鍵、秘密鍵の順に一行ずつ出力します。')
    console.log(coininfo.bitcoincash.main.unit)
    console.log(coininfo.blackcoin.main.unit)
    console.log(coininfo.bitcoin.main.unit)
    console.log(coininfo['bitcoin gold'].main.unit)
    console.log(coininfo.c0ban.main.unit)
    console.log(coininfo.citycoin.main.unit)
    console.log(coininfo.dash.main.unit)
    console.log(coininfo.denarius.main.unit)
    console.log(coininfo.decred.main.unit)
    console.log(coininfo.digibyte.main.unit)
    console.log(coininfo.dogecoin.main.unit)
    console.log(coininfo.groestlcoin.main.unit)
    console.log(coininfo.litecoin.main.unit)
    console.log(coininfo.viacoin.main.unit)
    console.log(coininfo.monacoin.main.unit)
    console.log(coininfo.nubits.main.unit)
    console.log(coininfo.namecoin.main.unit)
    console.log(coininfo.peercoin.main.unit)
    console.log(coininfo.qtum.main.unit)
    console.log(coininfo.ravencoin.main.unit)
    console.log(coininfo.reddcoin.main.unit)
    console.log(coininfo.vertcoin.main.unit)
    console.log(coininfo.x42.main.unit)
    console.log(coininfo.zcash.main.unit)
    process.on("exit", ()=>process.exit(1))
    console.log('--------------------')
}
function createAddress(network) {
    const ECPair = ecpair.ECPairFactory(tinysecp)
    const key = ECPair.makeRandom()
    function publicKey() {
        try { return key.publicKey.toString('hex') }
        catch(e) { return '' }
    }
    function privateKey() {
        try { return key.privateKey.toString('hex') }
        catch(e) { return '' }
    }
    function p2pkh() {
        try { return bitcoin.payments.p2pkh({ pubkey: key.publicKey, network: network }).address }
        catch(e) { return '' }
    }
    function p2wpkh() {
        try { return bitcoin.payments.p2wpkh({ pubkey: key.publicKey, network: network }).address }
        catch(e) { return '' }
    }
    return {
        'PrivateKey': privateKey(),
        'PublicKey': publicKey(),
        'Addresses': {
            'p2pkh': p2pkh(),
            'p2wpkh': p2wpkh(),
        }
    }
}
address = createAddress(process.argv[2])
console.log(address.Addresses.p2pkh)
console.log(address.Addresses.p2wpkh)
console.log(address.PublicKey)
console.log(address.PrivateKey)

実行

node index.js

引数なしで実行する。

結果

第一引数に以下のうちいずれかを指定してください。さもなくばBTCとして出力します。
出力結果はアドレス(p2pkh,p2wpkh)、公開鍵、秘密鍵の順に一行ずつ出力します。
BCH
BLK
BTC
BTG
RYO
CITY
DASH
DNR
DCR
DGB
DOGE
GRS
LTC
VIA
MONA
NBT
NMC
PPC
QTUM
RVN
RDD
VTC
x42
ZEC
--------------------
p2pkhアドレス
p2wpkhアドレス
公開鍵
秘密鍵

通貨を指定する

第一引数にMONABTCなど好きな通貨を指定するとそのアドレスを返す。

node index.js MONA
p2pkhアドレス
p2wpkhアドレス
公開鍵
秘密鍵

情報源