improve utxo mocking
This commit is contained in:
parent
dbba3acfa8
commit
328f6250be
|
@ -273,16 +273,19 @@ TxProposal.prototype.getRawTx = function() {
|
|||
return t.uncheckedSerialize();
|
||||
};
|
||||
|
||||
TxProposal.prototype.getEstimatedSizeForSingleInput = function() {
|
||||
return this.requiredSignatures * 72 + this.walletN * 36 + 44;
|
||||
};
|
||||
|
||||
TxProposal.prototype.getEstimatedSize = function() {
|
||||
// Note: found empirically based on all multisig P2SH inputs and within m & n allowed limits.
|
||||
var safetyMargin = 0.05;
|
||||
var walletM = this.requiredSignatures;
|
||||
|
||||
var overhead = 4 + 4 + 9 + 9;
|
||||
var inputSize = walletM * 72 + this.walletN * 36 + 44;
|
||||
var inputSize = this.getEstimatedSizeForSingleInput();
|
||||
var outputSize = 34;
|
||||
var nbInputs = this.inputs.length;
|
||||
var nbOutputs = (_.isArray(this.outputs) ? this.outputs.length : 1) + 1;
|
||||
var nbOutputs = (_.isArray(this.outputs) ? Math.max(1, this.outputs.length) : 1) + 1;
|
||||
|
||||
var size = overhead + inputSize * nbInputs + outputSize * nbOutputs;
|
||||
|
||||
|
|
|
@ -212,6 +212,40 @@ helpers.toSatoshi = function(btc) {
|
|||
}
|
||||
};
|
||||
|
||||
helpers._parseAmount = function(str) {
|
||||
var result = {
|
||||
amount: +0,
|
||||
confirmations: _.random(6, 100),
|
||||
};
|
||||
|
||||
if (_.isNumber(str)) str = str.toString();
|
||||
|
||||
var re = /^((?:\d+c)|u)?\s*([\d\.]+)\s*(btc|bit|sat)?$/;
|
||||
var match = str.match(re);
|
||||
|
||||
if (!match) throw new Error('Could not parse amount ' + str);
|
||||
|
||||
if (match[1]) {
|
||||
if (match[1] == 'u') result.confirmations = 0;
|
||||
if (_.endsWith(match[1], 'c')) result.confirmations = +match[1].slice(0, -1);
|
||||
}
|
||||
|
||||
switch (match[3]) {
|
||||
default:
|
||||
case 'btc':
|
||||
result.amount = Utils.strip(match[2] * 1e8);
|
||||
break;
|
||||
case 'bit':
|
||||
result.amount = Utils.strip(match[2] * 1e6);
|
||||
break
|
||||
case 'sat':
|
||||
result.amount = Utils.strip(match[2]);
|
||||
break;
|
||||
};
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
helpers.stubUtxos = function(server, wallet, amounts, opts, cb) {
|
||||
if (_.isFunction(opts)) {
|
||||
cb = opts;
|
||||
|
@ -233,17 +267,9 @@ helpers.stubUtxos = function(server, wallet, amounts, opts, cb) {
|
|||
addresses.should.not.be.empty;
|
||||
|
||||
var utxos = _.compact(_.map([].concat(amounts), function(amount, i) {
|
||||
var confirmations = _.random(6, 100);
|
||||
if (_.isString(amount)) {
|
||||
if (_.startsWith(amount, 'u')) {
|
||||
amount = parseFloat(amount.substring(1));
|
||||
confirmations = 0;
|
||||
} else if (_.startsWith(amount, '<6')) {
|
||||
amount = parseFloat(amount.substring(2));
|
||||
confirmations = _.random(1, 5);
|
||||
}
|
||||
}
|
||||
if (amount <= 0) return null;
|
||||
var parsed = helpers._parseAmount(amount);
|
||||
console.log('*** [helpers.js ln270] amount, result:', amount, parsed); // TODO
|
||||
if (parsed.amount <= 0) return null;
|
||||
|
||||
var address = addresses[i % addresses.length];
|
||||
|
||||
|
@ -261,10 +287,10 @@ helpers.stubUtxos = function(server, wallet, amounts, opts, cb) {
|
|||
return {
|
||||
txid: helpers.randomTXID(),
|
||||
vout: _.random(0, 10),
|
||||
satoshis: helpers.toSatoshi(amount),
|
||||
satoshis: parsed.amount,
|
||||
scriptPubKey: scriptPubKey.toBuffer().toString('hex'),
|
||||
address: address.address,
|
||||
confirmations: confirmations
|
||||
confirmations: parsed.confirmations,
|
||||
};
|
||||
}));
|
||||
|
||||
|
|
|
@ -5778,7 +5778,7 @@ describe('Wallet service', function() {
|
|||
});
|
||||
});
|
||||
it.skip('should select smallest big utxo if small utxos exceed maximum fee', function(done) {});
|
||||
it.only('should ignore utxos not contributing enough to cover increase in fee', function(done) {
|
||||
it('should ignore utxos not contributing enough to cover increase in fee', function(done) {
|
||||
helpers.stubUtxos(server, wallet, [0.0001, 0.0001, 0.0001], function() {
|
||||
var txOpts = {
|
||||
outputs: [{
|
||||
|
|
Loading…
Reference in New Issue