paper-wallet
Version:
Generate paper wallet for bitcoin and altcoins with CLI.
101 lines (78 loc) • 2.63 kB
JavaScript
var fs = require('fs');
var PDFDocument = require('pdfkit');
var qrImg = require('qr-image');
var qrText = require('text-qrcode');
var temp = require('temp');
var crypto = require('crypto');
var btc = require('./coins/btc.js');
var bch = require('./coins/bch.js');
var eth = require('./coins/eth.js');
var eos = require('./coins/eos.js');
async function main() {
var symbol = process.argv[2];
if (symbol)
symbol = symbol.toLowerCase();
var seed = crypto.randomBytes(32);
var wallet;
if (['btc','btg','dash','dcr','doge','ltc','mona','qtum','rdd','zec'].indexOf(symbol) >= 0) {
wallet = btc.generateWallet(seed, symbol);
} else if (['bch'].indexOf(symbol) >= 0) {
wallet = bch.generateWallet(seed, symbol);
} else if (['etc','eth'].indexOf(symbol) >= 0) {
wallet = eth.generateWallet(seed, symbol);
} else if (['eos'].indexOf(symbol) >= 0) {
wallet = eos.generateWallet(seed, symbol);
} else {
console.log('Usage: paper-wallet [btc|bch|btg|dash|dcr|doge|eos|eth|etc|ltc|mona|qtum|rdd|zec]');
return;
}
var publicAddressQR = qrImg.imageSync(wallet.publicAddress, {
size: 8,
margin: 0
});
var privateKeyQR = qrImg.imageSync(wallet.privateKey, {
size: 8,
margin: 0
});
temp.track();
var publicAddressQRFile = temp.path();
fs.writeFileSync(publicAddressQRFile, publicAddressQR);
var privateKeyQRFile = temp.path();
fs.writeFileSync(privateKeyQRFile, privateKeyQR);
var doc = new PDFDocument({
size: 'A4'
});
var pdfFile = `paper-wallet-${symbol}-${Date.now()}.pdf`;
doc.pipe(fs.createWriteStream(pdfFile));
doc.fontSize(30);
doc.text(
`${symbol.toUpperCase()} Paper Wallet`,
0, 50,
{align: 'center'});
doc.fontSize(20);
doc.text('Public Receiving Address', 100, 110);
doc.fontSize(12);
doc.text(wallet.publicAddress, 100, 135);
doc.image(publicAddressQRFile, 100, 160);
doc.fontSize(20);
doc.text('Private Spending Key', 100, 440);
doc.fontSize(12);
doc.text(wallet.privateKey, 100, 465);
doc.image(privateKeyQRFile, 100, 490);
doc.end();
var addressQRText = qrText.generate(wallet.publicAddress);
var privateKeyQRText = qrText.generate(wallet.privateKey);
console.log(`${symbol.toUpperCase()} Paper Wallet`);
console.log();
console.log('Public Receiving Address');
console.log(wallet.publicAddress);
console.log(addressQRText);
console.log();
console.log('Private Spending Key');
console.log(wallet.privateKey);
console.log(privateKeyQRText);
console.log();
console.log(`Paper wallet file created: ${pdfFile}`);
}
main();