114 lines
No EOL
4.3 KiB
JavaScript
114 lines
No EOL
4.3 KiB
JavaScript
(function (wallets, translator, privateKey) {
|
|
var bulk = wallets.bulkwallet = {
|
|
isOpen: function () {
|
|
return (document.getElementById("bulkwallet").className.indexOf("selected") != -1);
|
|
},
|
|
|
|
open: function () {
|
|
document.getElementById("bulkarea").style.display = "block";
|
|
// show a default CSV list if the text area is empty
|
|
if (document.getElementById("bulktextarea").value == "") {
|
|
// return control of the thread to the browser to render the tab switch UI then build a default CSV list
|
|
setTimeout(function () { bulk.buildCSV(3, 1, document.getElementById("bulkcompressed").checked); }, 200);
|
|
}
|
|
|
|
document.getElementById("bulkpassphrase").disabled = !document.getElementById("bulkencrypt").checked;
|
|
},
|
|
|
|
close: function () {
|
|
document.getElementById("bulkarea").style.display = "none";
|
|
},
|
|
|
|
// use this function to bulk generate addresses
|
|
// rowLimit: number of Bitcoin Addresses to generate
|
|
// startIndex: add this number to the row index for output purposes
|
|
// returns:
|
|
// index,bitcoinAddress,privateKeyWif
|
|
buildCSV: function (rowLimit, startIndex, compressedAddrs, passphrase) {
|
|
document.getElementById("bulktextarea").value = translator.get("bulkgeneratingaddresses") + rowLimit;
|
|
bulk.csv = [];
|
|
bulk.csvRowLimit = rowLimit;
|
|
bulk.csvRowsRemaining = rowLimit;
|
|
bulk.csvStartIndex = --startIndex;
|
|
bulk.compressedAddrs = !!compressedAddrs;
|
|
if (bulk.encrypt) {
|
|
if (passphrase == "") {
|
|
alert(translator.get("bip38alertpassphraserequired"));
|
|
return;
|
|
}
|
|
document.getElementById("busyblock").className = "busy";
|
|
privateKey.BIP38GenerateIntermediatePointAsync(passphrase, null, null, function (intermediate) {
|
|
bulk.intermediatePoint = intermediate;
|
|
document.getElementById("busyblock").className = "";
|
|
setTimeout(bulk.batchCSV, 0);
|
|
});
|
|
}
|
|
else {
|
|
setTimeout(bulk.batchCSV, 0);
|
|
}
|
|
},
|
|
|
|
csv: [],
|
|
csvRowsRemaining: null, // use to keep track of how many rows are left to process when building a large CSV array
|
|
csvRowLimit: 0,
|
|
csvStartIndex: 0,
|
|
|
|
batchCSV: function () {
|
|
if (bulk.csvRowsRemaining > 0) {
|
|
bulk.csvRowsRemaining--;
|
|
|
|
if (bulk.encrypt) {
|
|
privateKey.BIP38GenerateECAddressAsync(bulk.intermediatePoint, bulk.compressedAddrs, function (address, encryptedKey) {
|
|
Bitcoin.KeyPool.push(new Bitcoin.Bip38Key(address, encryptedKey));
|
|
|
|
bulk.csv.push((bulk.csvRowLimit - bulk.csvRowsRemaining + bulk.csvStartIndex)
|
|
+ ",\"" + address + "\",\"" + encryptedKey
|
|
+ "\"");
|
|
document.getElementById("bulktextarea").value = translator.get("bulkgeneratingaddresses") + bulk.csvRowsRemaining;
|
|
|
|
// release thread to browser to render UI
|
|
setTimeout(bulk.batchCSV, 0);
|
|
|
|
});
|
|
}
|
|
else {
|
|
var key = new Bitcoin.ECKey(false);
|
|
key.setCompressed(bulk.compressedAddrs);
|
|
bulk.csv.push((bulk.csvRowLimit - bulk.csvRowsRemaining + bulk.csvStartIndex)
|
|
+ ",\"" + key.getBitcoinAddress() + "\",\"" + key.toString("wif")
|
|
//+ "\",\"" + key.toString("wifcomp") // uncomment these lines to add different private key formats to the CSV
|
|
//+ "\",\"" + key.getBitcoinHexFormat()
|
|
//+ "\",\"" + key.toString("base64")
|
|
+ "\"");
|
|
document.getElementById("bulktextarea").value = translator.get("bulkgeneratingaddresses") + bulk.csvRowsRemaining;
|
|
|
|
// release thread to browser to render UI
|
|
setTimeout(bulk.batchCSV, 0);
|
|
}
|
|
}
|
|
// processing is finished so put CSV in text area
|
|
else if (bulk.csvRowsRemaining === 0) {
|
|
document.getElementById("bulktextarea").value = bulk.csv.join("\n");
|
|
}
|
|
},
|
|
|
|
openCloseFaq: function (faqNum) {
|
|
// do close
|
|
if (document.getElementById("bulka" + faqNum).style.display == "block") {
|
|
document.getElementById("bulka" + faqNum).style.display = "none";
|
|
document.getElementById("bulke" + faqNum).setAttribute("class", "more");
|
|
}
|
|
// do open
|
|
else {
|
|
document.getElementById("bulka" + faqNum).style.display = "block";
|
|
document.getElementById("bulke" + faqNum).setAttribute("class", "less");
|
|
}
|
|
},
|
|
|
|
toggleEncrypt: function (element) {
|
|
// enable/disable passphrase textbox
|
|
document.getElementById("bulkpassphrase").disabled = !element.checked;
|
|
bulk.encrypt = element.checked;
|
|
}
|
|
};
|
|
})(ninja.wallets, ninja.translator, ninja.privateKey); |