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

Function ComputeScriptLen

src/script/miniscript.cpp:264–296  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

262}
263
264size_t ComputeScriptLen(Fragment fragment, Type sub0typ, size_t subsize, uint32_t k, size_t n_subs,
265 size_t n_keys, MiniscriptContext ms_ctx) {
266 switch (fragment) {
267 case Fragment::JUST_1:
268 case Fragment::JUST_0: return 1;
269 case Fragment::PK_K: return IsTapscript(ms_ctx) ? 33 : 34;
270 case Fragment::PK_H: return 3 + 21;
271 case Fragment::OLDER:
272 case Fragment::AFTER: return 1 + BuildScript(k).size();
273 case Fragment::HASH256:
274 case Fragment::SHA256: return 4 + 2 + 33;
275 case Fragment::HASH160:
276 case Fragment::RIPEMD160: return 4 + 2 + 21;
277 case Fragment::MULTI: return 1 + BuildScript(n_keys).size() + BuildScript(k).size() + 34 * n_keys;
278 case Fragment::MULTI_A: return (1 + 32 + 1) * n_keys + BuildScript(k).size() + 1;
279 case Fragment::AND_V: return subsize;
280 case Fragment::WRAP_V: return subsize + (sub0typ << "x"_mst);
281 case Fragment::WRAP_S:
282 case Fragment::WRAP_C:
283 case Fragment::WRAP_N:
284 case Fragment::AND_B:
285 case Fragment::OR_B: return subsize + 1;
286 case Fragment::WRAP_A:
287 case Fragment::OR_C: return subsize + 2;
288 case Fragment::WRAP_D:
289 case Fragment::OR_D:
290 case Fragment::OR_I:
291 case Fragment::ANDOR: return subsize + 3;
292 case Fragment::WRAP_J: return subsize + 4;
293 case Fragment::THRESH: return subsize + n_subs + BuildScript(k).size();
294 }
295 assert(false);
296}
297
298InputStack& InputStack::SetAvailable(Availability avail) {
299 available = avail;

Callers 2

CalcScriptLenMethod · 0.85
GenNodeFunction · 0.85

Calls 3

IsTapscriptFunction · 0.85
BuildScriptFunction · 0.85
sizeMethod · 0.45

Tested by 1

GenNodeFunction · 0.68