Files

59 lines
1.8 KiB
Go

package lnwallet
import (
"github.com/btcsuite/btcd/btcutil"
"github.com/lightningnetwork/lnd/lnwire"
)
const (
// minRequiredConfs is the minimum number of confirmations we'll
// require for channel operations.
minRequiredConfs = 1
// maxRequiredConfs is the maximum number of confirmations we'll
// require for channel operations.
maxRequiredConfs = 6
// maxChannelSize is the maximum expected channel size in satoshis.
// This matches MaxBtcFundingAmount (0.16777215 BTC).
maxChannelSize = 16777215
)
// ScaleNumConfs returns a linearly scaled number of confirmations based on the
// provided channel amount and push amount (for funding transactions). The push
// amount represents additional risk when receiving funds.
func ScaleNumConfs(chanAmt btcutil.Amount, pushAmt lnwire.MilliSatoshi) uint16 {
// For wumbo channels, always require maximum confirmations.
if chanAmt > maxChannelSize {
return maxRequiredConfs
}
// Calculate total stake: channel amount + push amount. The push amount
// represents value at risk for the receiver.
maxChannelSizeMsat := lnwire.NewMSatFromSatoshis(maxChannelSize)
stake := lnwire.NewMSatFromSatoshis(chanAmt) + pushAmt
// Scale confirmations linearly based on stake.
conf := uint64(maxRequiredConfs) * uint64(stake) /
uint64(maxChannelSizeMsat)
// Bound the result between minRequiredConfs and maxRequiredConfs.
if conf < minRequiredConfs {
conf = minRequiredConfs
}
if conf > maxRequiredConfs {
conf = maxRequiredConfs
}
return uint16(conf)
}
// FundingConfsForAmounts returns the number of confirmations to wait for a
// funding transaction, taking into account both the channel amount and any
// pushed amount (which represents additional risk).
func FundingConfsForAmounts(chanAmt btcutil.Amount,
pushAmt lnwire.MilliSatoshi) uint16 {
return ScaleNumConfs(chanAmt, pushAmt)
}