Browse Source

allow configuration of fee per kb

patch-2
Ivan Socolsky 10 years ago
parent
commit
0e6aec1c94
  1. 23
      lib/transaction/transaction.js

23
lib/transaction/transaction.js

@ -634,6 +634,21 @@ Transaction.prototype.fee = function(amount) {
return this; return this;
}; };
/**
* Manually set the fee per KB for this transaction. Beware that this resets all the signatures
* for inputs (in further versions, SIGHASH_SINGLE or SIGHASH_NONE signatures will not
* be reset).
*
* @param {number} amount satoshis per KB to be sent
* @return {Transaction} this, for chaining
*/
Transaction.prototype.feePerKb = function(amount) {
$.checkArgument(_.isNumber(amount), 'amount must be a number');
this._feePerKb = amount;
this._updateChangeOutput();
return this;
};
/* Output management */ /* Output management */
/** /**
@ -831,7 +846,7 @@ Transaction.prototype.getFee = function() {
Transaction.prototype._estimateFee = function() { Transaction.prototype._estimateFee = function() {
var estimatedSize = this._estimateSize(); var estimatedSize = this._estimateSize();
var available = this._getUnspentValue(); var available = this._getUnspentValue();
return Transaction._estimateFee(estimatedSize, available); return Transaction._estimateFee(estimatedSize, available, this._feePerKb);
}; };
Transaction.prototype._getUnspentValue = function() { Transaction.prototype._getUnspentValue = function() {
@ -844,12 +859,12 @@ Transaction.prototype._clearSignatures = function() {
}); });
}; };
Transaction._estimateFee = function(size, amountAvailable) { Transaction._estimateFee = function(size, amountAvailable, feePerKb) {
var fee = Math.ceil(size / 1000) * Transaction.FEE_PER_KB; var fee = Math.ceil(size / 1000) * (feePerKb || Transaction.FEE_PER_KB);
if (amountAvailable > fee) { if (amountAvailable > fee) {
size += Transaction.CHANGE_OUTPUT_MAX_SIZE; size += Transaction.CHANGE_OUTPUT_MAX_SIZE;
} }
return Math.ceil(size / 1000) * Transaction.FEE_PER_KB; return Math.ceil(size / 1000) * (feePerKb || Transaction.FEE_PER_KB);
}; };
Transaction.prototype._estimateSize = function() { Transaction.prototype._estimateSize = function() {

Loading…
Cancel
Save