watchtower/wtpolicy: add ComputAltruistOutput calc
This commit is contained in:
1 file changed
+38
@@ -1,8 +1,10 @@
|
|||||||
package wtpolicy
|
package wtpolicy
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/btcsuite/btcutil"
|
||||||
"github.com/lightningnetwork/lnd/lnwallet"
|
"github.com/lightningnetwork/lnd/lnwallet"
|
||||||
"github.com/lightningnetwork/lnd/watchtower/blob"
|
"github.com/lightningnetwork/lnd/watchtower/blob"
|
||||||
)
|
)
|
||||||
@@ -22,6 +24,17 @@ const (
|
|||||||
DefaultSweepFeeRate = 3000
|
DefaultSweepFeeRate = 3000
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// ErrFeeExceedsInputs signals that the total input value of breaching
|
||||||
|
// commitment txn is insufficient to cover the fees required to sweep
|
||||||
|
// it.
|
||||||
|
ErrFeeExceedsInputs = errors.New("sweep fee exceeds input value")
|
||||||
|
|
||||||
|
// ErrCreatesDust signals that the session's policy would create a dust
|
||||||
|
// output for the victim.
|
||||||
|
ErrCreatesDust = errors.New("justice transaction creates dust at fee rate")
|
||||||
|
)
|
||||||
|
|
||||||
// DefaultPolicy returns a Policy containing the default parameters that can be
|
// DefaultPolicy returns a Policy containing the default parameters that can be
|
||||||
// used by clients or servers.
|
// used by clients or servers.
|
||||||
func DefaultPolicy() Policy {
|
func DefaultPolicy() Policy {
|
||||||
@@ -71,3 +84,28 @@ func (p Policy) String() string {
|
|||||||
"sweep-fee-rate=%d)", p.BlobType, p.MaxUpdates, p.RewardRate,
|
"sweep-fee-rate=%d)", p.BlobType, p.MaxUpdates, p.RewardRate,
|
||||||
p.SweepFeeRate)
|
p.SweepFeeRate)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ComputeAltruistOutput computes the lone output value of a justice transaction
|
||||||
|
// that pays no reward to the tower. The value is computed using the weight of
|
||||||
|
// of the justice transaction and subtracting an amount that satisfies the
|
||||||
|
// policy's fee rate.
|
||||||
|
func (p *Policy) ComputeAltruistOutput(totalAmt btcutil.Amount,
|
||||||
|
txWeight int64) (btcutil.Amount, error) {
|
||||||
|
|
||||||
|
txFee := p.SweepFeeRate.FeeForWeight(txWeight)
|
||||||
|
if txFee > totalAmt {
|
||||||
|
return 0, ErrFeeExceedsInputs
|
||||||
|
}
|
||||||
|
|
||||||
|
sweepAmt := totalAmt - txFee
|
||||||
|
|
||||||
|
// TODO(conner): replace w/ configurable dust limit
|
||||||
|
dustLimit := lnwallet.DefaultDustLimit()
|
||||||
|
|
||||||
|
// Check that the created outputs won't be dusty.
|
||||||
|
if sweepAmt <= dustLimit {
|
||||||
|
return 0, ErrCreatesDust
|
||||||
|
}
|
||||||
|
|
||||||
|
return sweepAmt, nil
|
||||||
|
}
|
||||||
Reference in new issue
Block a user