@@ -312,30 +312,38 @@ static bool scriptpubkey_is_p2pkh(const unsigned char *bytes, size_t bytes_len)
312312{
313313 return bytes_len == WALLY_SCRIPTPUBKEY_P2PKH_LEN &&
314314 bytes [0 ] == OP_DUP && bytes [1 ] == OP_HASH160 &&
315- bytes [2 ] == 20 && bytes [23 ] == OP_EQUALVERIFY &&
315+ bytes [2 ] == 20 && /* HASH160 */
316+ bytes [23 ] == OP_EQUALVERIFY &&
316317 bytes [24 ] == OP_CHECKSIG ;
317318}
318319
319320static bool scriptpubkey_is_p2sh (const unsigned char * bytes , size_t bytes_len )
320321{
321322 return bytes_len == WALLY_SCRIPTPUBKEY_P2SH_LEN &&
322323 bytes [0 ] == OP_HASH160 &&
323- bytes [1 ] == 20 &&
324+ bytes [1 ] == 20 && /* HASH160 */
324325 bytes [22 ] == OP_EQUAL ;
325326}
326327
327328static bool scriptpubkey_is_p2wpkh (const unsigned char * bytes , size_t bytes_len )
328329{
329330 return bytes_len == WALLY_SCRIPTPUBKEY_P2WPKH_LEN &&
330- bytes [0 ] == 0 &&
331- bytes [1 ] == 20 ;
331+ bytes [0 ] == OP_0 && /* Segwit v0 */
332+ bytes [1 ] == 20 ; /* HASH160 */
332333}
333334
334335static bool scriptpubkey_is_p2wsh (const unsigned char * bytes , size_t bytes_len )
335336{
336337 return bytes_len == WALLY_SCRIPTPUBKEY_P2WSH_LEN &&
337- bytes [0 ] == 0 &&
338- bytes [1 ] == 32 ;
338+ bytes [0 ] == OP_0 && /* Segwit v0 */
339+ bytes [1 ] == 32 ; /* SHA256 */
340+ }
341+
342+ static bool scriptpubkey_is_p2tr (const unsigned char * bytes , size_t bytes_len )
343+ {
344+ return bytes_len == WALLY_SCRIPTPUBKEY_P2TR_LEN &&
345+ bytes [0 ] == OP_1 && /* Segwit v1 */
346+ bytes [1 ] == 32 ; /* X-ONLY-PUBKEY */
339347}
340348
341349static bool scriptpubkey_is_multisig (const unsigned char * bytes , size_t bytes_len )
@@ -400,10 +408,13 @@ int wally_scriptpubkey_get_type(const unsigned char *bytes, size_t bytes_len,
400408 return WALLY_OK ;
401409 }
402410 break ;
403- case WALLY_SCRIPTPUBKEY_P2WSH_LEN :
411+ case WALLY_SCRIPTPUBKEY_P2WSH_LEN : /* Also WALLY_SCRIPTPUBKEY_P2TR_LEN */
404412 if (scriptpubkey_is_p2wsh (bytes , bytes_len )) {
405413 * written = WALLY_SCRIPT_TYPE_P2WSH ;
406414 return WALLY_OK ;
415+ } else if (scriptpubkey_is_p2tr (bytes , bytes_len )) {
416+ * written = WALLY_SCRIPT_TYPE_P2TR ;
417+ return WALLY_OK ;
407418 }
408419 break ;
409420 }
0 commit comments