c1b9b272cd
This commit introduces a new test case that asserts all of the witness size constants currently in the codebase. We also reintroduce the AcceptedHtlcSuccessWitnessSize and OfferedHtlcTimeoutWitnessSize constants that were recently removed for the sake of completeness. In asserting the witnes sizes, there were three uncovered discrepancies: * OfferedHtlcSuccessWitnessSize overestimated by about 30% because it included an extra signature in the calculation. * ToLocalPenaltyWitnessSize was underestimated by one byte, because it was missing the length byte for the OP_TRUE. This has implications the watchtower protocol since the client and server are assumed to share the same weight estimates used for signing. This commit keeps the current behavior, with the intention of rolling out negotiation for which weight estimate to use for a given session. * AcceptedHtlcScriptSize was underestimated by one byte because it was missing a length byte for the value 32 pushed on the stack when asserting the preimage's length. This affects all AcceptedHtlc* witness sizes.
53 lines
1.6 KiB
Go
53 lines
1.6 KiB
Go
package sweep
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
|
"github.com/btcsuite/btcd/wire"
|
|
"github.com/lightningnetwork/lnd/input"
|
|
)
|
|
|
|
var (
|
|
witnessTypes = []input.WitnessType{
|
|
input.CommitmentTimeLock,
|
|
input.HtlcAcceptedSuccessSecondLevel,
|
|
input.HtlcOfferedRemoteTimeout,
|
|
input.WitnessKeyHash,
|
|
}
|
|
expectedWeight = int64(1463)
|
|
expectedSummary = "0000000000000000000000000000000000000000000000000000000000000000:10 (CommitmentTimeLock), " +
|
|
"0000000000000000000000000000000000000000000000000000000000000001:11 (HtlcAcceptedSuccessSecondLevel), " +
|
|
"0000000000000000000000000000000000000000000000000000000000000002:12 (HtlcOfferedRemoteTimeout), " +
|
|
"0000000000000000000000000000000000000000000000000000000000000003:13 (WitnessKeyHash)"
|
|
)
|
|
|
|
// TestWeightEstimate tests that the estimated weight and number of CSVs/CLTVs
|
|
// used is correct for a transaction that uses inputs with the witness types
|
|
// defined in witnessTypes.
|
|
func TestWeightEstimate(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
var inputs []input.Input
|
|
for i, witnessType := range witnessTypes {
|
|
inputs = append(inputs, input.NewBaseInput(
|
|
&wire.OutPoint{
|
|
Hash: chainhash.Hash{byte(i)},
|
|
Index: uint32(i) + 10,
|
|
}, witnessType,
|
|
&input.SignDescriptor{}, 0,
|
|
))
|
|
}
|
|
|
|
_, weight := getWeightEstimate(inputs)
|
|
if weight != expectedWeight {
|
|
t.Fatalf("unexpected weight. expected %d but got %d.",
|
|
expectedWeight, weight)
|
|
}
|
|
summary := inputTypeSummary(inputs)
|
|
if summary != expectedSummary {
|
|
t.Fatalf("unexpected summary. expected %s but got %s.",
|
|
expectedSummary, summary)
|
|
}
|
|
}
|