Merge pull request #343 from isocolsky/fix/scan

Fix scan when blockchain explorer error
This commit is contained in:
Matias Alejo Garcia 2015-09-04 11:51:54 -03:00
commit 884a68a628
2 changed files with 122 additions and 45 deletions

View File

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

View File

@ -265,12 +265,14 @@ helpers.createProposalOpts = function(type, outputs, signingKey, moreOpts) {
if (moreOpts) {
moreOpts = _.chain(moreOpts)
.pick(['feePerKb', 'customData', 'message'])
.value();
.pick(['feePerKb', 'customData', 'message'])
.value();
opts = _.assign(opts, moreOpts);
}
opts = _.defaults(opts, { message: null });
opts = _.defaults(opts, {
message: null
});
var hash;
if (type == Model.TxProposal.Types.SIMPLE) {
@ -413,7 +415,9 @@ describe('Wallet service', 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) {
should.not.exist(err);
setTimeout(function() {
@ -448,7 +452,9 @@ describe('Wallet service', function() {
_applyTemplate_old.call(emailService, template, undefined, cb);
};
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) {
should.not.exist(err);
setTimeout(function() {
@ -475,7 +481,9 @@ describe('Wallet service', 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;
async.waterfall([
@ -531,7 +539,9 @@ describe('Wallet service', function() {
it('should notify copayers a tx has been finally rejected', function(done) {
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;
async.waterfall([
@ -700,7 +710,9 @@ describe('Wallet service', function() {
},
}, function(err) {
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) {
should.not.exist(err);
setTimeout(function() {
@ -1291,7 +1303,9 @@ describe('Wallet service', function() {
});
it('should get status after tx creation', function(done) {
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) {
should.not.exist(err);
should.exist(tx);
@ -2045,8 +2059,10 @@ describe('Wallet service', function() {
it('should create a tx', function(done) {
helpers.stubUtxos(server, wallet, [100, 200], function() {
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 80, TestData.copayers[0].privKey_1H_0,
{ message: 'some message', customData: 'some custom data' });
var txOpts = helpers.createSimpleProposalOpts('18PzpUFkFZE8zKWUPvfykkTxmB9oMR8qP7', 80, TestData.copayers[0].privKey_1H_0, {
message: 'some message',
customData: 'some custom data'
});
server.createTx(txOpts, function(err, tx) {
should.not.exist(err);
should.exist(tx);
@ -2098,7 +2114,9 @@ describe('Wallet service', function() {
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) {
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) {
should.not.exist(err);
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) {
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) {
should.not.exist(err);
should.exist(tx);
@ -2126,13 +2146,17 @@ describe('Wallet service', function() {
it('should exclude unconfirmed utxos if specified', function(done) {
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;
server.createTx(txOpts, function(err, tx) {
should.exist(err);
err.code.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;
server.createTx(txOpts, function(err, tx) {
should.exist(err);
@ -2146,7 +2170,9 @@ describe('Wallet service', function() {
it('should use non-locked confirmed utxos when specified', function(done) {
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;
server.createTx(txOpts, function(err, tx) {
should.not.exist(err);
@ -2156,7 +2182,9 @@ describe('Wallet service', function() {
should.not.exist(err);
balance.lockedConfirmedAmount.should.equal(helpers.toSatoshi(2.5));
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;
server.createTx(txOpts, function(err, tx) {
should.exist(err);
@ -2172,7 +2200,9 @@ describe('Wallet service', function() {
blockchainExplorer.getUnspentUtxos = sinon.stub().callsArgWith(1, 'dummy error');
server.createAddress({}, function(err, address) {
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) {
should.exist(err);
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) {
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) {
should.exist(err);
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) {
should.not.exist(err);
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 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) {
should.exist(err);
err.code.should.equal('DUST_AMOUNT');
@ -2491,7 +2527,9 @@ describe('Wallet service', function() {
amount: 75,
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) {
should.not.exist(err);
should.exist(tx);
@ -2510,7 +2548,9 @@ describe('Wallet service', function() {
amount: 90,
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) {
should.exist(err);
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) {
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';
server.createTx(txOpts, function(err, tx) {
should.exist(err);
@ -2571,7 +2613,9 @@ describe('Wallet service', function() {
balance.totalBytesToSendMax.should.equal(1653);
var fee = parseInt((balance.totalBytesToSendMax * 2000 / 1000).toFixed(0));
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) {
should.not.exist(err);
should.exist(tx);
@ -3045,7 +3089,9 @@ describe('Wallet service', function() {
server = s;
wallet = w;
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) {
should.not.exist(err);
should.exist(txp);
@ -3117,7 +3163,9 @@ describe('Wallet service', function() {
it('should fail to brodcast a not yet accepted tx', function(done) {
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) {
should.not.exist(err);
should.exist(txp);
@ -3210,7 +3258,9 @@ describe('Wallet service', function() {
});
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) {
should.not.exist(err);
should.exist(txp);
@ -3231,7 +3281,9 @@ describe('Wallet service', function() {
async.waterfall([
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) {
txpId = txp.id;
should.not.exist(err);
@ -3319,7 +3371,9 @@ describe('Wallet service', function() {
async.waterfall([
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) {
txpId = txp.id;
should.not.exist(err);
@ -3401,7 +3455,9 @@ describe('Wallet service', function() {
server = s;
wallet = w;
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) {
should.not.exist(err);
should.exist(txp);
@ -3756,7 +3812,9 @@ describe('Wallet service', function() {
wallet2 = w;
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) {
server2.createTx(txOpts, function(err, tx) {
should.not.exist(err);
@ -3822,7 +3880,9 @@ describe('Wallet service', function() {
server = s;
wallet = w;
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.getPendingTxs({}, function(err, txs) {
txp = txs[0];
@ -4148,7 +4208,9 @@ describe('Wallet service', function() {
amount: 30,
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) {
should.not.exist(err);
should.exist(tx);
@ -4422,6 +4484,8 @@ describe('Wallet service', function() {
server.getWallet({}, function(err, wallet) {
should.not.exist(err);
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) {
should.not.exist(err);
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) {
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');
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) {
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) {
should.not.exist(err);
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) {
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) {
should.not.exist(err);
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) {
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');
verifyStub.returns(true);
@ -4785,7 +4857,9 @@ describe('Wallet service', function() {
server.createTx(txOpts, function(err, tx) {
should.exist(err);
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) {
should.not.exist(err);
tx.fee.should.equal(5000);