You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openmonero/html/js/controllers/transaction_details.js

146 lines
5.1 KiB

/**
* Created by mwo on 02/08/17.
*/
thinwalletCtrls.controller('TransactionDetailsCtrl', function ($scope,
AccountService,
ModalService,
ApiCalls) {
"use strict";
// we assume that we have tx_hash in the modal's url,
// e.g. transaction-details?tx_hash=963773fce9f1e8f285f59cdc3cc69883f43de1c4edaa7b01cc5522b48cad9631
// so we need to extract the hash, validate it, and use to make an ajax query to the backend
// for more detailed info about this tx.
$scope.error = "";
// set data to be shown in the modal window
$scope.ring_size = "";
$scope.fee = "";
$scope.tx_size = "";
$scope.no_confirmations = "";
$scope.tx_height = "";
$scope.tx_pub_key = "";
$scope.coinbase = "";
$scope.timestamp = "";
$scope.tx_age = "";
$scope.payment_id = "";
$scope.tx_amount = "";
$scope.tx_version = "";
$scope.rct_type = "";
$scope.fetching = true;
var tx_hash = ModalService.getModalUrlParams("tx_hash");
//console.log(tx_hash);
if (tx_hash === null) {
$scope.tx_hash = "tx_hash is not provided";
return;
}
var view_only = AccountService.isViewOnly();
$scope.tx_hash = tx_hash;
// check the tx_hash if it has expected format
if (tx_hash.length !== 64 || !(/^[0-9a-fA-F]{64}$/.test(tx_hash)))
{
$scope.error = "Tx hash has incorrect format";
return;
}
var explorerUrl = '';
if (config.nettype == 0)
explorerUrl = config.mainnetExplorerUrl;
else if (config.nettype == 1)
explorerUrl = config.testnetExplorerUrl;
else
explorerUrl = config.stagenetExplorerUrl;
var address = AccountService.getAddress();
var view_key = AccountService.getViewKey();
// tx_hash seems ok, so ask the backed for its details.
ApiCalls.get_tx(address, view_key, tx_hash)
.then(function(response) {
var data = response.data;
if (data.error) {
$scope.error = data.status;
return;
}
// set data to be shown in the modal window
$scope.ring_size = data.mixin_no;
$scope.fee = data.fee;
$scope.tx_size = (data.size / 1024).toFixed(4);
$scope.no_confirmations = data.no_confirmations === -1 ? "tx in mempool" : data.no_confirmations;
$scope.tx_height = data.tx_height === -1 ? "N.A" :data.tx_height;
$scope.tx_pub_key = data.pub_key;
$scope.coinbase = data.coinbase;
$scope.timestamp = new Date(data.timestamp);
$scope.no_outputs = data.num_of_outputs;
$scope.no_inputs = data.num_of_inputs;
$scope.tx_version = data.tx_version;
$scope.rct_type = data.rct_type;
var age_duration = moment.duration(new Date() - new Date(data.timestamp));
$scope.tx_age = age_duration.humanize();
var total_received = data.total_received;
var total_sent = data.total_sent;
// filterout wrongly guessed key images by the frontend
if ((data.spent_outputs || []).length > 0) {
if (view_only === false) {
for (var j = 0; j < data.spent_outputs.length; ++j) {
var key_image = AccountService.cachedKeyImage(
data.spent_outputs[j].tx_pub_key,
data.spent_outputs[j].out_index
);
if (data.spent_outputs[j].key_image !== key_image) {
total_sent = new JSBigInt(total_sent).subtract(data.spent_outputs[j].amount);
data.spent_outputs.splice(j, 1);
j--;
}
}
}
}
$scope.tx_amount = new JSBigInt(total_received || 0).subtract(total_sent || 0).toString();
// decrypt payment_id8 which results in using
// integrated address
if (data.payment_id.length == 16) {
if (data.pub_key) {
var decrypted_payment_id8
= decrypt_payment_id(data.payment_id,
data.pub_key,
AccountService.getViewKey());
//console.log("decrypted_payment_id8: " + decrypted_payment_id8);
data.payment_id = decrypted_payment_id8;
}
}
$scope.payment_id = data.payment_id;
$scope.fetching = false;
//console.log($scope.tx_amount);
}, function(data) {
$scope.error = 'Failed to get tx detailed from the backend';
});
$scope.explorerLink = explorerUrl + "tx/" + tx_hash;
});