// only flag transactions that don't have the key identifier and are from a wallet funding lineage, or transactions that are not from a funding lineage and have the key identifier
@@ -136,7 +136,7 @@ export default class Transaction {
this.database.get('SELECT SUM(amount) as amount FROM transaction_output '+
'INNER JOIN `transaction` ON `transaction`.transaction_id = transaction_output.transaction_id '+
'WHERE transaction_output.address_key_identifier=? AND `transaction`.is_stable = '+(stable?1:0)+
' AND is_spent = 0 AND is_double_spend = 0',[keyIdentifier],
' AND is_spent = 0 AND is_double_spend = 0 AND `transaction`.status != 3',[keyIdentifier],
(err,row)=>{
resolve(row?row.amount||0:0);
});
...
...
@@ -146,7 +146,7 @@ export default class Transaction {
getAddressBalance(address,stable){
returnnewPromise((resolve)=>{
this.database.get('SELECT SUM(amount) as amount FROM transaction_output INNER JOIN `transaction` ON `transaction`.transaction_id = transaction_output.transaction_id '+
'WHERE address=? AND `transaction`.is_stable = '+(stable?1:0)+' AND is_spent = 0 AND is_double_spend = 0',[address],
'WHERE address=? AND `transaction`.is_stable = '+(stable?1:0)+' AND is_spent = 0 AND is_double_spend = 0 AND `transaction`.status != 3',[address],
(err,row)=>{
resolve(row?row.amount||0:0);
});
...
...
@@ -157,7 +157,7 @@ export default class Transaction {
returnnewPromise((resolve,reject)=>{
this.database.all('SELECT DISTINCT `transaction`.* FROM `transaction` '+
'INNER JOIN transaction_output ON transaction_output.transaction_id = `transaction`.transaction_id '+
'WHERE transaction_output.address_key_identifier = ? '+(excludeTransactionIDList&&excludeTransactionIDList.length>0?'AND `transaction`.transaction_id NOT IN ('+excludeTransactionIDList.map(()=>'?').join(',')+')':'')+'AND +`transaction`.is_stable = 0 AND transaction_output.is_spent=0 AND transaction_output.is_double_spend=0 ORDER BY transaction_date DESC LIMIT 100',
'WHERE transaction_output.address_key_identifier = ? '+(excludeTransactionIDList&&excludeTransactionIDList.length>0?'AND `transaction`.transaction_id NOT IN ('+excludeTransactionIDList.map(()=>'?').join(',')+')':'')+'AND +`transaction`.is_stable = 0 AND transaction_output.is_spent=0 AND transaction_output.is_double_spend=0 AND `transaction`.status != 3 ORDER BY transaction_date DESC LIMIT 100',
[
addressKeyIdentifier
].concat(excludeTransactionIDList),
...
...
@@ -193,6 +193,25 @@ export default class Transaction {
const{sql,parameters}=Database.buildQuery('SELECT DISTINCT `transaction`.* FROM `transaction` \
INNER JOIN transaction_output on `transaction`.transaction_id = transaction_output.transaction_id',{
address_key_identifier:addressKeyIdentifier
});
this.database.all(sql,parameters,
(err,rows)=>{
if(err){
console.log(err);
returnreject(err);
}
resolve(rows);
}
);
});
}
getProxyCandidates(n,excludeNodeID){
returnnewPromise((resolve,reject)=>{
this.database.all(
...
...
@@ -248,11 +267,11 @@ export default class Transaction {
'SELECT `transaction`.*, transaction_input.address as input_address, transaction_output.address as output_address, transaction_output.amount, transaction_output.address_key_identifier, transaction_output.output_position FROM `transaction` \
LEFT JOIN transaction_output on transaction_output.transaction_id = `transaction`.transaction_id \
LEFT JOIN transaction_input on transaction_input.transaction_id = `transaction`.transaction_id \
WHERE transaction_output.address_key_identifier = ? \
WHERE transaction_output.address_key_identifier = ? AND `transaction`.status != 3 \
UNION SELECT `transaction`.*, transaction_input.address as input_address, transaction_output.address as output_address, transaction_output.amount, transaction_output.address_key_identifier, transaction_output.output_position FROM `transaction` \
LEFT JOIN transaction_input on transaction_input.transaction_id = `transaction`.transaction_id \
LEFT JOIN transaction_output on transaction_output.transaction_id = `transaction`.transaction_id \
WHERE transaction_input.address_key_identifier = ? \
WHERE transaction_input.address_key_identifier = ? AND `transaction`.status != 3 \
ORDER BY `transaction`.transaction_date DESC',
[
keyIdentifier,
...
...
@@ -983,9 +1002,13 @@ export default class Transaction {
this.database.all('SELECT DISTINCT `transaction`.* FROM `transaction` INNER JOIN transaction_output ON `transaction`.transaction_id = transaction_output.transaction_id WHERE `transaction`.transaction_date > ? AND `transaction`.create_date < ? AND +`transaction`.is_stable = 0 '+(excludeTransactionIDList&&excludeTransactionIDList.length>0?'AND `transaction`.transaction_id NOT IN ('+excludeTransactionIDList.map(()=>'?').join(',')+')':'')+'ORDER BY transaction_date ASC LIMIT 1',
this.database.all('SELECT DISTINCT `transaction`.* FROM `transaction` INNER JOIN transaction_output ON `transaction`.transaction_id = transaction_output.transaction_id WHERE `transaction`.transaction_date > ? AND `transaction`.create_date < ? AND +`transaction`.is_stable = 0 '+(excludeTransactionIDList&&excludeTransactionIDList.length>0?'AND `transaction`.transaction_id NOT IN ('+excludeTransactionIDList.map(()=>'?').join(',')+')':'')+' AND `transaction`.status != 3 ORDER BY transaction_date ASC LIMIT 1',
[
unstableDateStart,
insertDate
...
...
@@ -1394,31 +1417,37 @@ export default class Transaction {
processedDoubleSpendInputs.add(transactionInputID);// fix inputs used in the double spend transactions. reset state of inputs used just once to unspent.
this.database.get('SELECT `transaction`.transaction_date FROM transaction_input INNER JOIN `transaction` on transaction_input.transaction_id = `transaction`.transaction_id '+
'WHERE output_transaction_id = ? and output_position = ?',[
'WHERE output_transaction_id = ? AND output_position = ? '+
'AND NOT EXISTS(SELECT transaction_output.transaction_id FROM transaction_output WHERE transaction_output.transaction_id = `transaction`.transaction_id AND transaction_output.is_double_spend = 1)',[