global.jQuery = require('jquery'); require('bootstrap'); var QRCode = require('qrcode') import * as wasm from "hushpaperwallet"; var address_number = 0; function add_section(wallet_item) { let htmls = `

Address ${(() => { if (wallet_item["address"].startsWith("z")) { return "(Sapling)"; } else { return "(Transparent)"; } }) () }

${wallet_item["address"]}

`; jQuery("#wallet").append(htmls); QRCode.toCanvas(document.getElementById("qrcode_addr_"+address_number), wallet_item["address"], { scale : 5.5 }); let pk_section = `

Private Key

${wallet_item["private_key"]}


Address

${wallet_item["address"]}

${(() => { if (wallet_item.seed) { return ` HD Key: ${wallet_item["seed"]["HDSeed"]}, path: ${wallet_item["seed"]["path"]} `; } else { return ""; } }) () }
`; jQuery("#wallet").append(pk_section); QRCode.toCanvas(document.getElementById("qrcode_pk_"+address_number), wallet_item["private_key"], { scale: wallet_item["private_key"].length < 60 ? 6.5 : 3.5 }); address_number++; if (address_number % 2 == 0) { jQuery("#wallet").append("
"); } } var user_entropy = ""; function update_user_entropy() { let valeur = (user_entropy.length / 2) / 32 * 100; // hex is 2 chars per byte if (valeur > 100) { valeur = 100; if (jQuery("#generate_button").hasClass("btn-warning")) { jQuery("#generate_button").removeClass("btn-warning"); jQuery("#generate_button").addClass("btn-success"); } if (!jQuery("#entropy_bar").hasClass("progress-bar-success")) { jQuery("#entropy_bar").addClass("progress-bar-success"); } } jQuery('#entropy_bar').css('width', valeur+'%').attr('aria-valuenow', valeur); } // Mouse move for entropy collection var mouse_count = 0; jQuery("body").mousemove(function(e) { if (mouse_count++ % 5 > 0) return; user_entropy += ((e.originalEvent.clientX + e.originalEvent.clientY) % 16).toString(16); update_user_entropy(); }); jQuery("#keyboard_entropy").keypress(function (e) { user_entropy += (e.originalEvent.charCode % 32).toString(16); update_user_entropy(); }); jQuery("#generate_button").click(function (e) { jQuery("#configdialog").modal('hide'); }); jQuery("#reset_button").click(function (e) { user_entropy = ""; update_user_entropy(); address_number = 0; jQuery("#generate_button").removeClass("btn-success"); jQuery("#generate_button").addClass("btn-warning"); jQuery("#entropy_bar").removeClass("progress-bar-success"); jQuery("#wallet").empty(); jQuery("#configdialog").modal('show'); }); jQuery("#print_button").click(function (e) { window.print(); }); // First trigger the modal jQuery("#configdialog").modal({ keyboard: false }); const toHexString = bytes => bytes.reduce((str, byte) => str + byte.toString(16).padStart(2, '0'), ''); jQuery("#configdialog").on("hidden.bs.modal", function (e) { // Get system entropy var buf = new Uint8Array(32); window.crypto.getRandomValues(buf); let system_entropy = toHexString(buf); let numzAddresses = jQuery("#numzAddresses").val(); let numtAddresses = jQuery("#numtAddresses").val(); jQuery("#pleasewait").modal('show'); // Run this async so that the please wait dialog can show setTimeout(() => { let w = JSON.parse(wasm.get_wallet(numzAddresses, numtAddresses, user_entropy + system_entropy)); w.forEach(wallet_item => { add_section(wallet_item); }); jQuery("#pleasewait").modal("hide"); }, 1); });