wallet: make .fill() throw
This commit is contained in:
parent
89877db9ba
commit
3ef7008a32
@ -247,7 +247,7 @@ Wallet.prototype.balance = function balance() {
|
|||||||
return this.tx.balance();
|
return this.tx.balance();
|
||||||
};
|
};
|
||||||
|
|
||||||
Wallet.prototype.fill = function fill(tx, cb) {
|
Wallet.prototype.fill = function fill(tx) {
|
||||||
// NOTE: tx should be prefilled with all outputs
|
// NOTE: tx should be prefilled with all outputs
|
||||||
var cost = tx.funds('out');
|
var cost = tx.funds('out');
|
||||||
|
|
||||||
@ -257,12 +257,12 @@ Wallet.prototype.fill = function fill(tx, cb) {
|
|||||||
// total = cost + fee
|
// total = cost + fee
|
||||||
var total = cost.add(new bn(this.fee));
|
var total = cost.add(new bn(this.fee));
|
||||||
|
|
||||||
var lastAdded = -1;
|
var lastAdded = 0;
|
||||||
function addInput(unspent, i) {
|
function addInput(unspent, i) {
|
||||||
// Add new inputs until TX will have enough funds to cover both
|
// Add new inputs until TX will have enough funds to cover both
|
||||||
// minimum post cost and fee
|
// minimum post cost and fee
|
||||||
tx.input(unspent);
|
tx.input(unspent);
|
||||||
lastAdded = i;
|
lastAdded++;
|
||||||
return tx.funds('in').cmp(total) < 0;
|
return tx.funds('in').cmp(total) < 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -285,14 +285,14 @@ Wallet.prototype.fill = function fill(tx, cb) {
|
|||||||
|
|
||||||
// Failed to get enough funds, add more inputs
|
// Failed to get enough funds, add more inputs
|
||||||
if (tx.funds('in').cmp(total) < 0)
|
if (tx.funds('in').cmp(total) < 0)
|
||||||
unspent.slice(lastAdded + 1).every(addInput, this);
|
unspent.slice(lastAdded).every(addInput, this);
|
||||||
} while (tx.funds('in').cmp(total) < 0 && lastAdded < unspent.length);
|
} while (tx.funds('in').cmp(total) < 0 && lastAdded < unspent.length);
|
||||||
|
|
||||||
// Still failing to get enough funds, notify caller
|
// Still failing to get enough funds, notify caller
|
||||||
if (tx.funds('in').cmp(total) < 0) {
|
if (tx.funds('in').cmp(total) < 0) {
|
||||||
var err = new Error('Not enough funds');
|
var err = new Error('Not enough funds');
|
||||||
err.minBalance = total;
|
err.minBalance = total;
|
||||||
return cb(err);
|
throw err;
|
||||||
}
|
}
|
||||||
|
|
||||||
// How much money is left after sending outputs
|
// How much money is left after sending outputs
|
||||||
|
|||||||
@ -148,5 +148,11 @@ describe('Wallet', function() {
|
|||||||
|
|
||||||
assert.equal(t2.funds('in').toString(10), 16380);
|
assert.equal(t2.funds('in').toString(10), 16380);
|
||||||
assert.equal(t2.funds('out').toString(10), 6380);
|
assert.equal(t2.funds('out').toString(10), 6380);
|
||||||
|
|
||||||
|
// Create new transaction
|
||||||
|
var t2 = bcoin.tx().out(w2, 15000);
|
||||||
|
assert.throws(function() {
|
||||||
|
w1.fill(t2);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user