dust threshold. misc.

This commit is contained in:
Christopher Jeffrey 2016-06-20 03:16:23 -07:00
parent cc22e97dae
commit 5e330c513e
No known key found for this signature in database
GPG Key ID: 8962AB9DE6666BBD
2 changed files with 41 additions and 41 deletions

View File

@ -178,6 +178,7 @@ Output.prototype.toJSON = function toJSON() {
*/
Output.prototype.getDustThreshold = function getDustThreshold(rate) {
var scale = constants.WITNESS_SCALE_FACTOR;
var size;
if (rate == null)
@ -186,7 +187,14 @@ Output.prototype.getDustThreshold = function getDustThreshold(rate) {
if (this.script.isUnspendable())
return 0;
size = this.getSize() + 148;
size = this.getSize();
if (this.script.isProgram()) {
// 75% segwit discount applied to script size.
size += 32 + 4 + 1 + (107 / scale | 0) + 4;
} else {
size += 32 + 4 + 1 + 107 + 4;
}
return 3 * bcoin.tx.getMinFee(size, rate);
};

View File

@ -45,6 +45,14 @@ function Witness(options) {
this.fromOptions(options);
}
Witness.prototype.__defineGetter__('length', function() {
return this.items.length;
});
Witness.prototype.__defineSetter__('length', function(length) {
return this.items.length = length;
});
/**
* Inject properties from options object.
* @private
@ -435,14 +443,6 @@ Witness.prototype.set = function set(i, data) {
this.items[i] = Witness.encodeItem(data);
};
Witness.prototype.__defineGetter__('length', function() {
return this.items.length;
});
Witness.prototype.__defineSetter__('length', function(length) {
return this.items.length = length;
});
/**
* Encode a witness item.
* @param {Number|String|Buffer|BN} data
@ -576,6 +576,14 @@ function Stack(items) {
this.items = items || [];
}
Stack.prototype.__defineGetter__('length', function() {
return this.items.length;
});
Stack.prototype.__defineSetter__('length', function(length) {
return this.items.length = length;
});
/**
* Inspect the stack.
* @returns {String} Human-readable stack.
@ -604,14 +612,6 @@ Stack.prototype.toASM = function toASM(decode) {
return Script.formatASM(this.items, decode);
};
Stack.prototype.__defineGetter__('length', function() {
return this.items.length;
});
Stack.prototype.__defineSetter__('length', function(length) {
return this.items.length = length;
});
/**
* Pop the redeem script off the stack and deserialize it.
* @returns {Script|null} The redeem script.
@ -746,6 +746,13 @@ Stack.prototype.set = function set(i, value) {
return this.items[i] = value;
};
/**
* Swap stack values.
* @private
* @param {Number} i1 - Index 1.
* @param {Number} i2 - Index 2.
*/
Stack.prototype._swap = function _swap(i1, i2) {
var v1, v2;
@ -795,7 +802,7 @@ Stack.prototype.ifdup = function ifdup() {
throw new ScriptError('INVALID_STACK_OPERATION', opcodes.OP_IFDUP);
if (Script.bool(this.top(-1)))
this.push(Script.array(this.top(-1)));
this.push(this.top(-1));
};
/**
@ -1090,6 +1097,14 @@ function Script(options) {
this.fromOptions(options);
}
Script.prototype.__defineGetter__('length', function() {
return this.code.length;
});
Script.prototype.__defineSetter__('length', function(length) {
return this.code.length = length;
});
/**
* Inject properties from options object.
* @private
@ -3309,14 +3324,6 @@ Script.prototype.set = function set(i, data) {
this.code[i] = Opcode.from(data);
};
Script.prototype.__defineGetter__('length', function() {
return this.code.length;
});
Script.prototype.__defineSetter__('length', function(length) {
return this.code.length = length;
});
/**
* Test whether the data element is a ripemd160 hash.
* @param {Buffer?} hash
@ -3939,21 +3946,6 @@ Script.getSmall = function getSmall(op) {
return -1;
};
/**
* Convert a number to a small integer (OP_0-OP_16).
* @param {Number} num
* @returns {Number} opcode
*/
Script.toSmall = function toSmall(op) {
assert(op >= 0 && op <= 16);
if (op === 0)
return opcodes.OP_0;
return op + 0x50;
};
/**
* Verify an input and output script, and a witness if present.
* @param {Script} input