From b3a80f76284cfed1dad93f52e4eb82ca0c8e2f97 Mon Sep 17 00:00:00 2001 From: Conner Fromknecht Date: Tue, 29 Aug 2017 22:14:04 -0700 Subject: [PATCH] lnwallet/size: updated with recent BOLT 5 constants --- lnwallet/size.go | 171 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 167 insertions(+), 4 deletions(-) diff --git a/lnwallet/size.go b/lnwallet/size.go index 74037e9a..55c956c3 100644 --- a/lnwallet/size.go +++ b/lnwallet/size.go @@ -18,12 +18,31 @@ const ( // - WitnessScriptSHA256: 32 bytes P2WSHSize = 1 + 1 + 32 + // P2WKHOutputSize 31 bytes + // - value: 8 bytes + // - var_int: 1 byte (pkscript_length) + // - pkscript (p2wpkh): 22 bytes + P2WKHOutputSize = 8 + 1 + 22 + + // P2WSHOutputSize 43 bytes + // - value: 8 bytes + // - var_int: 1 byte (pkscript_length) + // - pkscript (p2wsh): 34 bytes + P2WSHOutputSize = 8 + 1 + 34 + // P2WPKHSize 22 bytes // - OP_0: 1 byte // - OP_DATA: 1 byte (PublicKeyHASH160 length) // - PublicKeyHASH160: 20 bytes P2WPKHSize = 1 + 1 + 20 + // P2WKHWitnessSize 108 bytes + // - OP_DATA: 1 byte (signature length) + // - signature + // - OP_DATA: 1 byte (pubkey length) + // - pubkey + P2WKHWitnessSize = 1 + 73 + 1 + 33 + // MultiSigSize 71 bytes // - OP_2: 1 byte // - OP_DATA: 1 byte (pubKeyAlice length) @@ -45,7 +64,7 @@ const ( // - WitnessScript (MultiSig) WitnessSize = 1 + 1 + 1 + 73 + 1 + 73 + 1 + MultiSigSize - // FundingInputSize 41 bytes + // InputSize 41 bytes // - PreviousOutPoint: // - Hash: 32 bytes // - Index: 4 bytes @@ -57,7 +76,12 @@ const ( // we separate the calculation of ordinary data // from witness data. // - Sequence: 4 bytes - FundingInputSize = 32 + 4 + 1 + 4 + InputSize = 32 + 4 + 1 + 4 + + // FundingInputSize represents the size of an input to a funding + // transaction, and is equivalent to the size of a standard segwit input + // as calculated above. + FundingInputSize = InputSize // CommitmentDelayOutput 43 bytes // - Value: 8 bytes @@ -82,7 +106,19 @@ const ( // - Marker: 1 byte WitnessHeaderSize = 1 + 1 - // BaseCommitmentTxSize 125 43 * num-htlc-outputs bytes + // BaseSweepTxSize 42 + 41 * num-swept-inputs bytes + // - Version: 4 bytes + // - WitnessHeader <---- part of the witness data + // - CountTxIn: 2 byte + // - TxIn: 41 * num-swept-inputs bytes + // ....SweptInputs.... + // - CountTxOut: 1 byte + // - TxOut: 31 bytes + // P2WPKHOutput: 31 bytes + // - LockTime: 4 bytes + BaseSweepTxSize = 4 + 2 + 1 + P2WKHOutputSize + 4 + + // BaseCommitmentTxSize 125 + 43 * num-htlc-outputs bytes // - Version: 4 bytes // - WitnessHeader <---- part of the witness data // - CountTxIn: 1 byte @@ -119,7 +155,134 @@ const ( // of a contract breach, the punishment transaction is able to sweep // all the HTLC's yet still remain below the widely used standard // weight limits. - MaxHTLCNumber = 967 + MaxHTLCNumber = 966 + + // ToLocalPenaltyScriptSize 83 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) + // - localkey: 33 bytes + // - OP_CHECKSIG_VERIFY: 1 byte + // - OP_DATA: 1 byte (delay length) + // - delay: 8 bytes + // -OP_CHECKSEQUENCEVERIFY: 1 byte + // - OP_ENDIF: 1 byte + ToLocalPenaltyScriptSize = 1 + 1 + 33 + 1 + 1 + 1 + 33 + 1 + 1 + 8 + 1 + 1 + + // 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 + ToLocalPenaltyScriptSize + + // AcceptedHtlcPenaltyScriptSize 139 bytes + // - OP_DUP: 1 byte + // - OP_HASH160: 1 byte + // - OP_DATA: 1 byte (RIPEMD160(SHA256(revocationkey)) length) + // - RIPEMD160(SHA256(revocationkey)): 20 bytes + // - OP_EQUAL: 1 byte + // - OP_IF: 1 byte + // - OP_CHECKSIG: 1 byte + // - OP_ELSE: 1 byte + // - OP_DATA: 1 byte (remotekey length) + // - remotekey: 33 bytes + // - OP_SWAP: 1 byte + // - OP_SIZE: 1 byte + // - 32: 1 byte + // - OP_EQUAL: 1 byte + // - OP_IF: 1 byte + // - OP_HASH160: 1 byte + // - OP_DATA: 1 byte (RIPEMD160(payment_hash) length) + // - RIPEMD160(payment_hash): 20 bytes + // - OP_EQUALVERIFY: 1 byte + // - 2: 1 byte + // - OP_SWAP: 1 byte + // - OP_DATA: 1 byte (localkey length) + // - localkey: 33 bytes + // - 2: 1 byte + // - OP_CHECKMULTISIG: 1 byte + // - OP_ELSE: 1 byte + // - OP_DROP: 1 byte + // - OP_DATA: 1 byte (cltv_expiry length) + // - cltv_expiry: 4 bytes + // - OP_CHECKLOCKTIMEVERIFY: 1 byte + // - OP_DROP: 1 byte + // - OP_CHECKSIG: 1 byte + // - OP_ENDIF: 1 byte + // - OP_ENDIF: 1 byte + AcceptedHtlcPenaltyScriptSize = 3*1 + 20 + 5*1 + 33 + 7*1 + 20 + 4*1 + + 33 + 5*1 + 4 + 5*1 + + // AcceptedHtlcPenaltyWitnessSize 249 bytes + // - number_of_witness_elements: 1 byte + // - revocation_sig_length: 1 byte + // - revocation_sig: 73 bytes + // - revocation_key_length: 1 byte + // - revocation_key: 33 bytes + // - witness_script_length: 1 byte + // - witness_script (accepted_htlc_script) + AcceptedHtlcPenaltyWitnessSize = 1 + 1 + 73 + 1 + 33 + 1 + + AcceptedHtlcPenaltyScriptSize + + // OfferedHtlcScriptSize 133 bytes + // - OP_DUP: 1 byte + // - OP_HASH160: 1 byte + // - OP_DATA: 1 byte (RIPEMD160(SHA256(revocationkey)) length) + // - RIPEMD160(SHA256(revocationkey)): 20 bytes + // - OP_EQUAL: 1 byte + // - OP_IF: 1 byte + // - OP_CHECKSIG: 1 byte + // - OP_ELSE: 1 byte + // - OP_DATA: 1 byte (remotekey length) + // - remotekey: 33 bytes + // - OP_SWAP: 1 byte + // - OP_SIZE: 1 byte + // - OP_DATA: 1 byte (32 length) + // - 32: 1 byte + // - OP_EQUAL: 1 byte + // - OP_NOTIF: 1 byte + // - OP_DROP: 1 byte + // - 2: 1 byte + // - OP_SWAP: 1 byte + // - OP_DATA: 1 byte (localkey length) + // - localkey: 33 bytes + // - 2: 1 byte + // - OP_CHECKMULTISIG: 1 byte + // - OP_ELSE: 1 byte + // - OP_HASH160: 1 byte + // - OP_DATA: 1 byte (RIPEMD160(payment_hash) length) + // - RIPEMD160(payment_hash): 20 bytes + // - OP_EQUALVERIFY: 1 byte + // - OP_CHECKSIG: 1 byte + // - OP_ENDIF: 1 byte + // - OP_ENDIF: 1 byte + OfferedHtlcScriptSize = 3*1 + 20 + 5*1 + 33 + 10*1 + 33 + 5*1 + 20 + 4*1 + + // OfferedHtlcWitnessSize 243 bytes + // - number_of_witness_elements: 1 byte + // - revocation_sig_length: 1 byte + // - revocation_sig: 73 bytes + // - revocation_key_length: 1 byte + // - revocation_key: 33 bytes + // - witness_script_length: 1 byte + // - witness_script (offered_htlc_script) + OfferedHtlcWitnessSize = 1 + 1 + 73 + 1 + 33 + 1 + OfferedHtlcScriptSize + + // OfferedHtlcPenaltyWitnessSize 243 bytes + // - number_of_witness_elements: 1 byte + // - revocation_sig_length: 1 byte + // - revocation_sig: 73 bytes + // - revocation_key_length: 1 byte + // - revocation_key: 33 bytes + // - witness_script_length: 1 byte + // - witness_script (offered_htlc_script) + OfferedHtlcPenaltyWitnessSize = 1 + 1 + 73 + 1 + 1 + OfferedHtlcScriptSize ) // estimateCommitTxWeight estimate commitment transaction weight depending on