Naming in segwit script
P2SH-P2WSH:


Witness script: OP_3 &lt;public key1&gt; &lt;public key2&gt; &lt;public key3&gt; OP_2 OP_CHECKMULTSIG
Witness program: SHA256(witness script)
redeemScript: OP_0 &lt;witness program&gt;
Script hash: Hash160(redeemScript)
scriptPubKey: OP_HASH160 &lt;script hash&gt; OP_EQUAL


P2SH-P2WPKH (I believe that's what you meant instead of "P2WSH-P2PKH"):


Witness program: Hash160(public key)
redeemScript: OP_0 &lt;witness program&gt;
Script hash: Hash160(redeemScript)
scriptPubKey: OP_HASH160 &lt;script hash&gt; OP_EQUAL


P2WSH-P2PKH (native P2WSH, but with a P2PKH script inside):


Witness script: OP_DUP OP_HASH160 &lt;Hash160(pubkey)&gt; OP_EQUALVERIFY OP_CHECKSIG
Witness program: SHA256(witness script)
scriptPubKey: OP_0 &lt;witness program&gt;


Note that you should use P2WPKH instead of this.

Native P2WPKH


Witness program: Hash160(public key)
scriptPubKey: OP_0 &lt;witness program&gt;


Native P2WSH


Witness script: OP_3 &lt;public key1&gt; &lt;public key2&gt; &lt;public key3&gt; OP_2 OP_CHECKMULTISIG
Witness program: SHA256(witness script)
scriptPubKey: OP_0 &lt;witness program&gt;