What are the standard formats of transaction outputs? A transaction output can have the type


Pay to public key hash, P2PKH, where the ScriptPubKey field has the format:

76 a9 14 &lt;20-byte hash of pubkey> 88 ac
Pay to script hash, P2SH, used for e.g. multisig:

a9 14 &lt;20-byte hash of script> 87


There is also something called P2WPKH and P2WSH. Can you show me how these outputs are formatted, and are there any more possible output formats than these four?
AFAIK there are 5 different standard non-SegWit transaction types, and 4 SegWit ones.

Non-SegWit:

Pay to public key (P2PK)

PUSH (1 byte) + &lt;compressed/uncompressed_pk&gt; (33/65 bytes) + OP_CHECKSIG (1 byte)


Pay to public key hash (P2PKH)

OP_DUP (1 byte) + OP_HASH160 (1 byte) + PUSH (1 byte) + &lt;hash_160(PK)&gt; (20 bytes) + OP_EQUALVERIFY (1 byte) + OP_CHECKSIG (1 byte)


Multisig (P2MS)

&lt;number_of_PKs&gt; (1 byte) PUSH (1 byte) &lt;PK_0&gt; (33/65 bytes) PUSH (1 byte) &lt;PK_1&gt; (33/65 bytes)  ... PUSH (1 byte) &lt;PK_n-1&gt; (33/65 bytes) OP_CHECKMULTISIG (1 byte)


P2MS allow up to 15-15 scripts, however only up to 3-3 are standard. 

Pay to script hash (P2SH)

OP_HASH160 (1 byte) + PUSH (1 byte) + &lt;hash160(redeem_script)&gt; (20 bytes) + OP_EQUAL (1 byte)


OP_Return

OP_RETURN (1 byte) PUSH (1 byte) &lt;0 to 83 bytes of data&gt;


SegWit:

Regarding segwit types, there are two non-native and two native ones.

Native Pay to witness public key hash (P2WPKH)

OP_0 (1 byte) PUSH (1 byte) &lt;hash 160(PK*)&gt; (20 bytes)


Native Pay to witness script hash (P2WSH)

OP_0 (1 byte) PUSH (1 byte) &lt;script_hash&gt; (32 bytes)


Pay to witness public key hash encapsulated in a pay to script hash (P2SH-P2WPKH)

The redeem script follows the same structure than native P2WPKH:

redeem_script = OP_0 (1 byte) PUSH (1 byte) &lt;hash_160(PK*)&gt; (20 bytes)

While the external structure of the script (scriptPubKey) is as any other P2SH:

OP_HASH160 (1 byte) + PUSH (1 byte) + &lt;hash_160(redeeem_script)&gt; (20 bytes) + OP_EQUAL (1 byte)


Pay to witness script hash encapsulated in a pay to script hash (P2SH-P2WSH)

The redeem script follows the same structure than native P2WSH:

redeem_script = OP_0 (1 byte) PUSH (1 byte) &lt;script_hash&gt; (32 bytes)

While the external structure of the script (scriptPubKey) is as any other P2SH:

OP_HASH160 (1 byte) + PUSH (1 byte) + &lt;hash_160(redeeem_script)&gt; (20 bytes) + OP_EQUAL (1 byte)


*In P2WPKH scripts the hash 160 should correspond to a compressed public key, otherwise the funds will be lost.