| 72 | } |
| 73 | |
| 74 | static std::vector<script_verify_flags> AllConsensusFlags() |
| 75 | { |
| 76 | std::vector<script_verify_flags> ret; |
| 77 | |
| 78 | for (unsigned int i = 0; i < 128; ++i) { |
| 79 | script_verify_flags flag = 0; |
| 80 | if (i & 1) flag |= SCRIPT_VERIFY_P2SH; |
| 81 | if (i & 2) flag |= SCRIPT_VERIFY_DERSIG; |
| 82 | if (i & 4) flag |= SCRIPT_VERIFY_NULLDUMMY; |
| 83 | if (i & 8) flag |= SCRIPT_VERIFY_CHECKLOCKTIMEVERIFY; |
| 84 | if (i & 16) flag |= SCRIPT_VERIFY_CHECKSEQUENCEVERIFY; |
| 85 | if (i & 32) flag |= SCRIPT_VERIFY_WITNESS; |
| 86 | if (i & 64) flag |= SCRIPT_VERIFY_TAPROOT; |
| 87 | |
| 88 | // SCRIPT_VERIFY_WITNESS requires SCRIPT_VERIFY_P2SH |
| 89 | if (flag & SCRIPT_VERIFY_WITNESS && !(flag & SCRIPT_VERIFY_P2SH)) continue; |
| 90 | // SCRIPT_VERIFY_TAPROOT requires SCRIPT_VERIFY_WITNESS |
| 91 | if (flag & SCRIPT_VERIFY_TAPROOT && !(flag & SCRIPT_VERIFY_WITNESS)) continue; |
| 92 | |
| 93 | ret.push_back(flag); |
| 94 | } |
| 95 | |
| 96 | return ret; |
| 97 | } |
| 98 | |
| 99 | /** Precomputed list of all valid combinations of consensus-relevant script validation flags. */ |
| 100 | static const std::vector<script_verify_flags> ALL_CONSENSUS_FLAGS = AllConsensusFlags(); |
no test coverage detected