Skip to content

Commit 3fa652d

Browse files
authored
Merge pull request #10 from BoostyLabs/vs/estimation_fix
p2wpkh witness size fixed
2 parents 210b4a1 + 80f3144 commit 3fa652d

2 files changed

Lines changed: 52 additions & 2 deletions

File tree

bitcoin/txbuilder/fees.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func NewDefaultPaymentDataFees(address btcutil.Address) (*PaymentDataFees, error
4343
case *btcutil.AddressScriptHash:
4444
inputSizeVByte, witnessSizeVBytes, outputSizeVBytes = 43, 254, 32
4545
case *btcutil.AddressWitnessPubKeyHash:
46-
inputSizeVByte, witnessSizeVBytes, outputSizeVBytes = 41, 27, 31
46+
inputSizeVByte, witnessSizeVBytes, outputSizeVBytes = 41, 36, 31
4747
case *btcutil.AddressWitnessScriptHash:
4848
inputSizeVByte, witnessSizeVBytes, outputSizeVBytes = 41, 64, 43
4949
case *btcutil.AddressTaproot:

bitcoin/txbuilder/fees_test.go

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func TestNewDefaultPaymentDataFees(t *testing.T) {
4343
{
4444
name: "P2WPKH",
4545
address: btcutilAddress(t, "bc1qhl00zlummcd9zc5ppu3klmnp4m7slkuvuq4lz0", chainParams),
46-
sum: 99,
46+
sum: 108,
4747
},
4848
{
4949
name: "P2WSH",
@@ -81,6 +81,56 @@ func TestNewDefaultPaymentDataFees(t *testing.T) {
8181
}
8282
}
8383

84+
func TestTxSizeEstimation(t *testing.T) {
85+
params := &chaincfg.MainNetParams
86+
bridge, err := txbuilder.NewDefaultPaymentDataFees(btcutilAddress(t, "bc1pvep2j3hym7tp69zyd3pwhe7a7exztrtg6wwhdd66fwx2ewfwag7qgawmug", params))
87+
require.NoError(t, err)
88+
89+
bridge.WitnessSizeVBytes.SetInt64(92) // INFO: Not standard script.
90+
91+
sender, err := txbuilder.NewDefaultPaymentDataFees(btcutilAddress(t, "bc1p9spaecu0aszezcs2f48uk0fxcqgxry0menjn8jwjnv9pjmsew09s3j36k8", params))
92+
require.NoError(t, err)
93+
94+
feePayer, err := txbuilder.NewDefaultPaymentDataFees(btcutilAddress(t, "bc1qhl00zlummcd9zc5ppu3klmnp4m7slkuvuq4lz0", params))
95+
require.NoError(t, err)
96+
97+
commission, err := txbuilder.NewDefaultPaymentDataFees(btcutilAddress(t, "33qK7XqdJ3v5ySvnN9PugSRZsK2ahL5U1B", params))
98+
require.NoError(t, err)
99+
100+
tests := []struct {
101+
RoughTxSize *txbuilder.RoughTxSize
102+
Estimation int
103+
}{
104+
{
105+
RoughTxSize: &txbuilder.RoughTxSize{
106+
IncludeHeader: true,
107+
Elements: []*txbuilder.EstimationElement{
108+
{PaymentDataFees: bridge, InputsNumber: 6, OutputsNumber: 2},
109+
{PaymentDataFees: sender, InputsNumber: 1, OutputsNumber: 0},
110+
},
111+
ExtraExpenses: big.NewInt(17),
112+
},
113+
Estimation: 970,
114+
},
115+
{
116+
RoughTxSize: &txbuilder.RoughTxSize{
117+
IncludeHeader: true,
118+
Elements: []*txbuilder.EstimationElement{
119+
{PaymentDataFees: bridge, InputsNumber: 0, OutputsNumber: 1},
120+
{PaymentDataFees: sender, InputsNumber: 1, OutputsNumber: 1},
121+
{PaymentDataFees: feePayer, InputsNumber: 1, OutputsNumber: 1},
122+
{PaymentDataFees: commission, InputsNumber: 0, OutputsNumber: 1},
123+
},
124+
ExtraExpenses: big.NewInt(17),
125+
},
126+
Estimation: 312,
127+
},
128+
}
129+
for _, test := range tests {
130+
require.EqualValues(t, test.Estimation, test.RoughTxSize.Estimate().Int64())
131+
}
132+
}
133+
84134
func btcutilAddress(t *testing.T, address string, params *chaincfg.Params) btcutil.Address {
85135
addr, err := btcutil.DecodeAddress(address, params)
86136
require.NoError(t, err)

0 commit comments

Comments
 (0)