Пример диаграммы использования Segwit: https://p2sh.info/dashboard/db/segwit-usage?orgId=1
Я хотел бы проверить, проверив tx, является ли это транзакцией Segwit или нет.
Есть ли простой способ сделать это?
А как насчет того, когда в качестве входов и выходов задано множество типов адресов?
Транзакция является segwit tx, если хотя бы один из входов содержит свидетеля. Или, если вы проверяете необработанный tx, вы проверяете 5-й байт (количество входов), и если это так, то 0x00
это segwit tx.
Пример: тх1
02000000 05 5f4e5315ffe854e75db92f8dda952a8db2f63b37838fca4c32bd4bb692fe7ea2000000006a47304402200ab62a9d1858dceeaa2101cda3f31b7bae60471c0355c54a6eae48f723555806022010d2aad6362a8c56ed66b0670ff84175f534f4f0995f8724a9b2a5fc89a2a4b4012102c424c2670a7aade9cf867576064013d02cc7669c418968993e73e6b25fc122bcfeffffff80cb1bfcde0f309490c717eca07f1353f121fb13e105...
не является segwit tx, потому что количество входов 0x05
= 5
01000000 00 010106325bac2f2e7ca67fa46c8304fb3b747e5578df1eef0394349ce2cdd744f7f10100000000ffffffff02db355202000000001976a91489ea1263056ac068adba4844efb376a3a19635ad88ac43b72f07000000002...
является segwit tx, потому что количество входов 0x00
= 0
Также:
В вашем примере:
наследие -> P2SH
Это не может быть segwit tx, потому что он использует входные данные с устаревшего адреса.
P2SH -> наследие
Это может быть segwit tx, если адрес P2SH-P2WPKH или P2SH-P2WSH (вложенный segwit в P2SH). Вы не узнаете, является ли он вложенным, если он не ваш, если только кто-то уже не потратил его (в этом случае вы проверяете транзакцию расходов).
bech32 -> наследие
Это всегда segwit tx