Skip to content

Commit 81ee925

Browse files
committed
tapfreighter: bump feerate to min relay fee
If the fee estimation returns a fee rate lower than the min relay fee, we should use the min relay fee instead. This commit implements this behavior for the tapfreighter.
1 parent ebd15f2 commit 81ee925

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

tapfreighter/chain_porter.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1137,6 +1137,42 @@ func (p *ChainPorter) stateStep(currentPkg sendPackage) (*sendPackage, error) {
11371137
return nil, fmt.Errorf("unable to estimate "+
11381138
"fee: %w", err)
11391139
}
1140+
1141+
log.Infof("estimated fee rate for parcel:, %s",
1142+
feeRate.FeePerKVByte().String())
1143+
}
1144+
1145+
minRelayFee, err := p.cfg.Wallet.MinRelayFee(ctx)
1146+
if err != nil {
1147+
p.unlockInputs(ctx, &currentPkg)
1148+
1149+
return nil, fmt.Errorf("unable to obtain "+
1150+
"minimum relay fee: %w", err)
1151+
}
1152+
1153+
// If the fee rate is below the minimum relay fee, we'll
1154+
// bump it up.
1155+
if feeRate < minRelayFee {
1156+
switch {
1157+
// If a fee rate was manually assigned for this parcel,
1158+
// we err out, otherwise we silently bump the feerate.
1159+
case addrParcel.transferFeeRate != nil:
1160+
// This case should already have been handled by
1161+
// the `checkFeeRateSanity` of `rpcserver.go`.
1162+
// We check here again to be safe.
1163+
p.unlockInputs(ctx, &currentPkg)
1164+
1165+
return nil, fmt.Errorf("feerate does not "+
1166+
"meet minrelayfee: (fee_rate=%s, "+
1167+
"minrelayfee=%s)", feeRate.String(),
1168+
minRelayFee.String())
1169+
default:
1170+
log.Infof("bump fee rate for parcel to meet "+
1171+
"minrelayfee from %s to %s",
1172+
feeRate.FeePerKVByte().String(),
1173+
minRelayFee.FeePerKVByte().String())
1174+
feeRate = minRelayFee
1175+
}
11401176
}
11411177

11421178
readableFeeRate := feeRate.FeePerKVByte().String()

0 commit comments

Comments
 (0)