Ejemplo n.º 1
0
TransactionProcessor.prototype.RemoveUnconfirmedTransactionsThread = function() {
	var curTime = Convert.GetEpochTime();
	var removedUnconfirmedTransactions = [];

	for (var i in this.unconfirmedTransactions) {
		var transaction = unconfirmedTransactions[i];
		if (transaction.GetExpiration() < curTime) {
			this.unconfirmedTransactions.splice(unconfirmedTransactions.indexOf(transaction), 1); // remove
			transaction.UndoUnconfirmed();
			removedUnconfirmedTransactions.push(transaction);
		}
	}
	if (removedUnconfirmedTransactions.length > 0) {
		this.Notify(Event.RemovedUnconfirmedTransactions, removedUnconfirmedTransactions);
	}

	/*
		} catch (Exception e) {
			Logger.logDebugMessage("Error removing unconfirmed transactions", e);
		}
	} catch (Throwable t) {
		Logger.logMessage("CRITICAL ERROR. PLEASE REPORT TO THE DEVELOPERS.\n" + t.toString());
		t.printStackTrace();
		System.exit(1);
	}
	*/
}
Ejemplo n.º 2
0
TransactionProcessor.prototype.ProcessTransactions = function(transactions, sendToPeers) {
	var sendToPeersTransactions = [];
	var addedUnconfirmedTransactions = [];
	var addedDoubleSpendingTransactions = [];

	for (var transaction in transactions) {
		//try {
			var curTime = Convert.GetEpochTime();
			if (transaction.GetTimestamp() > curTime + 15 || transaction.GetExpiration() < curTime || transaction.GetDeadline() > 1440) {
				continue;
			}



			var id = transaction.GetId();
			if (Transactions.HasTransaction(id) || this.unconfirmedTransactions.ContainsKey(id) || ! transaction.Verify()) {
				continue;
			}

		/*
		//synchronized (BlockchainImpl.getInstance()) {
			if (Blockchain.GetHeight() < Constants.NQT_BLOCK) {
				break; // not ready to process transactions
			}
			var id = transaction.getId();
			if (TransactionDb.HasTransaction(id) || unconfirmedTransactions.containsKey(id)) {
				continue;
			}
			if (! transaction.verifySignature()) {
				if (Account.getAccount(transaction.getSenderId()) != null) {
					Logger.logDebugMessage("Transaction " + transaction.getJSONObject().toJSONString() + " failed to verify");
				}
				continue;
			}
			if (transaction.applyUnconfirmed()) {
				if (sendToPeers) {
					if (nonBroadcastedTransactions.containsKey(id)) {
						Logger.logDebugMessage("Received back transaction " + transaction.getStringId()
								+ " that we generated, will not forward to peers");
						nonBroadcastedTransactions.remove(id);
					} else {
						sendToPeersTransactions.add(transaction);
					}
				}
				unconfirmedTransactions.put(id, transaction);
				addedUnconfirmedTransactions.add(transaction);
			} else {
				addedDoubleSpendingTransactions.add(transaction);
			}
		//}
		*/
	}

	if (sendToPeersTransactions.length > 0) {
		Peers.SendToSomePeers(sendToPeersTransactions);
	}

	if (this.addedUnconfirmedTransactions.length > 0) {
		this.Notify(this.Event.AddedUnconfirmedTransactions, addedUnconfirmedTransactions);
	}
	if (addedDoubleSpendingTransactions.length > 0) {
		this.Notify(this.Event.AddedDoubleSpendingTransactions, addedDoubleSpendingTransactions);
	}
	return addedUnconfirmedTransactions;
}