Skip to content

Commit b228108

Browse files
committed
miniscript: make GetWitnessSize accurate for tapscript
1 parent 8be9851 commit b228108

File tree

2 files changed

+55
-45
lines changed

2 files changed

+55
-45
lines changed

src/script/miniscript.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1105,13 +1105,15 @@ struct Node {
11051105
}
11061106

11071107
internal::WitnessSize CalcWitnessSize() const {
1108+
const uint32_t sig_size = IsTapscript(m_script_ctx) ? 1 + 65 : 1 + 72;
1109+
const uint32_t pubkey_size = IsTapscript(m_script_ctx) ? 1 + 32 : 1 + 33;
11081110
switch (fragment) {
11091111
case Fragment::JUST_0: return {{}, 0};
11101112
case Fragment::JUST_1:
11111113
case Fragment::OLDER:
11121114
case Fragment::AFTER: return {0, {}};
1113-
case Fragment::PK_K: return {1 + 72, 1};
1114-
case Fragment::PK_H: return {1 + 72 + 1 + 33, 1 + 1 + 33};
1115+
case Fragment::PK_K: return {sig_size, 1};
1116+
case Fragment::PK_H: return {sig_size + pubkey_size, 1 + pubkey_size};
11151117
case Fragment::SHA256:
11161118
case Fragment::RIPEMD160:
11171119
case Fragment::HASH256:
@@ -1131,8 +1133,8 @@ struct Node {
11311133
case Fragment::OR_C: return {subs[0]->ws.sat | (subs[0]->ws.dsat + subs[1]->ws.sat), {}};
11321134
case Fragment::OR_D: return {subs[0]->ws.sat | (subs[0]->ws.dsat + subs[1]->ws.sat), subs[0]->ws.dsat + subs[1]->ws.dsat};
11331135
case Fragment::OR_I: return {(subs[0]->ws.sat + 1 + 1) | (subs[1]->ws.sat + 1), (subs[0]->ws.dsat + 1 + 1) | (subs[1]->ws.dsat + 1)};
1134-
case Fragment::MULTI: return {k * (1 + 72) + 1, k + 1};
1135-
case Fragment::MULTI_A: return {k * (1 + 65) + static_cast<uint32_t>(keys.size()) - k, static_cast<uint32_t>(keys.size())};
1136+
case Fragment::MULTI: return {k * sig_size + 1, k + 1};
1137+
case Fragment::MULTI_A: return {k * sig_size + static_cast<uint32_t>(keys.size()) - k, static_cast<uint32_t>(keys.size())};
11361138
case Fragment::WRAP_A:
11371139
case Fragment::WRAP_N:
11381140
case Fragment::WRAP_S:

0 commit comments

Comments
 (0)