mirror of
https://github.com/lightning/bolts.git
synced 2024-11-19 10:00:04 +01:00
BOLT 3,5: update weight calculations for revocation key hash in script.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
a597738b94
commit
392008a7d3
@ -258,8 +258,8 @@ Thus we use a simplified formula for *expected weight*, which assumes:
|
|||||||
This gives us the following *expected weights* (details of the computation in [Appendix A](#appendix-a-expected-weights)):
|
This gives us the following *expected weights* (details of the computation in [Appendix A](#appendix-a-expected-weights)):
|
||||||
|
|
||||||
Commitment weight: 724 + 172 * num-untrimmed-htlc-outputs
|
Commitment weight: 724 + 172 * num-untrimmed-htlc-outputs
|
||||||
HTLC-timeout weight: 669
|
HTLC-timeout weight: 663
|
||||||
HTLC-success weight: 718
|
HTLC-success weight: 703
|
||||||
|
|
||||||
Note that we refer to the "base fee" for a commitment transaction in the requirements below, which is what the funder pays. The actual fee may be higher than the amount calculated here, due to rounding and trimmed outputs.
|
Note that we refer to the "base fee" for a commitment transaction in the requirements below, which is what the funder pays. The actual fee may be higher than the amount calculated here, due to rounding and trimmed outputs.
|
||||||
|
|
||||||
@ -267,11 +267,11 @@ Note that we refer to the "base fee" for a commitment transaction in the require
|
|||||||
|
|
||||||
The fee for an HTLC-timeout transaction MUST BE calculated to match:
|
The fee for an HTLC-timeout transaction MUST BE calculated to match:
|
||||||
|
|
||||||
1. Multiply `feerate-per-kw` by 669 and divide by 1000 (rounding down).
|
1. Multiply `feerate-per-kw` by 663 and divide by 1000 (rounding down).
|
||||||
|
|
||||||
The fee for an HTLC-success transaction MUST BE calculated to match:
|
The fee for an HTLC-success transaction MUST BE calculated to match:
|
||||||
|
|
||||||
1. Multiply `feerate-per-kw` by 718 and divide by 1000 (rounding down).
|
1. Multiply `feerate-per-kw` by 703 and divide by 1000 (rounding down).
|
||||||
|
|
||||||
The base fee for a commitment transaction MUST BE calculated to match:
|
The base fee for a commitment transaction MUST BE calculated to match:
|
||||||
|
|
||||||
@ -288,8 +288,8 @@ For example, suppose that we have a `feerate-per-kw` of 5000, a `dust-limit-sato
|
|||||||
* 2 offered HTLCs of 5000000 and 1000000 millisatoshis (5000 and 1000 satoshis)
|
* 2 offered HTLCs of 5000000 and 1000000 millisatoshis (5000 and 1000 satoshis)
|
||||||
* 2 received HTLCs of 7000000 and 800000 millisatoshis (7000 and 800 satoshis)
|
* 2 received HTLCs of 7000000 and 800000 millisatoshis (7000 and 800 satoshis)
|
||||||
|
|
||||||
The HTLC timeout transaction weight is 669, thus fee would be 3345 satoshis.
|
The HTLC timeout transaction weight is 663, thus fee would be 3315 satoshis.
|
||||||
The HTLC success transaction weight is 718, thus fee would be 3590 satoshis
|
The HTLC success transaction weight is 703, thus fee would be 3515 satoshis
|
||||||
|
|
||||||
The commitment transaction weight would be calculated as follows:
|
The commitment transaction weight would be calculated as follows:
|
||||||
|
|
||||||
@ -607,13 +607,20 @@ Multiplying non-witness data by 4, this gives a weight of:
|
|||||||
|
|
||||||
The *expected weight* of an HTLC transaction is calculated as follows:
|
The *expected weight* of an HTLC transaction is calculated as follows:
|
||||||
|
|
||||||
accepted_htlc_script: 156 bytes
|
accepted_htlc_script: 139 bytes
|
||||||
|
- OP_DUP: 1 byte
|
||||||
|
- OP_HASH160: 1 byte
|
||||||
|
- OP_DATA: 1 byte (revocationkey-hash length)
|
||||||
|
- revocationkey-hash: 20 bytes
|
||||||
|
- OP_EQUAL: 1 byte
|
||||||
|
- OP_IF: 1 byte
|
||||||
|
- OP_CHECKSIG: 1 byte
|
||||||
|
- OP_ELSE: 1 byte
|
||||||
- OP_DATA: 1 byte (remotekey length)
|
- OP_DATA: 1 byte (remotekey length)
|
||||||
- remotekey: 33 bytes
|
- remotekey: 33 bytes
|
||||||
- OP_SWAP: 1 byte
|
- OP_SWAP: 1 byte
|
||||||
- OP_SIZE: 1 byte
|
- OP_SIZE: 1 byte
|
||||||
- OP_DATA: 1 byte (32 length)
|
- 32: 2 bytes
|
||||||
- 32: 1 byte
|
|
||||||
- OP_EQUAL: 1 byte
|
- OP_EQUAL: 1 byte
|
||||||
- OP_IF: 1 byte
|
- OP_IF: 1 byte
|
||||||
- OP_HASH160: 1 byte
|
- OP_HASH160: 1 byte
|
||||||
@ -627,28 +634,24 @@ The *expected weight* of an HTLC transaction is calculated as follows:
|
|||||||
- 2: 1 byte
|
- 2: 1 byte
|
||||||
- OP_CHECKMULTISIG: 1 byte
|
- OP_CHECKMULTISIG: 1 byte
|
||||||
- OP_ELSE: 1 byte
|
- OP_ELSE: 1 byte
|
||||||
- OP_SIZE: 1 byte
|
|
||||||
- 0: 1 byte
|
|
||||||
- OP_EQUAL: 1 byte
|
|
||||||
- OP_IF: 1 byte
|
|
||||||
- OP_DROP: 1 byte
|
- OP_DROP: 1 byte
|
||||||
- OP_DATA: 1 byte (locktime length)
|
- OP_DATA: 1 byte (locktime length)
|
||||||
- locktime: 3 bytes
|
- locktime: 3 bytes
|
||||||
- OP_CHECKLOCKTIMEVERIFY: 1 byte
|
- OP_CHECKLOCKTIMEVERIFY: 1 byte
|
||||||
- OP_DROP: 1 byte
|
- OP_DROP: 1 byte
|
||||||
- OP_CHECKSIG: 1 byte
|
- OP_CHECKSIG: 1 byte
|
||||||
- OP_ELSE: 1 byte
|
|
||||||
- OP_SWAP: 1 byte
|
|
||||||
- 2: 1 byte
|
|
||||||
- OP_SWAP: 1 byte
|
|
||||||
- OP_DATA: 1 byte (revocationkey length)
|
|
||||||
- revocationkey: 33 bytes
|
|
||||||
- 2: 1 byte
|
|
||||||
- OP_CHECKMULTISIG: 1 byte
|
|
||||||
- OP_ENDIF: 1 byte
|
- OP_ENDIF: 1 byte
|
||||||
- OP_ENDIF: 1 byte
|
- OP_ENDIF: 1 byte
|
||||||
|
|
||||||
offered_htlc_script: 139 bytes
|
offered_htlc_script: 133 bytes
|
||||||
|
- OP_DUP: 1 byte
|
||||||
|
- OP_HASH160: 1 byte
|
||||||
|
- OP_DATA: 1 byte (revocationkey-hash length)
|
||||||
|
- revocationkey-hash: 20 bytes
|
||||||
|
- OP_EQUAL: 1 byte
|
||||||
|
- OP_IF: 1 byte
|
||||||
|
- OP_CHECKSIG: 1 byte
|
||||||
|
- OP_ELSE: 1 byte
|
||||||
- OP_DATA: 1 byte (remotekey length)
|
- OP_DATA: 1 byte (remotekey length)
|
||||||
- remotekey: 33 bytes
|
- remotekey: 33 bytes
|
||||||
- OP_SWAP: 1 byte
|
- OP_SWAP: 1 byte
|
||||||
@ -662,9 +665,7 @@ The *expected weight* of an HTLC transaction is calculated as follows:
|
|||||||
- OP_SWAP: 1 byte
|
- OP_SWAP: 1 byte
|
||||||
- OP_DATA: 1 byte (localkey length)
|
- OP_DATA: 1 byte (localkey length)
|
||||||
- localkey: 33 bytes
|
- localkey: 33 bytes
|
||||||
- OP_DATA: 1 byte (revocationkey length)
|
- 2: 1 byte
|
||||||
- revocationkey: 33 bytes
|
|
||||||
- 3: 1 byte
|
|
||||||
- OP_CHECKMULTISIG: 1 byte
|
- OP_CHECKMULTISIG: 1 byte
|
||||||
- OP_ELSE: 1 byte
|
- OP_ELSE: 1 byte
|
||||||
- OP_HASH160: 1 byte
|
- OP_HASH160: 1 byte
|
||||||
@ -673,8 +674,9 @@ The *expected weight* of an HTLC transaction is calculated as follows:
|
|||||||
- OP_EQUALVERIFY: 1 byte
|
- OP_EQUALVERIFY: 1 byte
|
||||||
- OP_CHECKSIG: 1 byte
|
- OP_CHECKSIG: 1 byte
|
||||||
- OP_ENDIF: 1 byte
|
- OP_ENDIF: 1 byte
|
||||||
|
- OP_ENDIF: 1 byte
|
||||||
|
|
||||||
timeout_witness: 291 bytes
|
timeout_witness: 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
|
||||||
@ -685,7 +687,7 @@ The *expected weight* of an HTLC transaction is calculated as follows:
|
|||||||
- witness_script_length: 1 byte
|
- witness_script_length: 1 byte
|
||||||
- witness_script (offered_htlc_script)
|
- witness_script (offered_htlc_script)
|
||||||
|
|
||||||
success_witness: 340 bytes
|
success_witness: 325 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
|
||||||
@ -723,11 +725,11 @@ The *expected weight* of an HTLC transaction is calculated as follows:
|
|||||||
- lock_time: 4 bytes
|
- lock_time: 4 bytes
|
||||||
|
|
||||||
Multiplying non-witness data by 4, this gives a weight of 376. Adding
|
Multiplying non-witness data by 4, this gives a weight of 376. Adding
|
||||||
the witness data for each case (291 + 2 for HTLC-timeout, 340 + 2 for
|
the witness data for each case (285 + 2 for HTLC-timeout, 325 + 2 for
|
||||||
HTLC-success) gives a weight of:
|
HTLC-success) gives a weight of:
|
||||||
|
|
||||||
669 (HTLC-timeout)
|
663 (HTLC-timeout)
|
||||||
718 (HTLC-success)
|
703 (HTLC-success)
|
||||||
|
|
||||||
# Appendix C: Funding Transaction Test Vectors
|
# Appendix C: Funding Transaction Test Vectors
|
||||||
|
|
||||||
|
@ -325,14 +325,14 @@ should cover this. [FIXME: May have to divide and conquer here, since they may b
|
|||||||
There are three different scripts for penalty transactions, with the following witnesses weight (details of the computation in [Appendix A](#appendix-a-expected-weights)):
|
There are three different scripts for penalty transactions, with the following witnesses weight (details of the computation in [Appendix A](#appendix-a-expected-weights)):
|
||||||
|
|
||||||
to_local_penalty_witness: 154 bytes
|
to_local_penalty_witness: 154 bytes
|
||||||
offered_htlc_penalty_witness: 291 bytes
|
offered_htlc_penalty_witness: 243 bytes
|
||||||
accepted_htlc_penalty_witness: 307 bytes
|
accepted_htlc_penalty_witness: 249 bytes
|
||||||
|
|
||||||
The penalty txinput itself takes 41 bytes, thus has a weight of 164, making the weight of each input:
|
The penalty txinput itself takes 41 bytes, thus has a weight of 164, making the weight of each input:
|
||||||
|
|
||||||
to_local_penalty_input_weight: 318 bytes
|
to_local_penalty_input_weight: 318 bytes
|
||||||
offered_htlc_penalty_input_weight: 455 bytes
|
offered_htlc_penalty_input_weight: 407 bytes
|
||||||
accepted_htlc_penalty_input_weight: 471 bytes
|
accepted_htlc_penalty_input_weight: 413 bytes
|
||||||
|
|
||||||
The rest of the penalty transaction takes 4+3+1+8+1+34+4=55 bytes
|
The rest of the penalty transaction takes 4+3+1+8+1+34+4=55 bytes
|
||||||
assuming it has a pay-to-witness-script-hash (the largest standard
|
assuming it has a pay-to-witness-script-hash (the largest standard
|
||||||
@ -343,9 +343,9 @@ us to spend from the commitment transaction.
|
|||||||
|
|
||||||
With a maximum standard weight of 400000:
|
With a maximum standard weight of 400000:
|
||||||
|
|
||||||
max_num_htlcs = (400000 - 318 - 55) / 471 = 848
|
max_num_htlcs = (400000 - 318 - 55) / 413 = 967
|
||||||
|
|
||||||
Thus we could allow 424 HTLCs in each direction (with one output to-self) and still resolve it with a single penalty
|
Thus we could allow 483 HTLCs in each direction (with one output to-self) and still resolve it with a single penalty
|
||||||
transaction.
|
transaction.
|
||||||
|
|
||||||
# General Requirements
|
# General Requirements
|
||||||
@ -402,35 +402,32 @@ The *expected weight* is calculated as follows:
|
|||||||
|
|
||||||
The *expected weight* is calculated as follows (some calculations have already been made in [BOLT #3](03-transactions.md)):
|
The *expected weight* is calculated as follows (some calculations have already been made in [BOLT #3](03-transactions.md)):
|
||||||
|
|
||||||
offered_htlc_script: 139 bytes
|
offered_htlc_script: 133 bytes
|
||||||
|
|
||||||
offered_htlc_penalty_witness: 291 bytes
|
offered_htlc_penalty_witness: 243 bytes
|
||||||
- number_of_witness_elements: 1 byte
|
- number_of_witness_elements: 1 byte
|
||||||
- nil_length: 1 byte
|
|
||||||
- remote_sig_length: 1 byte
|
|
||||||
- remote_sig: 73 bytes
|
|
||||||
- revocation_sig_length: 1 byte
|
- revocation_sig_length: 1 byte
|
||||||
- revocation_sig: 73 bytes
|
- revocation_sig: 73 bytes
|
||||||
- nil_length: 1 byte
|
- revocation_key_length: 1 byte
|
||||||
|
- revocation_key: 33 bytes
|
||||||
- witness_script_length: 1 byte
|
- witness_script_length: 1 byte
|
||||||
- witness_script (to_local_script)
|
- witness_script (offered_htlc_script)
|
||||||
|
|
||||||
|
|
||||||
## Expected weight of the received-htlc penalty transaction witness
|
## Expected weight of the received-htlc penalty transaction witness
|
||||||
|
|
||||||
The *expected weight* is calculated as follows (some calculations have already been made in [BOLT #3](03-transactions.md)):
|
The *expected weight* is calculated as follows (some calculations have already been made in [BOLT #3](03-transactions.md)):
|
||||||
|
|
||||||
accepted_htlc_script: 156 bytes
|
accepted_htlc_script: 139 bytes
|
||||||
|
|
||||||
accepted_htlc_penalty_witness: 307 bytes
|
accepted_htlc_penalty_witness: 249 bytes
|
||||||
- number_of_witness_elements: 1 byte
|
- number_of_witness_elements: 1 byte
|
||||||
- nil_length: 1 byte
|
|
||||||
- remote_sig_length: 1 byte
|
|
||||||
- remote_sig: 73 bytes
|
|
||||||
- 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: 33 bytes
|
||||||
- witness_script_length: 1 byte
|
- witness_script_length: 1 byte
|
||||||
- witness_script (to_local_script)
|
- witness_script (accepted_htlc_script)
|
||||||
|
|
||||||
|
|
||||||
![Creative Commons License](https://i.creativecommons.org/l/by/4.0/88x31.png "License CC-BY")
|
![Creative Commons License](https://i.creativecommons.org/l/by/4.0/88x31.png "License CC-BY")
|
||||||
|
Loading…
Reference in New Issue
Block a user