From 1b6945f74d8819621b6cc5107674ce860352a633 Mon Sep 17 00:00:00 2001 From: wltsmrz Date: Thu, 19 Dec 2013 17:45:20 -0800 Subject: [PATCH] Prevent NoOp transaction recycling --- src/js/ripple/transactionmanager.js | 129 ++++++++++++++++++---------- 1 file changed, 86 insertions(+), 43 deletions(-) diff --git a/src/js/ripple/transactionmanager.js b/src/js/ripple/transactionmanager.js index 81b544f5..347993dc 100644 --- a/src/js/ripple/transactionmanager.js +++ b/src/js/ripple/transactionmanager.js @@ -1,5 +1,6 @@ var util = require('util'); var EventEmitter = require('events').EventEmitter; +var Transaction = require('./transaction').Transaction; var RippleError = require('./rippleerror').RippleError; var PendingQueue = require('./transactionqueue').TransactionQueue; @@ -75,6 +76,7 @@ function TransactionManager(account) { pending.emit('error', new RippleError('tejLost', 'Transaction lost')); self._remote._trace('transactionmanager: update_pending: %s', pending.tx_json); break; + case 4: pending.set_state('client_missing'); pending.emit('missing', ledger); @@ -103,7 +105,7 @@ function TransactionManager(account) { //Load next transaction sequence self._loadSequence(function sequenceLoaded() { - self._resubmit(3); + self._resubmit(); }); }); @@ -151,10 +153,35 @@ TransactionManager.normalizeTransaction = function(tx) { //Fill an account transaction sequence TransactionManager.prototype._fillSequence = function(tx, callback) { - var fill = this._remote.transaction(); - fill.account_set(this._accountID); - fill.tx_json.Sequence = tx.tx_json.Sequence - 1; - fill.submit(callback); + var self = this; + + function submitFill(sequence, callback) { + var fill = self._remote.transaction(); + fill.account_set(self._accountID); + fill.tx_json.Sequence = sequence; + fill.once('submitted', callback); + fill.submit(); + }; + + function sequenceLoaded(err, sequence) { + if (typeof sequence !== 'number') { + callback(new Error('Failed to fetch account transaction sequence')); + return; + } + + var sequenceDif = tx.tx_json.Sequence - sequence; + var submitted = 0; + + for (var i=sequence; i