MCPcopy Create free account
hub / github.com/bitcoin/bitcoin / FindChallenges

Function FindChallenges

src/test/miniscript_tests.cpp:298–323  ·  view source on GitHub ↗

Compute all challenges (pubkeys, hashes, timelocks) that occur in a given Miniscript. */

Source from the content-addressed store, hash-verified

296
297/** Compute all challenges (pubkeys, hashes, timelocks) that occur in a given Miniscript. */
298std::set<Challenge> FindChallenges(const Node& root)
299{
300 std::set<Challenge> chal;
301
302 for (std::vector stack{&root}; !stack.empty();) {
303 const auto* ref{stack.back()};
304 stack.pop_back();
305
306 for (const auto& key : ref->Keys()) {
307 chal.emplace(ChallengeType::PK, ChallengeNumber(key));
308 }
309 switch (ref->Fragment()) {
310 case Fragment::OLDER: chal.emplace(ChallengeType::OLDER, ref->K()); break;
311 case Fragment::AFTER: chal.emplace(ChallengeType::AFTER, ref->K()); break;
312 case Fragment::SHA256: chal.emplace(ChallengeType::SHA256, ChallengeNumber(ref->Data())); break;
313 case Fragment::RIPEMD160: chal.emplace(ChallengeType::RIPEMD160, ChallengeNumber(ref->Data())); break;
314 case Fragment::HASH256: chal.emplace(ChallengeType::HASH256, ChallengeNumber(ref->Data())); break;
315 case Fragment::HASH160: chal.emplace(ChallengeType::HASH160, ChallengeNumber(ref->Data())); break;
316 default: break;
317 }
318 for (const auto& sub : ref->Subs()) {
319 stack.push_back(&sub);
320 }
321 }
322 return chal;
323}
324
325//! The spk for this script under the given context. If it's a Taproot output also record the spend data.
326CScript ScriptPubKey(miniscript::MiniscriptContext ctx, const CScript& script, TaprootBuilder& builder)

Callers 1

TestSatisfyMethod · 0.85

Calls 8

ChallengeNumberFunction · 0.85
emplaceMethod · 0.80
FragmentMethod · 0.80
KMethod · 0.80
emptyMethod · 0.45
backMethod · 0.45
pop_backMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected