Browse Source

fix scan when blockchain explorer error

activeAddress
Ivan Socolsky 10 years ago
parent
commit
e21d6dabd6
  1. 15
      lib/server.js
  2. 152
      test/integration/server.js

15
lib/server.js

@ -1847,7 +1847,7 @@ WalletService.prototype.scan = function(opts, cb) {
if (err) return next(err); if (err) return next(err);
networkName = networkName || Bitcore.Address(addresses[0].address).toObject().network; networkName = networkName || Bitcore.Address(addresses[0].address).toObject().network;
checkActivity(_.pluck(addresses, 'address'), networkName, function(err, thereIsActivity) { checkActivity(_.pluck(addresses, 'address'), networkName, function(err, thereIsActivity) {
if (err) return cb(err); if (err) return next(err);
activity = thereIsActivity; activity = thereIsActivity;
if (thereIsActivity) { if (thereIsActivity) {
@ -1896,11 +1896,14 @@ WalletService.prototype.scan = function(opts, cb) {
if (err) return next(err); if (err) return next(err);
self.storage.storeAddressAndWallet(wallet, addresses, next); self.storage.storeAddressAndWallet(wallet, addresses, next);
}); });
}, function(err) { }, function(error) {
wallet.scanStatus = err ? 'error' : 'success'; self.storage.fetchWallet(wallet.id, function(err, wallet) {
self.storage.storeWallet(wallet, function() { if (err) return cb(err);
return cb(err); wallet.scanStatus = error ? 'error' : 'success';
}); self.storage.storeWallet(wallet, function() {
return cb(error);
});
})
}); });
}); });
}); });

152
test/integration/server.js

