This commit is contained in:
wltsmrz
2015-05-20 05:00:08 -07:00
parent 5e714f6143
commit 65f7485497
4 changed files with 1237 additions and 911 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -1,13 +1,13 @@
'use strict'; 'use strict';
var util = require('util'); const util = require('util');
var assert = require('assert'); const assert = require('assert');
var async = require('async'); const async = require('async');
var EventEmitter = require('events').EventEmitter; const EventEmitter = require('events').EventEmitter;
var Transaction = require('./transaction').Transaction; const Transaction = require('./transaction').Transaction;
var RippleError = require('./rippleerror').RippleError; const RippleError = require('./rippleerror').RippleError;
var PendingQueue = require('./transactionqueue').TransactionQueue; const PendingQueue = require('./transactionqueue').TransactionQueue;
var log = require('./log').internal.sub('transactionmanager'); const log = require('./log').internal.sub('transactionmanager');
/** /**
* @constructor TransactionManager * @constructor TransactionManager
@@ -17,7 +17,7 @@ var log = require('./log').internal.sub('transactionmanager');
function TransactionManager(account) { function TransactionManager(account) {
EventEmitter.call(this); EventEmitter.call(this);
var self = this; const self = this;
this._account = account; this._account = account;
this._accountID = account._account_id; this._accountID = account._account_id;
@@ -95,11 +95,11 @@ TransactionManager._isTooBusy = function(error) {
*/ */
TransactionManager.normalizeTransaction = function(tx) { TransactionManager.normalizeTransaction = function(tx) {
var transaction = { }; let transaction = { };
var keys = Object.keys(tx); const keys = Object.keys(tx);
for (var i = 0; i < keys.length; i++) { for (let i = 0; i < keys.length; i++) {
var k = keys[i]; const k = keys[i];
switch (k) { switch (k) {
case 'transaction': case 'transaction':
// Account transaction stream // Account transaction stream
@@ -141,7 +141,7 @@ TransactionManager.normalizeTransaction = function(tx) {
*/ */
TransactionManager.prototype._transactionReceived = function(tx) { TransactionManager.prototype._transactionReceived = function(tx) {
var transaction = TransactionManager.normalizeTransaction(tx); const transaction = TransactionManager.normalizeTransaction(tx);
if (!transaction.validated) { if (!transaction.validated) {
// Transaction has not been validated // Transaction has not been validated
@@ -159,8 +159,8 @@ TransactionManager.prototype._transactionReceived = function(tx) {
this._pending.addReceivedSequence(transaction.tx_json.Sequence); this._pending.addReceivedSequence(transaction.tx_json.Sequence);
var hash = transaction.tx_json.hash; const hash = transaction.tx_json.hash;
var submission = this._pending.getSubmission(hash); const submission = this._pending.getSubmission(hash);
if (!(submission instanceof Transaction)) { if (!(submission instanceof Transaction)) {
// The received transaction does not correlate to one submitted // The received transaction does not correlate to one submitted
@@ -189,7 +189,7 @@ TransactionManager.prototype._transactionReceived = function(tx) {
*/ */
TransactionManager.prototype._adjustFees = function() { TransactionManager.prototype._adjustFees = function() {
var self = this; const self = this;
if (!this._remote.local_fee) { if (!this._remote.local_fee) {
return; return;
@@ -207,8 +207,8 @@ TransactionManager.prototype._adjustFees = function() {
return; return;
} }
var oldFee = transaction.tx_json.Fee; const oldFee = transaction.tx_json.Fee;
var newFee = transaction._computeFee(); const newFee = transaction._computeFee();
if (Number(newFee) > self._maxFee) { if (Number(newFee) > self._maxFee) {
// Max transaction fee exceeded, abort submission // Max transaction fee exceeded, abort submission
@@ -271,10 +271,10 @@ TransactionManager.prototype._updatePendingStatus = function(ledger) {
// Fill an account transaction sequence // Fill an account transaction sequence
TransactionManager.prototype._fillSequence = function(tx, callback) { TransactionManager.prototype._fillSequence = function(tx, callback) {
var self = this; const self = this;
function submitFill(sequence, fCallback) { function submitFill(sequence, fCallback) {
var fillTransaction = self._remote.createTransaction('AccountSet', { let fillTransaction = self._remote.createTransaction('AccountSet', {
account: self._accountID account: self._accountID
}); });
fillTransaction.tx_json.Sequence = sequence; fillTransaction.tx_json.Sequence = sequence;
@@ -294,8 +294,8 @@ TransactionManager.prototype._fillSequence = function(tx, callback) {
return callback(); return callback();
} }
var sequenceDiff = tx.tx_json.Sequence - sequence; const sequenceDiff = tx.tx_json.Sequence - sequence;
var submitted = 0; let submitted = 0;
async.whilst( async.whilst(
function() { function() {
@@ -328,9 +328,11 @@ TransactionManager.prototype._fillSequence = function(tx, callback) {
* @api private * @api private
*/ */
TransactionManager.prototype._loadSequence = function(callback) { TransactionManager.prototype._loadSequence = function(callback_) {
var self = this; const self = this;
callback = (typeof callback === 'function') ? callback : function() {}; const callback = (typeof callback_ === 'function')
? callback_
: function() {};
function sequenceLoaded(err, sequence) { function sequenceLoaded(err, sequence) {
if (err || typeof sequence !== 'number') { if (err || typeof sequence !== 'number') {
@@ -356,9 +358,11 @@ TransactionManager.prototype._loadSequence = function(callback) {
* @api private * @api private
*/ */
TransactionManager.prototype._handleReconnect = function(callback) { TransactionManager.prototype._handleReconnect = function(callback_) {
var self = this; const self = this;
callback = (typeof callback === 'function') ? callback : function() {}; const callback = (typeof callback_ === 'function')
? callback_
: function() {};
if (!this._pending.length()) { if (!this._pending.length()) {
callback(); callback();
@@ -387,7 +391,7 @@ TransactionManager.prototype._handleReconnect = function(callback) {
}); });
} }
var options = { const options = {
account: this._accountID, account: this._accountID,
ledger_index_min: this._pending.getMinLedger(), ledger_index_min: this._pending.getMinLedger(),
ledger_index_max: -1, ledger_index_max: -1,
@@ -415,8 +419,8 @@ TransactionManager.prototype._waitLedgers = function(ledgers, callback) {
return callback(); return callback();
} }
var self = this; const self = this;
var closes = 0; let closes = 0;
function ledgerClosed() { function ledgerClosed() {
if (++closes === ledgers) { if (++closes === ledgers) {
@@ -437,10 +441,13 @@ TransactionManager.prototype._waitLedgers = function(ledgers, callback) {
* @api private * @api private
*/ */
TransactionManager.prototype._resubmit = function(ledgers, pending) { TransactionManager.prototype._resubmit = function(ledgers_, pending_) {
var self = this; const self = this;
if (ledgers && typeof ledgers !== 'number') { let ledgers = ledgers_;
let pending = pending_;
if (arguments.length === 1) {
pending = ledgers; pending = ledgers;
ledgers = 0; ledgers = 0;
} }
@@ -457,7 +464,7 @@ TransactionManager.prototype._resubmit = function(ledgers, pending) {
} }
// Find ID within cache of received (validated) transaction IDs // Find ID within cache of received (validated) transaction IDs
var received = transaction.findId(self._pending._idCache); const received = transaction.findId(self._pending._idCache);
if (received) { if (received) {
switch (received.engine_result) { switch (received.engine_result) {
@@ -504,15 +511,15 @@ TransactionManager.prototype._resubmit = function(ledgers, pending) {
*/ */
TransactionManager.prototype._prepareRequest = function(tx) { TransactionManager.prototype._prepareRequest = function(tx) {
var submitRequest = this._remote.requestSubmit(); const submitRequest = this._remote.requestSubmit();
if (this._remote.local_signing) { if (this._remote.local_signing) {
tx.sign(); tx.sign();
var serialized = tx.serialize(); const serialized = tx.serialize();
submitRequest.tx_blob(serialized.to_hex()); submitRequest.tx_blob(serialized.to_hex());
var hash = tx.hash(null, null, serialized); const hash = tx.hash(null, null, serialized);
tx.addId(hash); tx.addId(hash);
} else { } else {
// ND: `build_path` is completely ignored when doing local signing as // ND: `build_path` is completely ignored when doing local signing as
@@ -536,8 +543,8 @@ TransactionManager.prototype._prepareRequest = function(tx) {
*/ */
TransactionManager.prototype._request = function(tx) { TransactionManager.prototype._request = function(tx) {
var self = this; const self = this;
var remote = this._remote; const remote = this._remote;
if (tx.finalized) { if (tx.finalized) {
return; return;
@@ -549,7 +556,7 @@ TransactionManager.prototype._request = function(tx) {
} }
if (tx.attempts > 0 && !remote.local_signing) { if (tx.attempts > 0 && !remote.local_signing) {
var errMessage = 'Automatic resubmission requires local signing'; const errMessage = 'Automatic resubmission requires local signing';
tx.emit('error', new RippleError('tejLocalSigningRequired', errMessage)); tx.emit('error', new RippleError('tejLocalSigningRequired', errMessage));
return; return;
} }
@@ -671,7 +678,7 @@ TransactionManager.prototype._request = function(tx) {
tx.sign(); tx.sign();
} }
var submitRequest = this._prepareRequest(tx); const submitRequest = this._prepareRequest(tx);
submitRequest.once('error', submitted); submitRequest.once('error', submitted);
submitRequest.once('success', submitted); submitRequest.once('success', submitted);
@@ -692,7 +699,7 @@ TransactionManager.prototype._request = function(tx) {
*/ */
TransactionManager.prototype.submit = function(tx) { TransactionManager.prototype.submit = function(tx) {
var self = this; const self = this;
if (typeof this._nextSequence !== 'number') { if (typeof this._nextSequence !== 'number') {
// If sequence number is not yet known, defer until it is. // If sequence number is not yet known, defer until it is.

View File

@@ -1,51 +1,50 @@
/* eslint-disable max-len */ /* eslint-disable max-len */
/* eslint-disable comma-spacing */
'use strict'; 'use strict';
var ws = require('ws'); const ws = require('ws');
var lodash = require('lodash'); const lodash = require('lodash');
var assert = require('assert-diff'); const assert = require('assert-diff');
var sjcl = require('ripple-lib').sjcl; const sjcl = require('ripple-lib').sjcl;
var Remote = require('ripple-lib').Remote; const Remote = require('ripple-lib').Remote;
var SerializedObject = require('ripple-lib').SerializedObject; const SerializedObject = require('ripple-lib').SerializedObject;
var Transaction = require('ripple-lib').Transaction; const Transaction = require('ripple-lib').Transaction;
var TransactionManager = require('ripple-lib')._test.TransactionManager; const TransactionManager = require('ripple-lib')._test.TransactionManager;
var LEDGER = require('./fixtures/transactionmanager').LEDGER; const LEDGER = require('./fixtures/transactionmanager').LEDGER;
var ACCOUNT = require('./fixtures/transactionmanager').ACCOUNT; const ACCOUNT = require('./fixtures/transactionmanager').ACCOUNT;
var ACCOUNT2 = require('./fixtures/transactionmanager').ACCOUNT2; const ACCOUNT2 = require('./fixtures/transactionmanager').ACCOUNT2;
var SUBSCRIBE_RESPONSE = require('./fixtures/transactionmanager') const SUBSCRIBE_RESPONSE = require('./fixtures/transactionmanager')
.SUBSCRIBE_RESPONSE; .SUBSCRIBE_RESPONSE;
var ACCOUNT_INFO_RESPONSE = require('./fixtures/transactionmanager') const ACCOUNT_INFO_RESPONSE = require('./fixtures/transactionmanager')
.ACCOUNT_INFO_RESPONSE; .ACCOUNT_INFO_RESPONSE;
var TX_STREAM_TRANSACTION = require('./fixtures/transactionmanager') const TX_STREAM_TRANSACTION = require('./fixtures/transactionmanager')
.TX_STREAM_TRANSACTION; .TX_STREAM_TRANSACTION;
var ACCOUNT_TX_TRANSACTION = require('./fixtures/transactionmanager') const ACCOUNT_TX_TRANSACTION = require('./fixtures/transactionmanager')
.ACCOUNT_TX_TRANSACTION; .ACCOUNT_TX_TRANSACTION;
var ACCOUNT_TX_RESPONSE = require('./fixtures/transactionmanager') const ACCOUNT_TX_RESPONSE = require('./fixtures/transactionmanager')
.ACCOUNT_TX_RESPONSE; .ACCOUNT_TX_RESPONSE;
var ACCOUNT_TX_ERROR = require('./fixtures/transactionmanager') const ACCOUNT_TX_ERROR = require('./fixtures/transactionmanager')
.ACCOUNT_TX_ERROR; .ACCOUNT_TX_ERROR;
var SUBMIT_RESPONSE = require('./fixtures/transactionmanager') const SUBMIT_RESPONSE = require('./fixtures/transactionmanager')
.SUBMIT_RESPONSE; .SUBMIT_RESPONSE;
var SUBMIT_TEC_RESPONSE = require('./fixtures/transactionmanager') const SUBMIT_TEC_RESPONSE = require('./fixtures/transactionmanager')
.SUBMIT_TEC_RESPONSE; .SUBMIT_TEC_RESPONSE;
var SUBMIT_TER_RESPONSE = require('./fixtures/transactionmanager') const SUBMIT_TER_RESPONSE = require('./fixtures/transactionmanager')
.SUBMIT_TER_RESPONSE; .SUBMIT_TER_RESPONSE;
var SUBMIT_TEF_RESPONSE = require('./fixtures/transactionmanager') const SUBMIT_TEF_RESPONSE = require('./fixtures/transactionmanager')
.SUBMIT_TEF_RESPONSE; .SUBMIT_TEF_RESPONSE;
var SUBMIT_TEL_RESPONSE = require('./fixtures/transactionmanager') const SUBMIT_TEL_RESPONSE = require('./fixtures/transactionmanager')
.SUBMIT_TEL_RESPONSE; .SUBMIT_TEL_RESPONSE;
var SUBMIT_REMOTE_ERROR = require('./fixtures/transactionmanager') const SUBMIT_REMOTE_ERROR = require('./fixtures/transactionmanager')
.SUBMIT_REMOTE_ERROR; .SUBMIT_REMOTE_ERROR;
describe('TransactionManager', function() { describe('TransactionManager', function() {
var rippled; let rippled;
var rippledConnection; let rippledConnection;
var remote; let remote;
var account; let account;
var transactionManager; let transactionManager;
before(function() { before(function() {
sjcl.random.addEntropy( sjcl.random.addEntropy(
@@ -56,7 +55,7 @@ describe('TransactionManager', function() {
rippled = new ws.Server({port: 5763}); rippled = new ws.Server({port: 5763});
rippled.on('connection', function(c) { rippled.on('connection', function(c) {
var ledger = lodash.extend({}, LEDGER); const ledger = lodash.extend({}, LEDGER);
c.sendJSON = function(v) { c.sendJSON = function(v) {
try { try {
c.send(JSON.stringify(v)); c.send(JSON.stringify(v));
@@ -75,8 +74,8 @@ describe('TransactionManager', function() {
})); }));
}; };
c.on('message', function(m) { c.on('message', function(m) {
m = JSON.parse(m); const parsed = JSON.parse(m);
rippled.emit('request_' + m.command, m, c); rippled.emit('request_' + parsed.command, parsed, c);
}); });
rippledConnection = c; rippledConnection = c;
}); });
@@ -110,8 +109,8 @@ describe('TransactionManager', function() {
}); });
it('Normalize transaction', function() { it('Normalize transaction', function() {
var t1 = TransactionManager.normalizeTransaction(TX_STREAM_TRANSACTION); const t1 = TransactionManager.normalizeTransaction(TX_STREAM_TRANSACTION);
var t2 = TransactionManager.normalizeTransaction(ACCOUNT_TX_TRANSACTION); const t2 = TransactionManager.normalizeTransaction(ACCOUNT_TX_TRANSACTION);
[t1, t2].forEach(function(t) { [t1, t2].forEach(function(t) {
assert(t.hasOwnProperty('metadata')); assert(t.hasOwnProperty('metadata'));
@@ -126,7 +125,7 @@ describe('TransactionManager', function() {
}); });
it('Handle received transaction', function(done) { it('Handle received transaction', function(done) {
var transaction = Transaction.from_json(TX_STREAM_TRANSACTION.transaction); const transaction = Transaction.from_json(TX_STREAM_TRANSACTION.transaction);
transaction.once('success', function() { transaction.once('success', function() {
done(); done();
@@ -137,7 +136,7 @@ describe('TransactionManager', function() {
rippledConnection.sendJSON(TX_STREAM_TRANSACTION); rippledConnection.sendJSON(TX_STREAM_TRANSACTION);
}); });
it('Handle received transaction -- failed', function(done) { it('Handle received transaction -- failed', function(done) {
var transaction = Transaction.from_json(TX_STREAM_TRANSACTION.transaction); const transaction = Transaction.from_json(TX_STREAM_TRANSACTION.transaction);
transaction.once('error', function(err) { transaction.once('error', function(err) {
assert.strictEqual(err.engine_result, 'tecINSUFF_FEE_P'); assert.strictEqual(err.engine_result, 'tecINSUFF_FEE_P');
@@ -160,7 +159,7 @@ describe('TransactionManager', function() {
}); });
}); });
it('Handle received transaction -- Account mismatch', function(done) { it('Handle received transaction -- Account mismatch', function(done) {
var tx = lodash.extend({ }, TX_STREAM_TRANSACTION); const tx = lodash.extend({ }, TX_STREAM_TRANSACTION);
lodash.extend(tx.transaction, { lodash.extend(tx.transaction, {
Account: 'rMP2Y5EZrVZdFKsow11NoKTE5FjXuBQd3d' Account: 'rMP2Y5EZrVZdFKsow11NoKTE5FjXuBQd3d'
}); });
@@ -173,7 +172,7 @@ describe('TransactionManager', function() {
}); });
}); });
it('Handle received transaction -- not validated', function(done) { it('Handle received transaction -- not validated', function(done) {
var tx = lodash.extend({ }, TX_STREAM_TRANSACTION, { const tx = lodash.extend({ }, TX_STREAM_TRANSACTION, {
validated: false validated: false
}); });
rippledConnection.sendJSON(tx); rippledConnection.sendJSON(tx);
@@ -185,7 +184,7 @@ describe('TransactionManager', function() {
}); });
}); });
it('Handle received transaction -- from account_tx', function(done) { it('Handle received transaction -- from account_tx', function(done) {
var transaction = Transaction.from_json(ACCOUNT_TX_TRANSACTION.tx); const transaction = Transaction.from_json(ACCOUNT_TX_TRANSACTION.tx);
transaction.once('success', function() { transaction.once('success', function() {
done(); done();
}); });
@@ -196,7 +195,7 @@ describe('TransactionManager', function() {
}); });
it('Adjust pending transaction fee', function(done) { it('Adjust pending transaction fee', function(done) {
var transaction = new Transaction(remote); const transaction = new Transaction(remote);
transaction.tx_json = ACCOUNT_TX_TRANSACTION.tx; transaction.tx_json = ACCOUNT_TX_TRANSACTION.tx;
transaction.once('fee_adjusted', function(a, b) { transaction.once('fee_adjusted', function(a, b) {
@@ -219,7 +218,7 @@ describe('TransactionManager', function() {
it('Adjust pending transaction fee -- max fee exceeded', function(done) { it('Adjust pending transaction fee -- max fee exceeded', function(done) {
transactionManager._maxFee = 10; transactionManager._maxFee = 10;
var transaction = new Transaction(remote); const transaction = new Transaction(remote);
transaction.tx_json = ACCOUNT_TX_TRANSACTION.tx; transaction.tx_json = ACCOUNT_TX_TRANSACTION.tx;
transaction.once('fee_adjusted', function() { transaction.once('fee_adjusted', function() {
@@ -241,7 +240,7 @@ describe('TransactionManager', function() {
it('Adjust pending transaction fee -- no local fee', function(done) { it('Adjust pending transaction fee -- no local fee', function(done) {
remote.local_fee = false; remote.local_fee = false;
var transaction = new Transaction(remote); const transaction = new Transaction(remote);
transaction.tx_json = ACCOUNT_TX_TRANSACTION.tx; transaction.tx_json = ACCOUNT_TX_TRANSACTION.tx;
transaction.once('fee_adjusted', function() { transaction.once('fee_adjusted', function() {
@@ -263,7 +262,7 @@ describe('TransactionManager', function() {
it('Wait ledgers', function(done) { it('Wait ledgers', function(done) {
transactionManager._waitLedgers(3, done); transactionManager._waitLedgers(3, done);
for (var i = 1; i <= 3; i++) { for (let i = 1; i <= 3; i++) {
rippledConnection.closeLedger(); rippledConnection.closeLedger();
} }
}); });
@@ -273,12 +272,12 @@ describe('TransactionManager', function() {
}); });
it('Update pending status', function(done) { it('Update pending status', function(done) {
var transaction = Transaction.from_json(TX_STREAM_TRANSACTION.transaction); const transaction = Transaction.from_json(TX_STREAM_TRANSACTION.transaction);
transaction.submitIndex = 1; transaction.submitIndex = 1;
transaction.tx_json.LastLedgerSequence = 10; transaction.tx_json.LastLedgerSequence = 10;
var receivedMissing = false; let receivedMissing = false;
var receivedLost = false; let receivedLost = false;
transaction.once('missing', function() { transaction.once('missing', function() {
receivedMissing = true; receivedMissing = true;
@@ -296,20 +295,20 @@ describe('TransactionManager', function() {
transaction.addId(TX_STREAM_TRANSACTION.transaction.hash); transaction.addId(TX_STREAM_TRANSACTION.transaction.hash);
transactionManager.getPending().push(transaction); transactionManager.getPending().push(transaction);
for (var i = 1; i <= 10; i++) { for (let i = 1; i <= 10; i++) {
rippledConnection.closeLedger(); rippledConnection.closeLedger();
} }
}); });
it('Update pending status -- finalized before max ledger exceeded', it('Update pending status -- finalized before max ledger exceeded',
function(done) { function(done) {
var transaction = Transaction.from_json(TX_STREAM_TRANSACTION.transaction); const transaction = Transaction.from_json(TX_STREAM_TRANSACTION.transaction);
transaction.submitIndex = 1; transaction.submitIndex = 1;
transaction.tx_json.LastLedgerSequence = 10; transaction.tx_json.LastLedgerSequence = 10;
transaction.finalized = true; transaction.finalized = true;
var receivedMissing = false; let receivedMissing = false;
var receivedLost = false; let receivedLost = false;
transaction.once('missing', function() { transaction.once('missing', function() {
receivedMissing = true; receivedMissing = true;
@@ -324,7 +323,7 @@ describe('TransactionManager', function() {
transaction.addId(TX_STREAM_TRANSACTION.transaction.hash); transaction.addId(TX_STREAM_TRANSACTION.transaction.hash);
transactionManager.getPending().push(transaction); transactionManager.getPending().push(transaction);
for (var i = 1; i <= 10; i++) { for (let i = 1; i <= 10; i++) {
rippledConnection.closeLedger(); rippledConnection.closeLedger();
} }
@@ -336,15 +335,15 @@ describe('TransactionManager', function() {
}); });
it('Handle reconnect', function(done) { it('Handle reconnect', function(done) {
var transaction = Transaction.from_json(TX_STREAM_TRANSACTION.transaction); const transaction = Transaction.from_json(TX_STREAM_TRANSACTION.transaction);
var binaryTx = lodash.extend({}, ACCOUNT_TX_TRANSACTION, { const binaryTx = lodash.extend({}, ACCOUNT_TX_TRANSACTION, {
ledger_index: ACCOUNT_TX_TRANSACTION.tx.ledger_index, ledger_index: ACCOUNT_TX_TRANSACTION.tx.ledger_index,
tx_blob: SerializedObject.from_json(ACCOUNT_TX_TRANSACTION.tx).to_hex(), tx_blob: SerializedObject.from_json(ACCOUNT_TX_TRANSACTION.tx).to_hex(),
meta: SerializedObject.from_json(ACCOUNT_TX_TRANSACTION.meta).to_hex() meta: SerializedObject.from_json(ACCOUNT_TX_TRANSACTION.meta).to_hex()
}); });
var hash = new SerializedObject(binaryTx.tx_blob).hash(0x54584E00).to_hex(); const hash = new SerializedObject(binaryTx.tx_blob).hash(0x54584E00).to_hex();
transaction.addId(hash); transaction.addId(hash);
@@ -356,7 +355,7 @@ describe('TransactionManager', function() {
transactionManager.getPending().push(transaction); transactionManager.getPending().push(transaction);
rippled.once('request_account_tx', function(m, req) { rippled.once('request_account_tx', function(m, req) {
var response = lodash.extend({}, ACCOUNT_TX_RESPONSE); const response = lodash.extend({}, ACCOUNT_TX_RESPONSE);
response.result.transactions = [binaryTx]; response.result.transactions = [binaryTx];
req.sendResponse(response, {id: m.id}); req.sendResponse(response, {id: m.id});
}); });
@@ -365,9 +364,9 @@ describe('TransactionManager', function() {
}); });
it('Handle reconnect -- no matching transaction found', function(done) { it('Handle reconnect -- no matching transaction found', function(done) {
var transaction = Transaction.from_json(TX_STREAM_TRANSACTION.transaction); const transaction = Transaction.from_json(TX_STREAM_TRANSACTION.transaction);
var binaryTx = lodash.extend({}, ACCOUNT_TX_TRANSACTION, { const binaryTx = lodash.extend({}, ACCOUNT_TX_TRANSACTION, {
ledger_index: ACCOUNT_TX_TRANSACTION.tx.ledger_index, ledger_index: ACCOUNT_TX_TRANSACTION.tx.ledger_index,
tx_blob: SerializedObject.from_json(ACCOUNT_TX_TRANSACTION.tx).to_hex(), tx_blob: SerializedObject.from_json(ACCOUNT_TX_TRANSACTION.tx).to_hex(),
meta: SerializedObject.from_json(ACCOUNT_TX_TRANSACTION.meta).to_hex() meta: SerializedObject.from_json(ACCOUNT_TX_TRANSACTION.meta).to_hex()
@@ -381,7 +380,7 @@ describe('TransactionManager', function() {
transactionManager.getPending().push(transaction); transactionManager.getPending().push(transaction);
rippled.once('request_account_tx', function(m, req) { rippled.once('request_account_tx', function(m, req) {
var response = lodash.extend({}, ACCOUNT_TX_RESPONSE); const response = lodash.extend({}, ACCOUNT_TX_RESPONSE);
response.result.transactions = [binaryTx]; response.result.transactions = [binaryTx];
req.sendResponse(response, {id: m.id}); req.sendResponse(response, {id: m.id});
}); });
@@ -390,7 +389,7 @@ describe('TransactionManager', function() {
}); });
it('Handle reconnect -- account_tx error', function(done) { it('Handle reconnect -- account_tx error', function(done) {
var transaction = Transaction.from_json(TX_STREAM_TRANSACTION.transaction); const transaction = Transaction.from_json(TX_STREAM_TRANSACTION.transaction);
transactionManager.getPending().push(transaction); transactionManager.getPending().push(transaction);
transactionManager._resubmit = function() { transactionManager._resubmit = function() {
@@ -406,12 +405,12 @@ describe('TransactionManager', function() {
}); });
it('Submit transaction', function(done) { it('Submit transaction', function(done) {
var transaction = remote.createTransaction('AccountSet', { const transaction = remote.createTransaction('AccountSet', {
account: ACCOUNT.address account: ACCOUNT.address
}); });
var receivedInitialSuccess = false; let receivedInitialSuccess = false;
var receivedProposed = false; let receivedProposed = false;
transaction.once('proposed', function(m) { transaction.once('proposed', function(m) {
assert.strictEqual(m.engine_result, 'tesSUCCESS'); assert.strictEqual(m.engine_result, 'tesSUCCESS');
receivedProposed = true; receivedProposed = true;
@@ -427,7 +426,7 @@ describe('TransactionManager', function() {
assert.strictEqual(transactionManager.getPending().length(), 1); assert.strictEqual(transactionManager.getPending().length(), 1);
req.sendResponse(SUBMIT_RESPONSE, {id: m.id}); req.sendResponse(SUBMIT_RESPONSE, {id: m.id});
setImmediate(function() { setImmediate(function() {
var txEvent = lodash.extend({}, TX_STREAM_TRANSACTION); let txEvent = lodash.extend({}, TX_STREAM_TRANSACTION);
txEvent.transaction = transaction.tx_json; txEvent.transaction = transaction.tx_json;
txEvent.transaction.hash = transaction.hash(); txEvent.transaction.hash = transaction.hash();
rippledConnection.sendJSON(txEvent); rippledConnection.sendJSON(txEvent);
@@ -445,12 +444,12 @@ describe('TransactionManager', function() {
}); });
it('Submit transaction -- tec error', function(done) { it('Submit transaction -- tec error', function(done) {
var transaction = remote.createTransaction('AccountSet', { const transaction = remote.createTransaction('AccountSet', {
account: ACCOUNT.address, account: ACCOUNT.address,
set_flag: 'asfDisableMaster' set_flag: 'asfDisableMaster'
}); });
var receivedSubmitted = false; let receivedSubmitted = false;
transaction.once('proposed', function() { transaction.once('proposed', function() {
assert(false, 'Should not receive proposed event'); assert(false, 'Should not receive proposed event');
}); });
@@ -465,7 +464,7 @@ describe('TransactionManager', function() {
assert.strictEqual(transactionManager.getPending().length(), 1); assert.strictEqual(transactionManager.getPending().length(), 1);
req.sendResponse(SUBMIT_TEC_RESPONSE, {id: m.id}); req.sendResponse(SUBMIT_TEC_RESPONSE, {id: m.id});
setImmediate(function() { setImmediate(function() {
var txEvent = lodash.extend({}, TX_STREAM_TRANSACTION, const txEvent = lodash.extend({}, TX_STREAM_TRANSACTION,
SUBMIT_TEC_RESPONSE.result); SUBMIT_TEC_RESPONSE.result);
txEvent.transaction = transaction.tx_json; txEvent.transaction = transaction.tx_json;
txEvent.transaction.hash = transaction.hash(); txEvent.transaction.hash = transaction.hash();
@@ -483,7 +482,7 @@ describe('TransactionManager', function() {
}); });
it('Submit transaction -- ter error', function(done) { it('Submit transaction -- ter error', function(done) {
var transaction = remote.createTransaction('Payment', { const transaction = remote.createTransaction('Payment', {
account: ACCOUNT.address, account: ACCOUNT.address,
destination: ACCOUNT2.address, destination: ACCOUNT2.address,
amount: '1' amount: '1'
@@ -491,7 +490,7 @@ describe('TransactionManager', function() {
transaction.tx_json.Sequence = ACCOUNT_INFO_RESPONSE.result transaction.tx_json.Sequence = ACCOUNT_INFO_RESPONSE.result
.account_data.Sequence + 1; .account_data.Sequence + 1;
var receivedSubmitted = false; let receivedSubmitted = false;
transaction.once('proposed', function() { transaction.once('proposed', function() {
assert(false, 'Should not receive proposed event'); assert(false, 'Should not receive proposed event');
}); });
@@ -501,7 +500,7 @@ describe('TransactionManager', function() {
}); });
rippled.on('request_submit', function(m, req) { rippled.on('request_submit', function(m, req) {
var deserialized = new SerializedObject(m.tx_blob).to_json(); const deserialized = new SerializedObject(m.tx_blob).to_json();
switch (deserialized.TransactionType) { switch (deserialized.TransactionType) {
case 'Payment': case 'Payment':
@@ -530,7 +529,7 @@ describe('TransactionManager', function() {
assert.strictEqual(transactionManager.getPending().length(), 0); assert.strictEqual(transactionManager.getPending().length(), 0);
assert.strictEqual(transactionManager.getPending().length(), 0); assert.strictEqual(transactionManager.getPending().length(), 0);
var summary = transaction.summary(); const summary = transaction.summary();
assert.strictEqual(summary.submissionAttempts, 1); assert.strictEqual(summary.submissionAttempts, 1);
assert.strictEqual(summary.submitIndex, 2); assert.strictEqual(summary.submitIndex, 2);
assert.strictEqual(summary.initialSubmitIndex, 2); assert.strictEqual(summary.initialSubmitIndex, 2);
@@ -549,15 +548,15 @@ describe('TransactionManager', function() {
}); });
it('Submit transaction -- tef error', function(done) { it('Submit transaction -- tef error', function(done) {
var transaction = remote.createTransaction('AccountSet', { const transaction = remote.createTransaction('AccountSet', {
account: ACCOUNT.address account: ACCOUNT.address
}); });
transaction.tx_json.Sequence = ACCOUNT_INFO_RESPONSE.result transaction.tx_json.Sequence = ACCOUNT_INFO_RESPONSE.result
.account_data.Sequence - 1; .account_data.Sequence - 1;
var receivedSubmitted = false; let receivedSubmitted = false;
var receivedResubmitted = false; let receivedResubmitted = false;
transaction.once('proposed', function() { transaction.once('proposed', function() {
assert(false, 'Should not receive proposed event'); assert(false, 'Should not receive proposed event');
}); });
@@ -591,7 +590,7 @@ describe('TransactionManager', function() {
assert.strictEqual(err.engine_result, 'tejMaxLedger'); assert.strictEqual(err.engine_result, 'tejMaxLedger');
assert.strictEqual(transactionManager.getPending().length(), 0); assert.strictEqual(transactionManager.getPending().length(), 0);
var summary = transaction.summary(); const summary = transaction.summary();
assert.strictEqual(summary.submissionAttempts, 2); assert.strictEqual(summary.submissionAttempts, 2);
assert.strictEqual(summary.submitIndex, 3); assert.strictEqual(summary.submitIndex, 3);
assert.strictEqual(summary.initialSubmitIndex, 2); assert.strictEqual(summary.initialSubmitIndex, 2);
@@ -610,12 +609,12 @@ describe('TransactionManager', function() {
}); });
it('Submit transaction -- tel error', function(done) { it('Submit transaction -- tel error', function(done) {
var transaction = remote.createTransaction('AccountSet', { const transaction = remote.createTransaction('AccountSet', {
account: ACCOUNT.address account: ACCOUNT.address
}); });
var receivedSubmitted = false; let receivedSubmitted = false;
var receivedResubmitted = false; let receivedResubmitted = false;
transaction.once('proposed', function() { transaction.once('proposed', function() {
assert(false, 'Should not receive proposed event'); assert(false, 'Should not receive proposed event');
}); });
@@ -649,7 +648,7 @@ describe('TransactionManager', function() {
assert.strictEqual(err.engine_result, 'tejMaxLedger'); assert.strictEqual(err.engine_result, 'tejMaxLedger');
assert.strictEqual(transactionManager.getPending().length(), 0); assert.strictEqual(transactionManager.getPending().length(), 0);
var summary = transaction.summary(); const summary = transaction.summary();
assert.strictEqual(summary.submissionAttempts, 2); assert.strictEqual(summary.submissionAttempts, 2);
assert.strictEqual(summary.submitIndex, 3); assert.strictEqual(summary.submitIndex, 3);
assert.strictEqual(summary.initialSubmitIndex, 2); assert.strictEqual(summary.initialSubmitIndex, 2);
@@ -670,7 +669,7 @@ describe('TransactionManager', function() {
it('Submit transaction -- invalid secret', function(done) { it('Submit transaction -- invalid secret', function(done) {
remote.setSecret(ACCOUNT.address, ACCOUNT.secret + 'z'); remote.setSecret(ACCOUNT.address, ACCOUNT.secret + 'z');
var transaction = remote.createTransaction('AccountSet', { const transaction = remote.createTransaction('AccountSet', {
account: ACCOUNT.address account: ACCOUNT.address
}); });
@@ -682,7 +681,7 @@ describe('TransactionManager', function() {
assert.strictEqual(err.engine_result, 'tejSecretInvalid'); assert.strictEqual(err.engine_result, 'tejSecretInvalid');
assert.strictEqual(transactionManager.getPending().length(), 0); assert.strictEqual(transactionManager.getPending().length(), 0);
var summary = transaction.summary(); const summary = transaction.summary();
assert.deepEqual(summary.tx_json, transaction.tx_json); assert.deepEqual(summary.tx_json, transaction.tx_json);
assert.strictEqual(summary.submissionAttempts, 0); assert.strictEqual(summary.submissionAttempts, 0);
assert.strictEqual(summary.submitIndex, undefined); assert.strictEqual(summary.submitIndex, undefined);
@@ -702,7 +701,7 @@ describe('TransactionManager', function() {
}); });
it('Submit transaction -- remote error', function(done) { it('Submit transaction -- remote error', function(done) {
var transaction = remote.createTransaction('Payment', { const transaction = remote.createTransaction('Payment', {
account: ACCOUNT.address, account: ACCOUNT.address,
destination: ACCOUNT2.address, destination: ACCOUNT2.address,
amount: '1' amount: '1'
@@ -718,7 +717,7 @@ describe('TransactionManager', function() {
} }
}]; }];
var receivedSubmitted = false; let receivedSubmitted = false;
transaction.once('proposed', function() { transaction.once('proposed', function() {
assert(false, 'Should not receive proposed event'); assert(false, 'Should not receive proposed event');
}); });
@@ -749,7 +748,7 @@ describe('TransactionManager', function() {
assert.strictEqual(err.remote.error, 'invalidTransaction'); assert.strictEqual(err.remote.error, 'invalidTransaction');
assert.strictEqual(transactionManager.getPending().length(), 0); assert.strictEqual(transactionManager.getPending().length(), 0);
var summary = transaction.summary(); const summary = transaction.summary();
assert.deepEqual(summary.tx_json, transaction.tx_json); assert.deepEqual(summary.tx_json, transaction.tx_json);
assert.strictEqual(summary.submissionAttempts, 1); assert.strictEqual(summary.submissionAttempts, 1);
assert.strictEqual(summary.submitIndex, 2); assert.strictEqual(summary.submitIndex, 2);

File diff suppressed because it is too large Load Diff