Skip to content

Commit 44e165d

Browse files
author
Arik Sosman
committed
enforcing instant minimum fee rate for instant transactions
Reviewers: benchan, jameson Reviewed By: jameson Subscribers: ben Differential Revision: https://phabricator.bitgo.com/D6011
1 parent efd1699 commit 44e165d

File tree

3 files changed

+30
-25
lines changed

3 files changed

+30
-25
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "bitgo",
3-
"version": "3.4.6",
3+
"version": "3.4.7",
44
"description": "BitGo Javascript SDK",
55
"main": "./src/index.js",
66
"keywords": [

src/bitgo.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1488,6 +1488,7 @@ BitGo.prototype.getConstants = function(params) {
14881488
minFeeRate: 5000,
14891489
fallbackFeeRate: 50000,
14901490
minOutputSize: 2730,
1491+
minInstantFeeRate: 10000,
14911492
bitgoEthAddress: '0x0f47ea803926926f299b7f1afc8460888d850f47'
14921493
};
14931494

src/transactionBuilder.js

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -223,30 +223,34 @@ exports.createTransaction = function(params) {
223223
txSize: estTxSize,
224224
cpfpAware: true
225225
})
226-
.then(function(result) {
227-
var estimatedFeeRate = result.cpfpFeePerKb;
228-
if (estimatedFeeRate < constants.minFeeRate) {
229-
console.log(new Date() + ': Error when estimating fee for send from ' + params.wallet.id() + ', it was too low - ' + estimatedFeeRate);
230-
feeRate = constants.minFeeRate;
231-
} else if (estimatedFeeRate > params.maxFeeRate) {
232-
feeRate = params.maxFeeRate;
233-
} else {
234-
feeRate = estimatedFeeRate;
235-
}
236-
return feeRate;
237-
})
238-
.catch(function(e) {
239-
// sanity check failed on tx size
240-
if (_.includes(e.message, 'invalid txSize')) {
241-
return Q.reject(e);
242-
}
243-
else {
244-
// couldn't estimate the fee, proceed using the default
245-
feeRate = constants.fallbackFeeRate;
246-
console.log("Error estimating fee for send from " + params.wallet.id() + ": " + e.message);
247-
return Q();
248-
}
249-
});
226+
.then(function(result) {
227+
var estimatedFeeRate = result.cpfpFeePerKb;
228+
var minimum = params.instant ? Math.max(constants.minFeeRate, constants.minInstantFeeRate) : constants.minFeeRate;
229+
// 5 satoshis per byte
230+
// it is worth noting that the padding only applies when the threshold is crossed, but not when the delta is less than the padding
231+
var padding = 5000;
232+
if (estimatedFeeRate < minimum) {
233+
console.log(new Date() + ': Error when estimating fee for send from ' + params.wallet.id() + ', it was too low - ' + estimatedFeeRate);
234+
feeRate = minimum + padding;
235+
} else if (estimatedFeeRate > params.maxFeeRate) {
236+
feeRate = params.maxFeeRate - padding;
237+
} else {
238+
feeRate = estimatedFeeRate;
239+
}
240+
return feeRate;
241+
})
242+
.catch(function(e) {
243+
// sanity check failed on tx size
244+
if (_.includes(e.message, 'invalid txSize')) {
245+
return Q.reject(e);
246+
}
247+
else {
248+
// couldn't estimate the fee, proceed using the default
249+
feeRate = constants.fallbackFeeRate;
250+
console.log("Error estimating fee for send from " + params.wallet.id() + ": " + e.message);
251+
return Q();
252+
}
253+
});
250254
}
251255
};
252256

0 commit comments

Comments
 (0)