bitaddress.org/src/ninja.bulkwallet.js
2016-01-15 21:02:22 -04:00

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);