lnwallet/size: correct commit to-local and 2nd stage script sizes
In this commit, we correct our size estimates for to-local scripts, which are used on the commitment transaction and the htlc success/timeout transactions. There have been observed cases of transactions getting stuck because our estimates were too low, and cause the transactions to not be relayed. Our previous estimate for the commitment to-local script was derived from an older version of the script. Though the estimate is greater than the actual size, this has been updated with the current estimate of 79 bytes. This estimates makes the assumption that CSV delays will be at most 4 bytes when serialized. Since this value is expressed in relative block heights, this should be more than sufficient for our needs, even though the maximum possible size for the little-endian int64 is 9 bytes (plus an OP_DATA). The other correction is to use the ToLocalScriptSize as our estimate for htlc timeout/success scripts, as they are the same script. Previously, our estimate was derived from the proper script, though we were 6 bytes shy of the new to-local estimate, since we counted the csv_delay as 1 byte, and missed some other OP_DATAs. All derived estimates have been updating depending on the new and improved ToLocalScriptSize estimate, and fix some estimates that did not include the witness length in the estimate. Finally, we correct some weight miscalculations in: - AcceptedHtlcTimeoutWitnessSize: missing data push lengths - OfferedHtlcSuccessWitnessSize: extra 73 byte sig, missing data push lengths - OfferedHtlcPenaltyWitnessSize: missing 33 byte pubkey
This commit is contained in:
parent
e0baa49690
commit
ee2f2573c1
@ -186,22 +186,22 @@ const (
|
||||
// weight limits.
|
||||
MaxHTLCNumber = 966
|
||||
|
||||
// ToLocalScriptSize 83 bytes
|
||||
// ToLocalScriptSize 79 bytes
|
||||
// - OP_IF: 1 byte
|
||||
// - OP_DATA: 1 byte (revocationkey length)
|
||||
// - revocationkey: 33 bytes
|
||||
// - OP_CHECKSIG: 1 byte
|
||||
// - OP_DATA: 1 byte
|
||||
// - revoke_key: 33 bytes
|
||||
// - OP_ELSE: 1 byte
|
||||
// - OP_DATA: 1 byte (localkey length)
|
||||
// - local_delay_key: 33 bytes
|
||||
// - OP_CHECKSIG_VERIFY: 1 byte
|
||||
// - OP_DATA: 1 byte (delay length)
|
||||
// - delay: 8 bytes
|
||||
// -OP_CHECKSEQUENCEVERIFY: 1 byte
|
||||
// - OP_DATA: 1 byte
|
||||
// - csv_delay: 4 bytes
|
||||
// - OP_CHECKSEQUENCEVERIFY: 1 byte
|
||||
// - OP_DROP: 1 byte
|
||||
// - OP_DATA: 1 byte
|
||||
// - delay_key: 33 bytes
|
||||
// - OP_ENDIF: 1 byte
|
||||
ToLocalScriptSize = 1 + 1 + 33 + 1 + 1 + 1 + 33 + 1 + 1 + 8 + 1 + 1
|
||||
// - OP_CHECKSIG: 1 byte
|
||||
ToLocalScriptSize = 1 + 1 + 33 + 1 + 1 + 4 + 1 + 1 + 1 + 33 + 1 + 1
|
||||
|
||||
// ToLocalTimeoutWitnessSize x bytes
|
||||
// ToLocalTimeoutWitnessSize 156 bytes
|
||||
// - number_of_witness_elements: 1 byte
|
||||
// - local_delay_sig_length: 1 byte
|
||||
// - local_delay_sig: 73 bytes
|
||||
@ -210,44 +210,15 @@ const (
|
||||
// - witness_script (to_local_script)
|
||||
ToLocalTimeoutWitnessSize = 1 + 1 + 73 + 1 + 1 + ToLocalScriptSize
|
||||
|
||||
// ToLocalPenaltyWitnessSize 160 bytes
|
||||
// ToLocalPenaltyWitnessSize 156 bytes
|
||||
// - number_of_witness_elements: 1 byte
|
||||
// - revocation_sig_length: 1 byte
|
||||
// - revocation_sig: 73 bytes
|
||||
// - one_length: 1 byte
|
||||
// - OP_TRUE: 1 byte
|
||||
// - witness_script_length: 1 byte
|
||||
// - witness_script (to_local_script)
|
||||
ToLocalPenaltyWitnessSize = 1 + 1 + 73 + 1 + 1 + ToLocalScriptSize
|
||||
|
||||
// SecondLevelHtlcScriptSize 73 bytes
|
||||
// - OP_IF: 1 byte
|
||||
// - OP_DATA: 1 byte
|
||||
// - revoke_key: 33 bytes
|
||||
// - OP_ELSE: 1 byte
|
||||
// - csv_delay: 1 byte
|
||||
// - OP_CHECKSEQUENCEVERIFY: 1 byte
|
||||
// - OP_DROP: 1 byte
|
||||
// - delay_key: 33 bytes
|
||||
// - OP_ENDIF: 1 byte
|
||||
// - OP_CHECKSIG: 1 byte
|
||||
SecondLevelHtlcScriptSize = 73
|
||||
|
||||
// SecondLevelHtlcPenaltyWitnessSize 149 bytes
|
||||
// - number_of_witness_elements: 1 byte
|
||||
// - revoke_sig_length: 1 byte
|
||||
// - revoke_sig: 73 bytes
|
||||
// - OP_TRUE: 1 byte
|
||||
// - witness_script (second_level_script_size)
|
||||
SecondLevelHtlcPenaltyWitnessSize = 1 + 1 + 73 + 1 + SecondLevelHtlcScriptSize
|
||||
|
||||
// SecondLevelHtlcSuccessWitnessSize 149 bytes
|
||||
// - number_of_witness_elements: 1 byte
|
||||
// - success_sig_length: 1 byte
|
||||
// - success_sig: 73 bytes
|
||||
// - nil_length: 1 byte
|
||||
// - witness_script (second_level_script_size)
|
||||
SecondLevelHtlcSuccessWitnessSize = 1 + 1 + 73 + 1 + SecondLevelHtlcScriptSize
|
||||
|
||||
// AcceptedHtlcScriptSize 139 bytes
|
||||
// - OP_DUP: 1 byte
|
||||
// - OP_HASH160: 1 byte
|
||||
@ -286,14 +257,16 @@ const (
|
||||
AcceptedHtlcScriptSize = 3*1 + 20 + 5*1 + 33 + 7*1 + 20 + 4*1 +
|
||||
33 + 5*1 + 4 + 5*1
|
||||
|
||||
// AcceptedHtlcTimeoutWitnessSize 214
|
||||
// AcceptedHtlcTimeoutWitnessSize 216
|
||||
// - number_of_witness_elements: 1 byte
|
||||
// - sender_sig_length: 1 byte
|
||||
// - sender_sig: 73 bytes
|
||||
// - nil_length: 1 byte
|
||||
// - witness_script_length: 1 byte
|
||||
// - witness_script: (accepted_htlc_script)
|
||||
AcceptedHtlcTimeoutWitnessSize = 1 + 73 + 1 + AcceptedHtlcScriptSize
|
||||
AcceptedHtlcTimeoutWitnessSize = 1 + 1 + 73 + 1 + 1 + AcceptedHtlcScriptSize
|
||||
|
||||
// AcceptedHtlcSuccessWitnessSize 325 bytes
|
||||
// AcceptedHtlcSuccessWitnessSize 322 bytes
|
||||
// - number_of_witness_elements: 1 byte
|
||||
// - nil_length: 1 byte
|
||||
// - sig_alice_length: 1 byte
|
||||
@ -362,15 +335,18 @@ const (
|
||||
// - witness_script (offered_htlc_script)
|
||||
OfferedHtlcTimeoutWitnessSize = 1 + 1 + 1 + 73 + 1 + 73 + 1 + 1 + OfferedHtlcScriptSize
|
||||
|
||||
// OfferedHtlcSuccessWitnessSize 283 bytes
|
||||
// OfferedHtlcSuccessWitnessSize 317 bytes
|
||||
// - number_of_witness_elements: 1 byte
|
||||
// - nil_length: 1 byte
|
||||
// - receiver_sig_length: 1 byte
|
||||
// - receiver_sig: 73 bytes
|
||||
// - sender_sigs: 73 bytes
|
||||
// - sender_sig_length: 1 byte
|
||||
// - sender_sig: 73 bytes
|
||||
// - payment_preimage_length: 1 byte
|
||||
// - payment_preimage: 32 bytes
|
||||
// - witness_script_length: 1 byte
|
||||
// - witness_script (offered_htlc_script)
|
||||
OfferedHtlcSuccessWitnessSize = 1 + 1 + 73 + 73 + 73 + 32 + 1 + OfferedHtlcScriptSize
|
||||
OfferedHtlcSuccessWitnessSize = 1 + 1 + 1 + 73 + 1 + 73 + 1 + 32 + 1 + OfferedHtlcScriptSize
|
||||
|
||||
// OfferedHtlcPenaltyWitnessSize 243 bytes
|
||||
// - number_of_witness_elements: 1 byte
|
||||
@ -380,7 +356,7 @@ const (
|
||||
// - revocation_key: 33 bytes
|
||||
// - witness_script_length: 1 byte
|
||||
// - witness_script (offered_htlc_script)
|
||||
OfferedHtlcPenaltyWitnessSize = 1 + 1 + 73 + 1 + 1 + OfferedHtlcScriptSize
|
||||
OfferedHtlcPenaltyWitnessSize = 1 + 1 + 73 + 1 + 33 + 1 + OfferedHtlcScriptSize
|
||||
)
|
||||
|
||||
// estimateCommitTxWeight estimate commitment transaction weight depending on
|
||||
|
Loading…
Reference in New Issue
Block a user