Revert "wallet/mtx: add extraOutputs option."

This reverts commit 3957f83a59.
This commit is contained in:
Christopher Jeffrey 2017-08-26 00:13:24 -07:00
parent 140eece7dd
commit c6b76ec73f
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
4 changed files with 11 additions and 93 deletions

View File

@ -310,9 +310,7 @@ CLI.prototype.sendTX = async function sendTX() {
outputs: outputs,
smart: this.config.bool('smart'),
rate: this.config.ufixed('rate', 8),
subtractFee: this.config.bool('subtract-fee'),
extraOutputs: this.config.uint('extra'),
selection: this.config.str('selection')
subtractFee: this.config.bool('subtract-fee')
};
const tx = await this.wallet.send(options);
@ -341,9 +339,7 @@ CLI.prototype.createTX = async function createTX() {
outputs: [output],
smart: this.config.bool('smart'),
rate: this.config.ufixed('rate', 8),
subtractFee: this.config.bool('subtract-fee'),
extraOutputs: this.config.uint('extra'),
selection: this.config.str('selection')
subtractFee: this.config.bool('subtract-fee')
};
const tx = await this.wallet.createTX(options);

View File

@ -1289,96 +1289,33 @@ MTX.prototype.fund = async function fund(coins, options) {
// Do nothing. Change is added to fee.
this.changeIndex = -1;
assert.strictEqual(this.getFee(), select.fee + select.change);
assert(select.fee + select.change <= CoinSelector.MAX_FEE);
return select;
} else {
this.outputs.push(change);
this.changeIndex = this.outputs.length - 1;
assert.strictEqual(this.getFee(), select.fee);
}
// Add a change output.
this.outputs.push(change);
this.changeIndex = this.outputs.length - 1;
// Add more change outputs if we want.
// This is specifically designed to
// easily allow large hot wallets to
// bypass the stupidity of the 25
// ancestor limit in the mempool.
//
// If core decides to add another
// ridiculous "spam prevention feature"
// like rejecting duplicate addresses,
// we can start making these addresses
// more dynamic.
if (select.extraOutputs > 0)
this.addExtra(select.extraOutputs);
assert.strictEqual(this.getFee(), select.fee);
assert(select.fee <= CoinSelector.MAX_FEE);
return select;
};
/**
* Add extra change outputs.
* @param {Number} outputs
*/
MTX.prototype.addExtra = function addExtra(outputs) {
assert(typeof outputs === 'number');
assert(outputs >= 0);
const index = this.changeIndex;
const output = this.outputs[index];
assert(output);
const change = output.value;
outputs += 1;
for (;;) {
assert(outputs !== 0);
output.value = Math.floor(change / outputs);
if (!output.isDust(policy.MIN_RELAY))
break;
outputs--;
}
for (let i = 0; i < outputs - 1; i++)
this.outputs.push(output.clone());
const left = change - (outputs * output.value);
output.value += left;
let total = 0;
for (let i = index; i < this.outputs.length; i++) {
const output = this.outputs[i];
total += output.value;
}
assert.strictEqual(total, change);
};
/**
* Sort inputs and outputs according to BIP69.
* @see https://github.com/bitcoin/bips/blob/master/bip-0069.mediawiki
*/
MTX.prototype.sortMembers = function sortMembers() {
let change = null;
let changeOutput = null;
if (this.changeIndex !== -1) {
change = this.outputs[this.changeIndex];
assert(change);
changeOutput = this.outputs[this.changeIndex];
assert(changeOutput);
}
this.inputs.sort(sortInputs);
this.outputs.sort(sortOutputs);
if (change) {
this.changeIndex = this.outputs.indexOf(change);
if (this.changeIndex !== -1) {
this.changeIndex = this.outputs.indexOf(changeOutput);
assert(this.changeIndex !== -1);
}
};
@ -1583,7 +1520,6 @@ function CoinSelector(tx, options) {
this.maxFee = -1;
this.round = false;
this.changeAddress = null;
this.extraOutputs = 0;
// Needed for size estimation.
this.estimate = null;
@ -1693,13 +1629,6 @@ CoinSelector.prototype.fromOptions = function fromOptions(options) {
}
}
if (options.extraOutputs != null) {
assert(typeof options.extraOutputs === 'number');
assert(options.extraOutputs >= 0);
assert(options.extraOutputs <= 100);
this.extraOutputs = options.extraOutputs;
}
if (options.estimate) {
assert(typeof options.estimate === 'function');
this.estimate = options.estimate;
@ -1893,10 +1822,6 @@ CoinSelector.prototype.selectEstimate = async function selectEstimate() {
this.tx.outputs.push(change);
// Extra change outputs.
for (let i = 0; i < this.extraOutputs; i++)
this.tx.outputs.push(change.clone());
// Keep recalculating the fee and funding
// until we reach some sort of equilibrium.
do {

View File

@ -390,7 +390,6 @@ HTTPServer.prototype.initRouter = function initRouter() {
smart: valid.bool('smart'),
subtractFee: valid.bool('subtractFee'),
depth: valid.u32(['confirmations', 'depth']),
extraOutputs: valid.u32('extraOutputs'),
outputs: []
};
@ -429,7 +428,6 @@ HTTPServer.prototype.initRouter = function initRouter() {
smart: valid.bool('smart'),
subtractFee: valid.bool('subtractFee'),
depth: valid.u32(['confirmations', 'depth']),
extraOutputs: valid.u32('extraOutputs'),
outputs: []
};

View File

@ -1397,7 +1397,6 @@ Wallet.prototype._fund = async function _fund(mtx, options) {
hardFee: options.hardFee,
subtractFee: options.subtractFee,
changeAddress: account.change.getAddress(),
extraOutputs: options.extraOutputs,
height: this.db.state.height,
rate: rate,
maxFee: options.maxFee,