|
|
|
@ -46,15 +46,31 @@ function scanPrivateKeyQrCode(callback) {
|
|
|
|
|
* @returns {string} Hex of serialized transaction, suitable for broadcast via Bitcoin Core or an API.
|
|
|
|
|
*/
|
|
|
|
|
function createSignedTransaction(bitcoreLib, privateKeyString, sourceAddress, destinationAddress, utxos, outputSatoshis) {
|
|
|
|
|
var privateKey = new bitcoreLib.PrivateKey(privateKeyString);
|
|
|
|
|
try {
|
|
|
|
|
var privateKey = new bitcoreLib.PrivateKey(privateKeyString);
|
|
|
|
|
|
|
|
|
|
var transaction = new bitcoreLib.Transaction()
|
|
|
|
|
.from(utxos)
|
|
|
|
|
.to(destinationAddress, outputSatoshis)
|
|
|
|
|
.change(sourceAddress)
|
|
|
|
|
.sign(privateKey);
|
|
|
|
|
var transaction = new bitcoreLib.Transaction()
|
|
|
|
|
.from(utxos)
|
|
|
|
|
.to(destinationAddress, outputSatoshis)
|
|
|
|
|
.change(sourceAddress)
|
|
|
|
|
.sign(privateKey);
|
|
|
|
|
|
|
|
|
|
return transaction.serialize();
|
|
|
|
|
var inputTotal = transaction._getInputAmount();
|
|
|
|
|
|
|
|
|
|
var outputTotal = transaction.getFee() + outputSatoshis;
|
|
|
|
|
} catch (ex) {
|
|
|
|
|
throw new Error("There was an internal error while creating the transaction. Details: " + ex.message);
|
|
|
|
|
}
|
|
|
|
|
console.log(inputTotal, outputTotal);
|
|
|
|
|
if (outputTotal > inputTotal) {
|
|
|
|
|
throw new Error("You have insufficient funds to cover the payment and transaction fees.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
return transaction.serialize();
|
|
|
|
|
} catch (ex) {
|
|
|
|
|
throw new Error("Couldn't create the transaction. It's likely you typed something wrong. Check that you have enough funds.");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -130,7 +146,7 @@ function sendCoins(privatekey, fromaddress, toaddress, amount) {
|
|
|
|
|
utxos.push(createUtxo(fromaddress, success.utxos[i].txHash, success.utxos[i].txOutputIndex, success.utxos[i].script, success.utxos[i].value));
|
|
|
|
|
}
|
|
|
|
|
var bitcore = null;
|
|
|
|
|
var satoshis = amount * 100000000;
|
|
|
|
|
var satoshis = parseInt((amount * 100000000).toFixed(0)); // Make sure it's an int and not something like 10.0000000001 or 9.532999999999
|
|
|
|
|
switch (success.currency) {
|
|
|
|
|
case "DOGE":
|
|
|
|
|
bitcore = require("bitcore-lib-doge");
|
|
|
|
@ -143,7 +159,15 @@ function sendCoins(privatekey, fromaddress, toaddress, amount) {
|
|
|
|
|
app.dialog.alert("This app version doesn't support " + success.currency + ".", "Error");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
var txdata = createSignedTransaction(bitcore, privatekey, fromaddress, toaddress, utxos, satoshis);
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
var txdata = createSignedTransaction(bitcore, privatekey, fromaddress, toaddress, utxos, satoshis);
|
|
|
|
|
} catch (ex) {
|
|
|
|
|
console.error(ex);
|
|
|
|
|
app.dialog.close();
|
|
|
|
|
app.dialog.alert(ex.message, "Error");
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
progressdialog.setProgress(75);
|
|
|
|
|
progressdialog.setText("Sending payment...");
|
|
|
|
@ -286,7 +310,7 @@ $("#app").on("input change paste keyup", "#transactionAmountFiat", function () {
|
|
|
|
|
var fiatamount = parseFloat($("#transactionAmountFiat").val());
|
|
|
|
|
var exchangerate = parseFloat($("#transactionAmountFiat").data("exchange-rate"));
|
|
|
|
|
$("#transactionAmount").val((fiatamount / exchangerate).toFixed(8));
|
|
|
|
|
$("#transactionAmountFiat").val(fiatamount.toFixed(2));
|
|
|
|
|
//$("#transactionAmountFiat").val(fiatamount.toFixed(2));
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$("#app").on("paste blur", "#walletFromAddress", function () {
|
|
|
|
@ -304,5 +328,5 @@ $("#app").on("input change paste keyup", "#transactionAmount", function () {
|
|
|
|
|
var amount = parseFloat($("#transactionAmount").val());
|
|
|
|
|
var exchangerate = parseFloat($("#transactionAmountFiat").data("exchange-rate"));
|
|
|
|
|
$("#transactionAmountFiat").val((amount * exchangerate).toFixed(2));
|
|
|
|
|
$("#transactionAmount").val(amount.toFixed(8));
|
|
|
|
|
//$("#transactionAmount").val(amount.toFixed(8));
|
|
|
|
|
});
|