Skip to content

Commit 13282cd

Browse files
committed
Add comment to decoding x-only keys
1 parent 498bad2 commit 13282cd

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

src/miniscript/decode.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,15 @@ pub fn parse<Ctx: ScriptContext>(
301301
// Note this does not collide with hash32 because they always followed by equal
302302
// and would be parsed in different branch. If we get a naked Bytes32, it must be
303303
// a x-only key
304+
// In miniscript spec, bytes32 only occurs at three places.
305+
// - during parsing XOnly keys in Pk fragment
306+
// - during parsing XOnly keys in MultiA fragment
307+
// - checking for 32 bytes hashlocks (sha256/hash256)
308+
// The second case(MultiA) is disambiguated using NumEqual which is not used anywhere in miniscript
309+
// The third case can only occur hashlocks is disambiguated because hashlocks start from equal, and
310+
// it is impossible for any K type fragment to be followed by EQUAL in miniscript spec. Thus, EQUAL
311+
// after bytes32 means bytes32 is in a hashlock
312+
// Finally for the first case, K being parsed as a solo expression is a Pk type
304313
Tk::Bytes32(pk) => {
305314
let ret = Ctx::Key::from_slice(pk).map_err(|e| Error::PubKeyCtxError(e, Ctx::name_str()))?;
306315
term.reduce0(Terminal::PkK(ret))?

0 commit comments

Comments
 (0)