input+sweep: let weightestimator take known TxOut
This commit is contained in:
parent
efd6bc9501
commit
3d209059c1
@ -533,6 +533,14 @@ func (twe *TxWeightEstimator) AddNestedP2WSHInput(witnessSize int) *TxWeightEsti
|
|||||||
return twe
|
return twe
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AddTxOutput adds a known TxOut to the weight estimator.
|
||||||
|
func (twe *TxWeightEstimator) AddTxOutput(txOut *wire.TxOut) *TxWeightEstimator {
|
||||||
|
twe.outputSize += txOut.SerializeSize()
|
||||||
|
twe.outputCount++
|
||||||
|
|
||||||
|
return twe
|
||||||
|
}
|
||||||
|
|
||||||
// AddP2PKHOutput updates the weight estimate to account for an additional P2PKH
|
// AddP2PKHOutput updates the weight estimate to account for an additional P2PKH
|
||||||
// output.
|
// output.
|
||||||
func (twe *TxWeightEstimator) AddP2PKHOutput() *TxWeightEstimator {
|
func (twe *TxWeightEstimator) AddP2PKHOutput() *TxWeightEstimator {
|
||||||
|
@ -2,6 +2,7 @@ package sweep
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||||
|
"github.com/btcsuite/btcd/wire"
|
||||||
"github.com/btcsuite/btcutil"
|
"github.com/btcsuite/btcutil"
|
||||||
"github.com/lightningnetwork/lnd/input"
|
"github.com/lightningnetwork/lnd/input"
|
||||||
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
|
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
|
||||||
@ -92,6 +93,12 @@ func (w *weightEstimator) addP2WKHOutput() {
|
|||||||
w.estimator.AddP2WKHOutput()
|
w.estimator.AddP2WKHOutput()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// addOutput updates the weight estimate to account for the known
|
||||||
|
// output given.
|
||||||
|
func (w *weightEstimator) addOutput(txOut *wire.TxOut) {
|
||||||
|
w.estimator.AddTxOutput(txOut)
|
||||||
|
}
|
||||||
|
|
||||||
// weight gets the estimated weight of the transaction.
|
// weight gets the estimated weight of the transaction.
|
||||||
func (w *weightEstimator) weight() int {
|
func (w *weightEstimator) weight() int {
|
||||||
return w.estimator.Weight()
|
return w.estimator.Weight()
|
||||||
|
@ -3,7 +3,10 @@ package sweep
|
|||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/btcsuite/btcd/chaincfg"
|
||||||
|
"github.com/btcsuite/btcd/txscript"
|
||||||
"github.com/btcsuite/btcd/wire"
|
"github.com/btcsuite/btcd/wire"
|
||||||
|
"github.com/btcsuite/btcutil"
|
||||||
"github.com/lightningnetwork/lnd/input"
|
"github.com/lightningnetwork/lnd/input"
|
||||||
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
|
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
@ -77,3 +80,32 @@ func TestWeightEstimator(t *testing.T) {
|
|||||||
|
|
||||||
require.Equal(t, expectedFee, w.fee())
|
require.Equal(t, expectedFee, w.fee())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TestWeightEstimatorAddOutput tests that adding the raw P2WKH output to the
|
||||||
|
// estimator yield the same result as an estimated add.
|
||||||
|
func TestWeightEstimatorAddOutput(t *testing.T) {
|
||||||
|
testFeeRate := chainfee.SatPerKWeight(20000)
|
||||||
|
|
||||||
|
p2wkhAddr, err := btcutil.NewAddressWitnessPubKeyHash(
|
||||||
|
make([]byte, 20), &chaincfg.MainNetParams,
|
||||||
|
)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
p2wkhScript, err := txscript.PayToAddrScript(p2wkhAddr)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
// Create two estimators, add the raw P2WKH out to one.
|
||||||
|
txOut := &wire.TxOut{
|
||||||
|
PkScript: p2wkhScript,
|
||||||
|
Value: 10000,
|
||||||
|
}
|
||||||
|
|
||||||
|
w1 := newWeightEstimator(testFeeRate)
|
||||||
|
w1.addOutput(txOut)
|
||||||
|
|
||||||
|
w2 := newWeightEstimator(testFeeRate)
|
||||||
|
w2.addP2WKHOutput()
|
||||||
|
|
||||||
|
// Estimate hhould be the same.
|
||||||
|
require.Equal(t, w1.weight(), w2.weight())
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user