From 9b22f279bcbe60ee6bcf4b7fa60a48e9c197a828 Mon Sep 17 00:00:00 2001 From: Bo Chen Date: Tue, 9 Dec 2014 14:11:19 -0800 Subject: [PATCH] [FEATURE] allow per transaction fees to be set --- src/js/ripple/transaction.js | 19 ++++++++++++++++++- src/js/ripple/transactionmanager.js | 6 +++++- test/transaction-test.js | 17 +++++++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/js/ripple/transaction.js b/src/js/ripple/transaction.js index da834e847d..e2d16c9e4a 100644 --- a/src/js/ripple/transaction.js +++ b/src/js/ripple/transaction.js @@ -612,7 +612,7 @@ Transaction.prototype.lastLedger = function(sequence) { /** * Set max fee. Submission will abort if this is exceeded. Specified fee must - * be >= 0 + * be >= 0. * * @param {Number} fee The proposed fee */ @@ -625,6 +625,23 @@ Transaction.prototype.maxFee = function(fee) { return this; }; +/* + * Set the fee user will pay to the network for submitting this transaction. + * Specified fee must be >= 0. + * + * @param {Number} fee The proposed fee + * + * @returns {Transaction} calling instance for chaining + */ +Transaction.prototype.setFixedFee = function(fee) { + if (typeof fee === 'number' && fee >= 0) { + this._setFixedFee = true; + this.tx_json.Fee = String(fee); + } + + return this; +}; + /** * Filter invalid properties from path objects in a path array * diff --git a/src/js/ripple/transactionmanager.js b/src/js/ripple/transactionmanager.js index 3bd04138e8..df5bc54989 100644 --- a/src/js/ripple/transactionmanager.js +++ b/src/js/ripple/transactionmanager.js @@ -200,6 +200,10 @@ TransactionManager.prototype._adjustFees = function() { }; this._pending.forEach(function(transaction) { + if (transaction._setFixedFee === true) { + return; + } + var oldFee = transaction.tx_json.Fee; var newFee = transaction._computeFee(); @@ -239,7 +243,7 @@ TransactionManager.prototype._updatePendingStatus = function(ledger) { assert.strictEqual(typeof ledger, 'object'); assert.strictEqual(typeof ledger.ledger_index, 'number'); - this._pending.forEach(function(transaction) { + this._pending.forEach(function(transaction) { switch (ledger.ledger_index - transaction.submitIndex) { case 4: transaction.emit('missing', ledger); diff --git a/test/transaction-test.js b/test/transaction-test.js index 8c418eb7b0..d1c3ef1a40 100644 --- a/test/transaction-test.js +++ b/test/transaction-test.js @@ -828,6 +828,23 @@ describe('Transaction', function() { assert.strictEqual(transaction._setMaxFee, true); }); + it('Set Fixed Fee', function() { + var transaction = new Transaction(); + + transaction.setFixedFee('a'); + assert(!transaction._setFixedFee); + + transaction.setFixedFee(-1000); + assert(!transaction._setFixedFee); + + transaction.setFixedFee(NaN); + assert(!transaction._setFixedFee); + + transaction.setFixedFee(1000); + assert.strictEqual(transaction._setFixedFee, true); + assert.strictEqual(transaction.tx_json.Fee, '1000'); + }); + it('Rewrite transaction path', function() { var transaction = new Transaction();