Merge pull request #1617 from cfromknecht/to-local-script-size

lnwallet/size: correct commit to-local and 2nd stage script/witness sizes
This commit is contained in:
Olaoluwa Osuntokun 2018-07-25 17:16:15 -07:00 committed by GitHub
commit 8cd6eebadc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 83 additions and 107 deletions

@ -8,17 +8,17 @@ import (
"sync" "sync"
"sync/atomic" "sync/atomic"
"github.com/btcsuite/btcd/blockchain"
"github.com/btcsuite/btcd/chaincfg/chainhash"
"github.com/btcsuite/btcd/txscript"
"github.com/btcsuite/btcd/wire"
"github.com/btcsuite/btcutil"
"github.com/coreos/bbolt" "github.com/coreos/bbolt"
"github.com/davecgh/go-spew/spew" "github.com/davecgh/go-spew/spew"
"github.com/lightningnetwork/lnd/chainntnfs" "github.com/lightningnetwork/lnd/chainntnfs"
"github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/htlcswitch" "github.com/lightningnetwork/lnd/htlcswitch"
"github.com/lightningnetwork/lnd/lnwallet" "github.com/lightningnetwork/lnd/lnwallet"
"github.com/btcsuite/btcd/blockchain"
"github.com/btcsuite/btcd/chaincfg/chainhash"
"github.com/btcsuite/btcd/txscript"
"github.com/btcsuite/btcd/wire"
"github.com/btcsuite/btcutil"
) )
var ( var (
@ -993,7 +993,7 @@ func (b *breachArbiter) createJusticeTx(
witnessWeight = lnwallet.AcceptedHtlcPenaltyWitnessSize witnessWeight = lnwallet.AcceptedHtlcPenaltyWitnessSize
case lnwallet.HtlcSecondLevelRevoke: case lnwallet.HtlcSecondLevelRevoke:
witnessWeight = lnwallet.SecondLevelHtlcPenaltyWitnessSize witnessWeight = lnwallet.ToLocalPenaltyWitnessSize
default: default:
brarLog.Warnf("breached output in retribution info "+ brarLog.Warnf("breached output in retribution info "+

@ -143,8 +143,8 @@ const (
WitnessHeaderSize = 1 + 1 WitnessHeaderSize = 1 + 1
// BaseTxSize 8 bytes // BaseTxSize 8 bytes
// - Version: 4 bytes // - Version: 4 bytes
// - LockTime: 4 bytes // - LockTime: 4 bytes
BaseTxSize = 4 + 4 BaseTxSize = 4 + 4
// BaseCommitmentTxSize 125 + 43 * num-htlc-outputs bytes // BaseCommitmentTxSize 125 + 43 * num-htlc-outputs bytes
@ -186,67 +186,38 @@ const (
// weight limits. // weight limits.
MaxHTLCNumber = 966 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_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_ENDIF: 1 byte
ToLocalScriptSize = 1 + 1 + 33 + 1 + 1 + 1 + 33 + 1 + 1 + 8 + 1 + 1
// ToLocalTimeoutWitnessSize x bytes
// - number_of_witness_elements: 1 byte
// - local_delay_sig_length: 1 byte
// - local_delay_sig: 73 bytes
// - zero_length: 1 byte
// - witness_script_length: 1 byte
// - witness_script (to_local_script)
ToLocalTimeoutWitnessSize = 1 + 1 + 73 + 1 + 1 + ToLocalScriptSize
// ToLocalPenaltyWitnessSize 160 bytes
// - number_of_witness_elements: 1 byte
// - revocation_sig_length: 1 byte
// - revocation_sig: 73 bytes
// - one_length: 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_IF: 1 byte
// - OP_DATA: 1 byte // - OP_DATA: 1 byte
// - revoke_key: 33 bytes // - revoke_key: 33 bytes
// - OP_ELSE: 1 byte // - OP_ELSE: 1 byte
// - csv_delay: 1 byte // - OP_DATA: 1 byte
// - csv_delay: 4 bytes
// - OP_CHECKSEQUENCEVERIFY: 1 byte // - OP_CHECKSEQUENCEVERIFY: 1 byte
// - OP_DROP: 1 byte // - OP_DROP: 1 byte
// - OP_DATA: 1 byte
// - delay_key: 33 bytes // - delay_key: 33 bytes
// - OP_ENDIF: 1 byte // - OP_ENDIF: 1 byte
// - OP_CHECKSIG: 1 byte // - OP_CHECKSIG: 1 byte
SecondLevelHtlcScriptSize = 73 ToLocalScriptSize = 1 + 1 + 33 + 1 + 1 + 4 + 1 + 1 + 1 + 33 + 1 + 1
// SecondLevelHtlcPenaltyWitnessSize 149 bytes // ToLocalTimeoutWitnessSize 156 bytes
// - number_of_witness_elements: 1 byte // - number_of_witness_elements: 1 byte
// - revoke_sig_length: 1 byte // - local_delay_sig_length: 1 byte
// - revoke_sig: 73 bytes // - local_delay_sig: 73 bytes
// - OP_TRUE: 1 byte // - zero_length: 1 byte
// - witness_script (second_level_script_size) // - witness_script_length: 1 byte
SecondLevelHtlcPenaltyWitnessSize = 1 + 1 + 73 + 1 + SecondLevelHtlcScriptSize // - witness_script (to_local_script)
ToLocalTimeoutWitnessSize = 1 + 1 + 73 + 1 + 1 + ToLocalScriptSize
// SecondLevelHtlcSuccessWitnessSize 149 bytes // ToLocalPenaltyWitnessSize 156 bytes
// - number_of_witness_elements: 1 byte // - number_of_witness_elements: 1 byte
// - success_sig_length: 1 byte // - revocation_sig_length: 1 byte
// - success_sig: 73 bytes // - revocation_sig: 73 bytes
// - nil_length: 1 byte // - OP_TRUE: 1 byte
// - witness_script (second_level_script_size) // - witness_script_length: 1 byte
SecondLevelHtlcSuccessWitnessSize = 1 + 1 + 73 + 1 + SecondLevelHtlcScriptSize // - witness_script (to_local_script)
ToLocalPenaltyWitnessSize = 1 + 1 + 73 + 1 + 1 + ToLocalScriptSize
// AcceptedHtlcScriptSize 139 bytes // AcceptedHtlcScriptSize 139 bytes
// - OP_DUP: 1 byte // - OP_DUP: 1 byte
@ -286,34 +257,36 @@ const (
AcceptedHtlcScriptSize = 3*1 + 20 + 5*1 + 33 + 7*1 + 20 + 4*1 + AcceptedHtlcScriptSize = 3*1 + 20 + 5*1 + 33 + 7*1 + 20 + 4*1 +
33 + 5*1 + 4 + 5*1 33 + 5*1 + 4 + 5*1
// AcceptedHtlcTimeoutWitnessSize 214 // AcceptedHtlcTimeoutWitnessSize 216
// - number_of_witness_elements: 1 byte // - number_of_witness_elements: 1 byte
// - sender_sig: 73 bytes // - sender_sig_length: 1 byte
// - nil_length: 1 byte // - sender_sig: 73 bytes
// - witness_script: (accepted_htlc_script) // - nil_length: 1 byte
AcceptedHtlcTimeoutWitnessSize = 1 + 73 + 1 + AcceptedHtlcScriptSize // - witness_script_length: 1 byte
// - witness_script: (accepted_htlc_script)
AcceptedHtlcTimeoutWitnessSize = 1 + 1 + 73 + 1 + 1 + AcceptedHtlcScriptSize
// AcceptedHtlcSuccessWitnessSize 325 bytes // AcceptedHtlcSuccessWitnessSize 322 bytes
// - number_of_witness_elements: 1 byte // - number_of_witness_elements: 1 byte
// - nil_length: 1 byte // - nil_length: 1 byte
// - sig_alice_length: 1 byte // - sig_alice_length: 1 byte
// - sig_alice: 73 bytes // - sig_alice: 73 bytes
// - sig_bob_length: 1 byte // - sig_bob_length: 1 byte
// - sig_bob: 73 bytes // - sig_bob: 73 bytes
// - preimage_length: 1 byte // - preimage_length: 1 byte
// - preimage: 32 bytes // - preimage: 32 bytes
// - witness_script_length: 1 byte // - witness_script_length: 1 byte
// - witness_script (accepted_htlc_script) // - witness_script (accepted_htlc_script)
AcceptedHtlcSuccessWitnessSize = 1 + 1 + 73 + 1 + 73 + 1 + 32 + 1 + AcceptedHtlcScriptSize AcceptedHtlcSuccessWitnessSize = 1 + 1 + 73 + 1 + 73 + 1 + 32 + 1 + AcceptedHtlcScriptSize
// AcceptedHtlcPenaltyWitnessSize 249 bytes // AcceptedHtlcPenaltyWitnessSize 249 bytes
// - number_of_witness_elements: 1 byte // - number_of_witness_elements: 1 byte
// - revocation_sig_length: 1 byte // - revocation_sig_length: 1 byte
// - revocation_sig: 73 bytes // - revocation_sig: 73 bytes
// - revocation_key_length: 1 byte // - revocation_key_length: 1 byte
// - revocation_key: 33 bytes // - revocation_key: 33 bytes
// - witness_script_length: 1 byte // - witness_script_length: 1 byte
// - witness_script (accepted_htlc_script) // - witness_script (accepted_htlc_script)
AcceptedHtlcPenaltyWitnessSize = 1 + 1 + 73 + 1 + 33 + 1 + AcceptedHtlcScriptSize AcceptedHtlcPenaltyWitnessSize = 1 + 1 + 73 + 1 + 33 + 1 + AcceptedHtlcScriptSize
// OfferedHtlcScriptSize 133 bytes // OfferedHtlcScriptSize 133 bytes
@ -351,26 +324,29 @@ const (
OfferedHtlcScriptSize = 3*1 + 20 + 5*1 + 33 + 10*1 + 33 + 5*1 + 20 + 4*1 OfferedHtlcScriptSize = 3*1 + 20 + 5*1 + 33 + 10*1 + 33 + 5*1 + 20 + 4*1
// OfferedHtlcTimeoutWitnessSize 285 bytes // OfferedHtlcTimeoutWitnessSize 285 bytes
// - number_of_witness_elements: 1 byte // - number_of_witness_elements: 1 byte
// - nil_length: 1 byte // - nil_length: 1 byte
// - sig_alice_length: 1 byte // - sig_alice_length: 1 byte
// - sig_alice: 73 bytes // - sig_alice: 73 bytes
// - sig_bob_length: 1 byte // - sig_bob_length: 1 byte
// - sig_bob: 73 bytes // - sig_bob: 73 bytes
// - nil_length: 1 byte // - nil_length: 1 byte
// - witness_script_length: 1 byte // - witness_script_length: 1 byte
// - witness_script (offered_htlc_script) // - witness_script (offered_htlc_script)
OfferedHtlcTimeoutWitnessSize = 1 + 1 + 1 + 73 + 1 + 73 + 1 + 1 + OfferedHtlcScriptSize OfferedHtlcTimeoutWitnessSize = 1 + 1 + 1 + 73 + 1 + 73 + 1 + 1 + OfferedHtlcScriptSize
// OfferedHtlcSuccessWitnessSize 283 bytes // OfferedHtlcSuccessWitnessSize 317 bytes
// - number_of_witness_elements: 1 byte // - number_of_witness_elements: 1 byte
// - nil_length: 1 byte // - nil_length: 1 byte
// - receiver_sig: 73 bytes // - receiver_sig_length: 1 byte
// - sender_sigs: 73 bytes // - receiver_sig: 73 bytes
// - payment_preimage: 32 bytes // - sender_sig_length: 1 byte
// - witness_script_length: 1 byte // - sender_sig: 73 bytes
// - witness_script (offered_htlc_script) // - payment_preimage_length: 1 byte
OfferedHtlcSuccessWitnessSize = 1 + 1 + 73 + 73 + 73 + 32 + 1 + OfferedHtlcScriptSize // - payment_preimage: 32 bytes
// - witness_script_length: 1 byte
// - witness_script (offered_htlc_script)
OfferedHtlcSuccessWitnessSize = 1 + 1 + 1 + 73 + 1 + 73 + 1 + 32 + 1 + OfferedHtlcScriptSize
// OfferedHtlcPenaltyWitnessSize 243 bytes // OfferedHtlcPenaltyWitnessSize 243 bytes
// - number_of_witness_elements: 1 byte // - number_of_witness_elements: 1 byte
@ -380,7 +356,7 @@ const (
// - revocation_key: 33 bytes // - revocation_key: 33 bytes
// - witness_script_length: 1 byte // - witness_script_length: 1 byte
// - witness_script (offered_htlc_script) // - 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 // estimateCommitTxWeight estimate commitment transaction weight depending on

@ -8,14 +8,14 @@ import (
"sync" "sync"
"sync/atomic" "sync/atomic"
"github.com/davecgh/go-spew/spew"
"github.com/lightningnetwork/lnd/chainntnfs"
"github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/lnwallet"
"github.com/btcsuite/btcd/blockchain" "github.com/btcsuite/btcd/blockchain"
"github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/txscript"
"github.com/btcsuite/btcd/wire" "github.com/btcsuite/btcd/wire"
"github.com/btcsuite/btcutil" "github.com/btcsuite/btcutil"
"github.com/davecgh/go-spew/spew"
"github.com/lightningnetwork/lnd/chainntnfs"
"github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/lnwallet"
) )
// SUMMARY OF OUTPUT STATES // SUMMARY OF OUTPUT STATES
@ -962,7 +962,7 @@ func (u *utxoNursery) createSweepTx(kgtnOutputs []kidOutput,
// sweep. // sweep.
case lnwallet.HtlcOfferedTimeoutSecondLevel: case lnwallet.HtlcOfferedTimeoutSecondLevel:
weightEstimate.AddWitnessInput( weightEstimate.AddWitnessInput(
lnwallet.SecondLevelHtlcSuccessWitnessSize, lnwallet.ToLocalTimeoutWitnessSize,
) )
csvOutputs = append(csvOutputs, input) csvOutputs = append(csvOutputs, input)
@ -971,7 +971,7 @@ func (u *utxoNursery) createSweepTx(kgtnOutputs []kidOutput,
// sweep. // sweep.
case lnwallet.HtlcAcceptedSuccessSecondLevel: case lnwallet.HtlcAcceptedSuccessSecondLevel:
weightEstimate.AddWitnessInput( weightEstimate.AddWitnessInput(
lnwallet.SecondLevelHtlcSuccessWitnessSize, lnwallet.ToLocalTimeoutWitnessSize,
) )
csvOutputs = append(csvOutputs, input) csvOutputs = append(csvOutputs, input)