Skip to content

Commit

Permalink
lnwallet+rpcserver: fix weight calculation for taproot channels
Browse files Browse the repository at this point in the history
  • Loading branch information
yyforyongyu committed Sep 28, 2023
1 parent bee94a8 commit 80fddc3
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 4 deletions.
10 changes: 8 additions & 2 deletions lnwallet/channel.go
Original file line number Diff line number Diff line change
Expand Up @@ -3027,11 +3027,17 @@ func (lc *LightningChannel) fetchCommitmentView(remoteChain bool,
}
fee := lc.channelState.Capacity - totalOut

var witnessWeight int64
if lc.channelState.ChanType.IsTaproot() {
witnessWeight = input.TaprootKeyPathWitnessSize
} else {
witnessWeight = input.WitnessCommitmentTxWeight
}

// Since the transaction is not signed yet, we use the witness weight
// used for weight calculation.
uTx := btcutil.NewTx(commitTx.txn)
weight := blockchain.GetTransactionWeight(uTx) +
input.WitnessCommitmentTxWeight
weight := blockchain.GetTransactionWeight(uTx) + witnessWeight

effFeeRate := chainfee.SatPerKWeight(fee) * 1000 /
chainfee.SatPerKWeight(weight)
Expand Down
18 changes: 16 additions & 2 deletions rpcserver.go
Original file line number Diff line number Diff line change
Expand Up @@ -3476,10 +3476,17 @@ func (r *rpcServer) fetchPendingOpenChannels() (pendingOpenChannels, error) {
// broadcast.
// TODO(roasbeef): query for funding tx from wallet, display
// that also?
var witnessWeight int64
if pendingChan.ChanType.IsTaproot() {
witnessWeight = input.TaprootKeyPathWitnessSize
} else {
witnessWeight = input.WitnessCommitmentTxWeight
}

localCommitment := pendingChan.LocalCommitment
utx := btcutil.NewTx(localCommitment.CommitTx)
commitBaseWeight := blockchain.GetTransactionWeight(utx)
commitWeight := commitBaseWeight + input.WitnessCommitmentTxWeight
commitWeight := commitBaseWeight + witnessWeight

// FundingExpiryBlocks is the distance from the current block
// height to the broadcast height + MaxWaitNumBlocksFundingConf.
Expand Down Expand Up @@ -4227,10 +4234,17 @@ func createRPCOpenChannel(r *rpcServer, dbChannel *channeldb.OpenChannel,
// estimated weight of the witness to calculate the weight of
// the transaction if it were to be immediately unilaterally
// broadcast.
var witnessWeight int64
if dbChannel.ChanType.IsTaproot() {
witnessWeight = input.TaprootKeyPathWitnessSize
} else {
witnessWeight = input.WitnessCommitmentTxWeight
}

localCommit := dbChannel.LocalCommitment
utx := btcutil.NewTx(localCommit.CommitTx)
commitBaseWeight := blockchain.GetTransactionWeight(utx)
commitWeight := commitBaseWeight + input.WitnessCommitmentTxWeight
commitWeight := commitBaseWeight + witnessWeight

localBalance := localCommit.LocalBalance
remoteBalance := localCommit.RemoteBalance
Expand Down

0 comments on commit 80fddc3

Please sign in to comment.