From a8eedc8c0143f0b092740520bab40b56fbaff9ff Mon Sep 17 00:00:00 2001 From: Ivan Socolsky Date: Thu, 13 Aug 2015 17:24:49 -0300 Subject: [PATCH 1/2] rename internal constants --- lib/server.js | 43 +++++++++++++++++++++++++------------- test/integration/server.js | 26 +++++++++++------------ 2 files changed, 42 insertions(+), 27 deletions(-) diff --git a/lib/server.js b/lib/server.js index d12a04b..073620c 100644 --- a/lib/server.js +++ b/lib/server.js @@ -53,20 +53,35 @@ function WalletService() { // Time after which a Tx proposal can be erased by any copayer. in seconds -WalletService.deleteLockTime = 24 * 3600; +WalletService.DELETE_LOCKTIME = 24 * 3600; // Allowed consecutive txp rejections before backoff is applied. -WalletService.backoffOffset = 3; +WalletService.BACKOFF_OFFSET = 3; // Time a copayer need to wait to create a new TX after her tx previous proposal we rejected. (incremental). in Minutes. -WalletService.backoffTimeMinutes = 2; +WalletService.BACKOFF_TIME = 2; // Fund scanning parameters -WalletService.scanConfig = { - SCAN_WINDOW: 20, - DERIVATION_DELAY: 10, // in milliseconds +WalletService.SCAN_CONFIG = { + scanWindow: 20, + derivationDelay: 10, // in milliseconds }; +WalletService.FEE_LEVELS = [{ + name: 'priority', + nbBlocks: 1, + defaultValue: 50000 +}, { + name: 'normal', + nbBlocks: 4, + defaultValue: 20000 +}, { + name: 'economy', + nbBlocks: 12, + defaultValue: 10000 +}]; + + /** * Initializes global settings for all instances. * @param {Object} opts @@ -810,7 +825,7 @@ WalletService.prototype.getFeeLevels = function(opts, cb) { if (network != 'livenet' && network != 'testnet') return cb(new ClientError('Invalid network')); - var levels = WalletUtils.FEE_LEVELS; + var levels = WalletService.FEE_LEVELS; var samplePoints = _.uniq(_.pluck(levels, 'nbBlocks')); self._sampleFeeLevels(network, samplePoints, function(err, feeSamples) { var values = _.map(levels, function(level) { @@ -924,7 +939,7 @@ WalletService.prototype._selectTxInputs = function(txp, cb) { WalletService.prototype._canCreateTx = function(copayerId, cb) { var self = this; - self.storage.fetchLastTxs(self.walletId, copayerId, 5 + WalletService.backoffOffset, function(err, txs) { + self.storage.fetchLastTxs(self.walletId, copayerId, 5 + WalletService.BACKOFF_OFFSET, function(err, txs) { if (err) return cb(err); if (!txs.length) @@ -934,7 +949,7 @@ WalletService.prototype._canCreateTx = function(copayerId, cb) { status: 'rejected' }); - var exceededRejections = lastRejections.length - WalletService.backoffOffset; + var exceededRejections = lastRejections.length - WalletService.BACKOFF_OFFSET; if (exceededRejections <= 0) return cb(null, true); @@ -942,7 +957,7 @@ WalletService.prototype._canCreateTx = function(copayerId, cb) { var lastTxTs = txs[0].createdOn; var now = Math.floor(Date.now() / 1000); var timeSinceLastRejection = now - lastTxTs; - var backoffTime = 60 * Math.pow(WalletService.backoffTimeMinutes, exceededRejections); + var backoffTime = 60 * Math.pow(WalletService.BACKOFF_TIME, exceededRejections); if (timeSinceLastRejection <= backoffTime) log.debug('Not allowing to create TX: timeSinceLastRejection/backoffTime', timeSinceLastRejection, backoffTime); @@ -1132,7 +1147,7 @@ WalletService.prototype.removeWallet = function(opts, cb) { WalletService.prototype.getRemainingDeleteLockTime = function(txp) { var now = Math.floor(Date.now() / 1000); - var lockTimeRemaining = txp.createdOn + WalletService.deleteLockTime - now; + var lockTimeRemaining = txp.createdOn + WalletService.DELETE_LOCKTIME - now; if (lockTimeRemaining < 0) return 0; @@ -1644,7 +1659,7 @@ WalletService.prototype.scan = function(opts, cb) { async.mapSeries(_.range(size), function(i, next) { setTimeout(function() { next(null, derivator.derive()); - }, WalletService.scanConfig.DERIVATION_DELAY) + }, WalletService.SCAN_CONFIG.derivationDelay) }, cb); }; @@ -1660,7 +1675,7 @@ WalletService.prototype.scan = function(opts, cb) { async.whilst(function() { return activity; }, function(next) { - deriveAddresses(WalletService.scanConfig.SCAN_WINDOW, derivator, function(err, addresses) { + deriveAddresses(WalletService.SCAN_CONFIG.scanWindow, derivator, function(err, addresses) { if (err) return next(err); networkName = networkName || Bitcore.Address(addresses[0].address).toObject().network; checkActivity(_.pluck(addresses, 'address'), networkName, function(err, thereIsActivity) { @@ -1670,7 +1685,7 @@ WalletService.prototype.scan = function(opts, cb) { if (thereIsActivity) { allAddresses.push(addresses); } else { - derivator.rewind(WalletService.scanConfig.SCAN_WINDOW); + derivator.rewind(WalletService.SCAN_CONFIG.scanWindow); } next(); }); diff --git a/test/integration/server.js b/test/integration/server.js index 0dceb24..641d355 100644 --- a/test/integration/server.js +++ b/test/integration/server.js @@ -2247,7 +2247,7 @@ describe('Wallet service', function() { }); }, function(next) { - var clock = sinon.useFakeTimers(Date.now() + (WalletService.backoffTimeMinutes + 2) * 60 * 1000, 'Date'); + var clock = sinon.useFakeTimers(Date.now() + (WalletService.BACKOFF_TIME + 2) * 60 * 1000, 'Date'); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 1, null, TestData.copayers[0].privKey_1H_0); server.createTx(txOpts, function(err, tx) { clock.restore(); @@ -2259,7 +2259,7 @@ describe('Wallet service', function() { }, function(next) { // Do not allow a 5th tx before backoff time - var clock = sinon.useFakeTimers(Date.now() + (WalletService.backoffTimeMinutes + 2) * 60 * 1000 + 1, 'Date'); + var clock = sinon.useFakeTimers(Date.now() + (WalletService.BACKOFF_TIME + 2) * 60 * 1000 + 1, 'Date'); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 1, null, TestData.copayers[0].privKey_1H_0); server.createTx(txOpts, function(err, tx) { clock.restore(); @@ -3502,7 +3502,7 @@ describe('Wallet service', function() { server.getPendingTxs({}, function(err, txs) { should.not.exist(err); - txs[0].deleteLockTime.should.be.above(WalletService.deleteLockTime - 10); + txs[0].deleteLockTime.should.be.above(WalletService.DELETE_LOCKTIME - 10); var clock = sinon.useFakeTimers(Date.now() + 1 + 24 * 3600 * 1000, 'Date'); server.removePendingTx({ @@ -3527,7 +3527,7 @@ describe('Wallet service', function() { }, function(err) { should.not.exist(err); - var clock = sinon.useFakeTimers(Date.now() + 2000 + WalletService.deleteLockTime * 1000, 'Date'); + var clock = sinon.useFakeTimers(Date.now() + 2000 + WalletService.DELETE_LOCKTIME * 1000, 'Date'); server2.removePendingTx({ txProposalId: txp.id }, function(err) { @@ -3844,11 +3844,11 @@ describe('Wallet service', function() { describe('#scan', function() { var server, wallet; - var scanConfigOld = WalletService.scanConfig; + var scanConfigOld = WalletService.SCAN_CONFIG; beforeEach(function(done) { this.timeout(5000); - WalletService.scanConfig.SCAN_WINDOW = 2; - WalletService.scanConfig.DERIVATION_DELAY = 0; + WalletService.SCAN_CONFIG.scanWindow = 2; + WalletService.SCAN_CONFIG.derivationDelay = 0; helpers.createAndJoinWallet(1, 2, function(s, w) { server = s; @@ -3857,7 +3857,7 @@ describe('Wallet service', function() { }); }); afterEach(function() { - WalletService.scanConfig = scanConfigOld; + WalletService.SCAN_CONFIG = scanConfigOld; }); it('should scan main addresses', function(done) { @@ -3987,11 +3987,11 @@ describe('Wallet service', function() { describe('#startScan', function() { var server, wallet; - var scanConfigOld = WalletService.scanConfig; + var scanConfigOld = WalletService.SCAN_CONFIG; beforeEach(function(done) { this.timeout(5000); - WalletService.scanConfig.SCAN_WINDOW = 2; - WalletService.scanConfig.DERIVATION_DELAY = 0; + WalletService.SCAN_CONFIG.scanWindow = 2; + WalletService.SCAN_CONFIG.derivationDelay = 0; helpers.createAndJoinWallet(1, 2, function(s, w) { server = s; @@ -4000,7 +4000,7 @@ describe('Wallet service', function() { }); }); afterEach(function() { - WalletService.scanConfig = scanConfigOld; + WalletService.SCAN_CONFIG = scanConfigOld; server.messageBroker.removeAllListeners(); }); @@ -4060,7 +4060,7 @@ describe('Wallet service', function() { }); it('should start multiple asynchronous scans for different wallets', function(done) { helpers.stubAddressActivity(['3K2VWMXheGZ4qG35DyGjA2dLeKfaSr534A']); - WalletService.scanConfig.SCAN_WINDOW = 1; + WalletService.SCAN_CONFIG.scanWindow = 1; var scans = 0; server.messageBroker.onMessage(function(n) { From 3bd341c65f8a048300dcfdf05e1b3ab004f5d7b3 Mon Sep 17 00:00:00 2001 From: Ivan Socolsky Date: Thu, 13 Aug 2015 17:27:06 -0300 Subject: [PATCH 2/2] fee levels set to 1, 2, 6 --- lib/server.js | 4 ++-- test/integration/server.js | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/server.js b/lib/server.js index 073620c..65d4865 100644 --- a/lib/server.js +++ b/lib/server.js @@ -73,11 +73,11 @@ WalletService.FEE_LEVELS = [{ defaultValue: 50000 }, { name: 'normal', - nbBlocks: 4, + nbBlocks: 2, defaultValue: 20000 }, { name: 'economy', - nbBlocks: 12, + nbBlocks: 6, defaultValue: 10000 }]; diff --git a/test/integration/server.js b/test/integration/server.js index 641d355..aa3ae82 100644 --- a/test/integration/server.js +++ b/test/integration/server.js @@ -1523,8 +1523,8 @@ describe('Wallet service', function() { it('should get current fee levels', function(done) { helpers.stubFeeLevels({ 1: 40000, - 4: 20000, - 12: 18000, + 2: 20000, + 6: 18000, }); server.getFeeLevels({}, function(err, fees) { should.not.exist(err); @@ -1535,10 +1535,10 @@ describe('Wallet service', function() { fees.priority.nbBlocks.should.equal(1); fees.normal.feePerKB.should.equal(20000); - fees.normal.nbBlocks.should.equal(4); + fees.normal.nbBlocks.should.equal(2); fees.economy.feePerKB.should.equal(18000); - fees.economy.nbBlocks.should.equal(12); + fees.economy.nbBlocks.should.equal(6); done(); }); }); @@ -1558,8 +1558,8 @@ describe('Wallet service', function() { it('should get default fees if network cannot estimate (returns -1)', function(done) { helpers.stubFeeLevels({ 1: -1, - 4: 18000, - 12: 0, + 2: 18000, + 6: 0, }); server.getFeeLevels({}, function(err, fees) { should.not.exist(err); @@ -1570,10 +1570,10 @@ describe('Wallet service', function() { should.not.exist(fees.priority.nbBlocks); fees.normal.feePerKB.should.equal(18000); - fees.normal.nbBlocks.should.equal(4); + fees.normal.nbBlocks.should.equal(2); fees.economy.feePerKB.should.equal(0); - fees.economy.nbBlocks.should.equal(12); + fees.economy.nbBlocks.should.equal(6); done(); }); });