miniscript_debug/miniscript/limits.rs
1//! Miscellaneous constraints imposed by Bitcoin.
2//! These constraints can be either Consensus or Policy (standardness) rules, for either Segwitv0
3//! or Legacy scripts.
4
5/// Maximum operations per script
6// https://github.com/bitcoin/bitcoin/blob/875e1ccc9fe01e026e564dfd39a64d9a4b332a89/src/script/script.h#L26
7pub const MAX_OPS_PER_SCRIPT: usize = 201;
8/// Maximum p2wsh initial stack items
9// https://github.com/bitcoin/bitcoin/blob/875e1ccc9fe01e026e564dfd39a64d9a4b332a89/src/policy/policy.h#L40
10pub const MAX_STANDARD_P2WSH_STACK_ITEMS: usize = 100;
11/// Maximum script size allowed by consensus rules
12// https://github.com/bitcoin/bitcoin/blob/42b66a6b814bca130a9ccf0a3f747cf33d628232/src/script/script.h#L32
13pub const MAX_SCRIPT_SIZE: usize = 10_000;
14/// Maximum script size allowed by standardness rules
15// https://github.com/bitcoin/bitcoin/blob/283a73d7eaea2907a6f7f800f529a0d6db53d7a6/src/policy/policy.h#L44
16pub const MAX_STANDARD_P2WSH_SCRIPT_SIZE: usize = 3600;
17
18/// Maximum script element size allowed by consensus rules
19// https://github.com/bitcoin/bitcoin/blob/42b66a6b814bca130a9ccf0a3f747cf33d628232/src/script/script.h#L23
20pub const MAX_SCRIPT_ELEMENT_SIZE: usize = 520;
21/// Maximum script sig size allowed by standardness rules
22// https://github.com/bitcoin/bitcoin/blob/42b66a6b814bca130a9ccf0a3f747cf33d628232/src/policy/policy.cpp#L102
23pub const MAX_SCRIPTSIG_SIZE: usize = 1650;
24/// Maximum items during stack execution
25// This limits also applies for initial stack satisfaction
26// https://github.com/bitcoin/bitcoin/blob/3af495d6972379b07530a5fcc2665aa626d01621/src/script/script.h#L35
27pub const MAX_STACK_SIZE: usize = 1000;
28/** The maximum allowed weight for a block, see BIP 141 (network rule) */
29pub const MAX_BLOCK_WEIGHT: usize = 4000000;
30
31/// Maximum pubkeys as arguments to CHECKMULTISIG
32// https://github.com/bitcoin/bitcoin/blob/6acda4b00b3fc1bfac02f5de590e1a5386cbc779/src/script/script.h#L30
33pub const MAX_PUBKEYS_PER_MULTISIG: usize = 20;