@ -265,12 +265,14 @@ helpers.createProposalOpts = function(type, outputs, signingKey, moreOpts) {
if (moreOpts) { if (moreOpts) {
moreOpts = _.chain(moreOpts) moreOpts = _.chain(moreOpts)
.pick(['feePerKb', 'customData', 'message']) .pick(['feePerKb', 'customData', 'message'])
.value(); .value();
opts = _.assign(opts, moreOpts); opts = _.assign(opts, moreOpts);
} }
opts = _.defaults(opts, { message: null }); opts = _.defaults(opts, {
message: null
});
var hash; var hash;
if (type == Model.TxProposal.Types.SIMPLE) { if (type == Model.TxProposal.Types.SIMPLE) {
@ -413,7 +415,9 @@ describe('Wallet service', function() {
} }
}; };
helpers.stubUtxos(server, wallet, [1, 1], function() { helpers.stubUtxos(server, wallet, [1, 1], function() {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 0.8, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 0.8, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.not.exist(err); should.not.exist(err);
setTimeout(function() { setTimeout(function() {
@ -448,7 +452,9 @@ describe('Wallet service', function() {
_applyTemplate_old.call(emailService, template, undefined, cb); _applyTemplate_old.call(emailService, template, undefined, cb);
}; };
helpers.stubUtxos(server, wallet, [1, 1], function() { helpers.stubUtxos(server, wallet, [1, 1], function() {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 0.8, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 0.8, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.not.exist(err); should.not.exist(err);
setTimeout(function() { setTimeout(function() {
@ -475,7 +481,9 @@ describe('Wallet service', function() {
} }
}; };
helpers.stubUtxos(server, wallet, [1, 1], function() { helpers.stubUtxos(server, wallet, [1, 1], function() {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 0.8, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 0.8, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
var txpId; var txpId;
async.waterfall([ async.waterfall([
@ -531,7 +539,9 @@ describe('Wallet service', function() {
it('should notify copayers a tx has been finally rejected', function(done) { it('should notify copayers a tx has been finally rejected', function(done) {
helpers.stubUtxos(server, wallet, 1, function() { helpers.stubUtxos(server, wallet, 1, function() {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 0.8, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 0.8, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
var txpId; var txpId;
async.waterfall([ async.waterfall([
@ -700,7 +710,9 @@ describe('Wallet service', function() {
}, },
}, function(err) { }, function(err) {
helpers.stubUtxos(server, wallet, 1, function() { helpers.stubUtxos(server, wallet, 1, function() {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 0.8, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 0.8, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.not.exist(err); should.not.exist(err);
setTimeout(function() { setTimeout(function() {
@ -1291,7 +1303,9 @@ describe('Wallet service', function() {
}); });
it('should get status after tx creation', function(done) { it('should get status after tx creation', function(done) {
helpers.stubUtxos(server, wallet, [100, 200], function() { helpers.stubUtxos(server, wallet, [100, 200], function() {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 80, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 80, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.not.exist(err); should.not.exist(err);
should.exist(tx); should.exist(tx);
@ -2045,8 +2059,10 @@ describe('Wallet service', function() {
it('should create a tx', function(done) { it('should create a tx', function(done) {
helpers.stubUtxos(server, wallet, [100, 200], function() { helpers.stubUtxos(server, wallet, [100, 200], function() {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 80, TestData.copayers[0].privKey_1H_0, var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 80, TestData.copayers[0].privKey_1H_0, {
{ message: 'some message', customData: 'some custom data' }); message: 'some message',
customData: 'some custom data'
});
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.not.exist(err); should.not.exist(err);
should.exist(tx); should.exist(tx);
@ -2098,7 +2114,9 @@ describe('Wallet service', function() {
it('should create a tx using confirmed utxos first', function(done) { it('should create a tx using confirmed utxos first', function(done) {
helpers.stubUtxos(server, wallet, [1.3, 'u0.5', 'u0.1', 1.2], function(utxos) { helpers.stubUtxos(server, wallet, [1.3, 'u0.5', 'u0.1', 1.2], function(utxos) {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 1.5, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 1.5, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.not.exist(err); should.not.exist(err);
should.exist(tx); should.exist(tx);
@ -2111,7 +2129,9 @@ describe('Wallet service', function() {
it('should use unconfirmed utxos only when no more confirmed utxos are available', function(done) { it('should use unconfirmed utxos only when no more confirmed utxos are available', function(done) {
helpers.stubUtxos(server, wallet, [1.3, 'u0.5', 'u0.1', 1.2], function(utxos) { helpers.stubUtxos(server, wallet, [1.3, 'u0.5', 'u0.1', 1.2], function(utxos) {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 2.55, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 2.55, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.not.exist(err); should.not.exist(err);
should.exist(tx); should.exist(tx);
@ -2126,13 +2146,17 @@ describe('Wallet service', function() {
it('should exclude unconfirmed utxos if specified', function(done) { it('should exclude unconfirmed utxos if specified', function(done) {
helpers.stubUtxos(server, wallet, [1.3, 'u2', 'u0.1', 1.2], function(utxos) { helpers.stubUtxos(server, wallet, [1.3, 'u2', 'u0.1', 1.2], function(utxos) {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 3, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 3, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
txOpts.excludeUnconfirmedUtxos = true; txOpts.excludeUnconfirmedUtxos = true;
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.exist(err); should.exist(err);
err.code.should.equal('INSUFFICIENT_FUNDS'); err.code.should.equal('INSUFFICIENT_FUNDS');
err.message.should.equal('Insufficient funds'); err.message.should.equal('Insufficient funds');
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 2.5, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 2.5, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
txOpts.excludeUnconfirmedUtxos = true; txOpts.excludeUnconfirmedUtxos = true;
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.exist(err); should.exist(err);
@ -2146,7 +2170,9 @@ describe('Wallet service', function() {
it('should use non-locked confirmed utxos when specified', function(done) { it('should use non-locked confirmed utxos when specified', function(done) {
helpers.stubUtxos(server, wallet, [1.3, 'u2', 'u0.1', 1.2], function(utxos) { helpers.stubUtxos(server, wallet, [1.3, 'u2', 'u0.1', 1.2], function(utxos) {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 1.4, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 1.4, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
txOpts.excludeUnconfirmedUtxos = true; txOpts.excludeUnconfirmedUtxos = true;
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.not.exist(err); should.not.exist(err);
@ -2156,7 +2182,9 @@ describe('Wallet service', function() {
should.not.exist(err); should.not.exist(err);
balance.lockedConfirmedAmount.should.equal(helpers.toSatoshi(2.5)); balance.lockedConfirmedAmount.should.equal(helpers.toSatoshi(2.5));
balance.availableConfirmedAmount.should.equal(0); balance.availableConfirmedAmount.should.equal(0);
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 0.01, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 0.01, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
txOpts.excludeUnconfirmedUtxos = true; txOpts.excludeUnconfirmedUtxos = true;
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.exist(err); should.exist(err);
@ -2172,7 +2200,9 @@ describe('Wallet service', function() {
blockchainExplorer.getUnspentUtxos = sinon.stub().callsArgWith(1, 'dummy error'); blockchainExplorer.getUnspentUtxos = sinon.stub().callsArgWith(1, 'dummy error');
server.createAddress({}, function(err, address) { server.createAddress({}, function(err, address) {
should.not.exist(err); should.not.exist(err);
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 80, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 80, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.exist(err); should.exist(err);
err.toString().should.equal('dummy error'); err.toString().should.equal('dummy error');
@ -2291,11 +2321,15 @@ describe('Wallet service', function() {
it('should be possible to use a smaller fee', function(done) { it('should be possible to use a smaller fee', function(done) {
helpers.stubUtxos(server, wallet, 1, function() { helpers.stubUtxos(server, wallet, 1, function() {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 0.99995, TestData.copayers[0].privKey_1H_0, { feePerKb: 80000 }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 0.99995, TestData.copayers[0].privKey_1H_0, {
feePerKb: 80000
});
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.exist(err); should.exist(err);
err.code.should.equal('INSUFFICIENT_FUNDS_FOR_FEE'); err.code.should.equal('INSUFFICIENT_FUNDS_FOR_FEE');
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 0.99995, TestData.copayers[0].privKey_1H_0, { feePerKb: 5000 }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 0.99995, TestData.copayers[0].privKey_1H_0, {
feePerKb: 5000
});
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.not.exist(err); should.not.exist(err);
var estimatedFee = 5000 * 400 / 1000; // fully signed tx should have about 400 bytes var estimatedFee = 5000 * 400 / 1000; // fully signed tx should have about 400 bytes
@ -2333,7 +2367,9 @@ describe('Wallet service', function() {
var change = 100 / 1e8; // Below dust var change = 100 / 1e8; // Below dust
var amount = 1 - fee - change; var amount = 1 - fee - change;
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', amount, TestData.copayers[0].privKey_1H_0, { feePerKb: 10000 }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', amount, TestData.copayers[0].privKey_1H_0, {
feePerKb: 10000
});
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.exist(err); should.exist(err);
err.code.should.equal('DUST_AMOUNT'); err.code.should.equal('DUST_AMOUNT');
@ -2491,7 +2527,9 @@ describe('Wallet service', function() {
amount: 75, amount: 75,
message: 'message #2' message: 'message #2'
}]; }];
var txOpts = helpers.createProposalOpts(Model.TxProposal.Types.MULTIPLEOUTPUTS, outputs, TestData.copayers[0].privKey_1H_0, { message : 'some message' }); var txOpts = helpers.createProposalOpts(Model.TxProposal.Types.MULTIPLEOUTPUTS, outputs, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.not.exist(err); should.not.exist(err);
should.exist(tx); should.exist(tx);
@ -2510,7 +2548,9 @@ describe('Wallet service', function() {
amount: 90, amount: 90,
message: 'message #2' message: 'message #2'
}]; }];
var txOpts = helpers.createProposalOpts(Model.TxProposal.Types.MULTIPLEOUTPUTS, outputs, TestData.copayers[0].privKey_1H_0, { message : 'some message' }); var txOpts = helpers.createProposalOpts(Model.TxProposal.Types.MULTIPLEOUTPUTS, outputs, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.exist(err); should.exist(err);
err.message.should.contain('outputs argument missing'); err.message.should.contain('outputs argument missing');
@ -2521,7 +2561,9 @@ describe('Wallet service', function() {
it('should fail to create tx for unsupported proposal type', function(done) { it('should fail to create tx for unsupported proposal type', function(done) {
helpers.stubUtxos(server, wallet, [100, 200], function() { helpers.stubUtxos(server, wallet, [100, 200], function() {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 80, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 80, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
txOpts.type = 'bogus'; txOpts.type = 'bogus';
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.exist(err); should.exist(err);
@ -2571,7 +2613,9 @@ describe('Wallet service', function() {
balance.totalBytesToSendMax.should.equal(1653); balance.totalBytesToSendMax.should.equal(1653);
var fee = parseInt((balance.totalBytesToSendMax * 2000 / 1000).toFixed(0)); var fee = parseInt((balance.totalBytesToSendMax * 2000 / 1000).toFixed(0));
var max = balance.availableAmount - fee; var max = balance.availableAmount - fee;
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', max / 1e8, TestData.copayers[0].privKey_1H_0, { feePerKb: 2000 }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', max / 1e8, TestData.copayers[0].privKey_1H_0, {
feePerKb: 2000
});
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.not.exist(err); should.not.exist(err);
should.exist(tx); should.exist(tx);
@ -3045,7 +3089,9 @@ describe('Wallet service', function() {
server = s; server = s;
wallet = w; wallet = w;
helpers.stubUtxos(server, wallet, [10, 10], function() { helpers.stubUtxos(server, wallet, [10, 10], function() {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 9, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 9, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
server.createTx(txOpts, function(err, txp) { server.createTx(txOpts, function(err, txp) {
should.not.exist(err); should.not.exist(err);
should.exist(txp); should.exist(txp);
@ -3117,7 +3163,9 @@ describe('Wallet service', function() {
it('should fail to brodcast a not yet accepted tx', function(done) { it('should fail to brodcast a not yet accepted tx', function(done) {
helpers.stubBroadcast('999'); helpers.stubBroadcast('999');
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 9, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 9, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
server.createTx(txOpts, function(err, txp) { server.createTx(txOpts, function(err, txp) {
should.not.exist(err); should.not.exist(err);
should.exist(txp); should.exist(txp);
@ -3210,7 +3258,9 @@ describe('Wallet service', function() {
}); });
it('other copayers should see pending proposal created by one copayer', function(done) { it('other copayers should see pending proposal created by one copayer', function(done) {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 10, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 10, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
server.createTx(txOpts, function(err, txp) { server.createTx(txOpts, function(err, txp) {
should.not.exist(err); should.not.exist(err);
should.exist(txp); should.exist(txp);
@ -3231,7 +3281,9 @@ describe('Wallet service', function() {
async.waterfall([ async.waterfall([
function(next) { function(next) {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 10, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 10, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
server.createTx(txOpts, function(err, txp) { server.createTx(txOpts, function(err, txp) {
txpId = txp.id; txpId = txp.id;
should.not.exist(err); should.not.exist(err);
@ -3319,7 +3371,9 @@ describe('Wallet service', function() {
async.waterfall([ async.waterfall([
function(next) { function(next) {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 10, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 10, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
server.createTx(txOpts, function(err, txp) { server.createTx(txOpts, function(err, txp) {
txpId = txp.id; txpId = txp.id;
should.not.exist(err); should.not.exist(err);
@ -3401,7 +3455,9 @@ describe('Wallet service', function() {
server = s; server = s;
wallet = w; wallet = w;
helpers.stubUtxos(server, wallet, 10, function() { helpers.stubUtxos(server, wallet, 10, function() {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 9, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 9, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
server.createTx(txOpts, function(err, txp) { server.createTx(txOpts, function(err, txp) {
should.not.exist(err); should.not.exist(err);
should.exist(txp); should.exist(txp);
@ -3756,7 +3812,9 @@ describe('Wallet service', function() {
wallet2 = w; wallet2 = w;
helpers.stubUtxos(server2, wallet2, _.range(1, 3), function() { helpers.stubUtxos(server2, wallet2, _.range(1, 3), function() {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 0.1, TestData.copayers[1].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 0.1, TestData.copayers[1].privKey_1H_0, {
message: 'some message'
});
async.eachSeries(_.range(2), function(i, next) { async.eachSeries(_.range(2), function(i, next) {
server2.createTx(txOpts, function(err, tx) { server2.createTx(txOpts, function(err, tx) {
should.not.exist(err); should.not.exist(err);
@ -3822,7 +3880,9 @@ describe('Wallet service', function() {
server = s; server = s;
wallet = w; wallet = w;
helpers.stubUtxos(server, wallet, [100, 200], function() { helpers.stubUtxos(server, wallet, [100, 200], function() {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 80, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 80, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
server.getPendingTxs({}, function(err, txs) { server.getPendingTxs({}, function(err, txs) {
txp = txs[0]; txp = txs[0];
@ -4148,7 +4208,9 @@ describe('Wallet service', function() {
amount: 30, amount: 30,
message: 'message #2' message: 'message #2'
}]; }];
var txOpts = helpers.createProposalOpts(Model.TxProposal.Types.MULTIPLEOUTPUTS, outputs, TestData.copayers[0].privKey_1H_0, { message : 'some message' }); var txOpts = helpers.createProposalOpts(Model.TxProposal.Types.MULTIPLEOUTPUTS, outputs, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.not.exist(err); should.not.exist(err);
should.exist(tx); should.exist(tx);
@ -4422,6 +4484,8 @@ describe('Wallet service', function() {
server.getWallet({}, function(err, wallet) { server.getWallet({}, function(err, wallet) {
should.not.exist(err); should.not.exist(err);
wallet.scanStatus.should.equal('error'); wallet.scanStatus.should.equal('error');
wallet.addressManager.receiveAddressIndex.should.equal(0);
wallet.addressManager.changeAddressIndex.should.equal(0);
server.storage.fetchAddresses(wallet.id, function(err, addresses) { server.storage.fetchAddresses(wallet.id, function(err, addresses) {
should.not.exist(err); should.not.exist(err);
addresses.should.be.empty; addresses.should.be.empty;
@ -4651,7 +4715,9 @@ describe('Wallet service', function() {
it('should create a tx from legacy (bwc-0.0.*) client', function(done) { it('should create a tx from legacy (bwc-0.0.*) client', function(done) {
helpers.stubUtxos(server, wallet, [100, 200], function() { helpers.stubUtxos(server, wallet, [100, 200], function() {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 80, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 80, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
var verifyStub = sinon.stub(WalletService.prototype, '_verifySignature'); var verifyStub = sinon.stub(WalletService.prototype, '_verifySignature');
verifyStub.returns(true); verifyStub.returns(true);
@ -4677,7 +4743,9 @@ describe('Wallet service', function() {
it('should not return error when fetching new txps from legacy (bwc-0.0.*) client', function(done) { it('should not return error when fetching new txps from legacy (bwc-0.0.*) client', function(done) {
helpers.stubUtxos(server, wallet, [100, 200], function() { helpers.stubUtxos(server, wallet, [100, 200], function() {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 80, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 80, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.not.exist(err); should.not.exist(err);
should.exist(tx); should.exist(tx);
@ -4704,7 +4772,9 @@ describe('Wallet service', function() {
}); });
it('should fail to sign tx from legacy (bwc-0.0.*) client', function(done) { it('should fail to sign tx from legacy (bwc-0.0.*) client', function(done) {
helpers.stubUtxos(server, wallet, [100, 200], function() { helpers.stubUtxos(server, wallet, [100, 200], function() {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 80, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 80, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.not.exist(err); should.not.exist(err);
should.exist(tx); should.exist(tx);
@ -4735,7 +4805,9 @@ describe('Wallet service', function() {
}); });
it('should create a tx from legacy (bwc-0.0.*) client and sign it from newer client', function(done) { it('should create a tx from legacy (bwc-0.0.*) client and sign it from newer client', function(done) {
helpers.stubUtxos(server, wallet, [100, 200], function() { helpers.stubUtxos(server, wallet, [100, 200], function() {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 80, TestData.copayers[0].privKey_1H_0, { message: 'some message' }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 80, TestData.copayers[0].privKey_1H_0, {
message: 'some message'
});
var verifyStub = sinon.stub(WalletService.prototype, '_verifySignature'); var verifyStub = sinon.stub(WalletService.prototype, '_verifySignature');
verifyStub.returns(true); verifyStub.returns(true);
@ -4785,7 +4857,9 @@ describe('Wallet service', function() {
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.exist(err); should.exist(err);
err.code.should.equal('INSUFFICIENT_FUNDS_FOR_FEE'); err.code.should.equal('INSUFFICIENT_FUNDS_FOR_FEE');
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 0.99995, TestData.copayers[0].privKey_1H_0, { feePerKb: 5000 }); var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 0.99995, TestData.copayers[0].privKey_1H_0, {
feePerKb: 5000
});
server.createTx(txOpts, function(err, tx) { server.createTx(txOpts, function(err, tx) {
should.not.exist(err); should.not.exist(err);
tx.fee.should.equal(5000); tx.fee.should.equal(5000);

Loading…
Cancel
Save