user82411: I'm working on extracting output addresses from tx messages in BITCOIN packets.
Currently, I extract address from output scripts which starts with 0x76(OP_DUP)
like this :
76 a9 14 6d 1d 74 58 95 6e 80 cd b4 c3 3f 1e d5 8e 91 c4 92 1a 85 d0 88

but i don't have any idea about some output scripts which start with 0xA9(OP_HASH160).
As an example, i don't know in below example, what is the raw script, which is used to generate output address?
a9 14 16 52 33 02 f2 ee d0 e0 aa 6a 4c 1d 0a 41 39 6f c2 6f 53 6e 87

How i can extract output address from output scripts which start with -xA9?

user81940: This seems to be a classical P2PKH script which start with op_dup flowed by op_hash160 if you look at the next byte there is the hex value 14 which is 20 in decimal and means read 20 byte of data and push it to the stack.
I have created a video in the past showing step by step how to dissect a P2PKH tx. Look: https://youtu.be/1n4g3eYX1UI

user90837: The first example that you have shown is a P2PKH address. The 0x14 indicates how many bytes to push onto the stack. 0x14 is 20 in decimal so the script pushes the next 20 bytes on the stack which is 6d 1d 74 58 95 6e 80 cd b4 c3 3f 1e d5 8e 91 c4 92 1a 85 d0.
The second case is a Pay to Script Hash example (P2SH). The script is HASH160 Push 20 bytes <redeem_script> OP_EQUAL>. Hence your redeem script in the second case is 16523302f2eed0e0aa6a4c1d0a41396fc26f536e. You would need to then Base58Check it with prefix of 0x05, this gives you the address as 33j3G4xMEn4CtKL5iYnsr97ww67wYh8TPY. 
Below is the python script that gives you the address:
import base58
from hashlib import sha256

redeem_script = '16523302f2eed0e0aa6a4c1d0a41396fc26f536e'
version = '05'
payload = version + redeem_script
checksum = sha256(sha256(bytes.fromhex(payload)).digest()).hexdigest()[:8]

pre_encoded_address = payload + checksum
address = base58.b58encode(bytes.fromhex(pre_encoded_address)).decode()


82411: <p>I'm working on extracting output addresses from tx messages in BITCOIN packets.</p>

<p>Currently, I extract address from output scripts which starts with 0x76(OP_DUP)
like this :</p>

<pre><code>76 a9 14 6d 1d 74 58 95 6e 80 cd b4 c3 3f 1e d5 8e 91 c4 92 1a 85 d0 88
</code></pre>

<p>but i don't have any idea about some output scripts which start with 0xA9(OP_HASH160).</p>

<p>As an example, i don't know in below example, what is the raw script, which is used to generate output address?</p>

<pre><code>a9 14 16 52 33 02 f2 ee d0 e0 aa 6a 4c 1d 0a 41 39 6f c2 6f 53 6e 87
</code></pre>

<p>How i can extract output address from output scripts which start with -xA9?</p>
 81940: <p>This seems to be a classical P2PKH script which start with <code>op_dup</code> flowed by <code>op_hash160</code> if you look at the next byte there is the hex value <code>14</code> which is 20 in decimal and means read 20 byte of data and push it to the stack.</p>

<p>I have created a video in the past showing step by step how to dissect a P2PKH tx. Look: <a href="https://youtu.be/1n4g3eYX1UI" rel="nofollow noreferrer">https://youtu.be/1n4g3eYX1UI</a></p>
 90837: <p>The first example that you have shown is a P2PKH address. The 0x14 indicates how many bytes to push onto the stack. 0x14 is 20 in decimal so the script pushes the next 20 bytes on the stack which is <code>6d 1d 74 58 95 6e 80 cd b4 c3 3f 1e d5 8e 91 c4 92 1a 85 d0</code>.</p>

<p>The second case is a Pay to Script Hash example (P2SH). The script is <code>HASH160 Push 20 bytes &lt;redeem_script&gt; OP_EQUAL&gt;</code>. Hence your redeem script in the second case is <code>16523302f2eed0e0aa6a4c1d0a41396fc26f536e</code>. You would need to then Base58Check it with prefix of 0x05, this gives you the address as <code>33j3G4xMEn4CtKL5iYnsr97ww67wYh8TPY</code>. </p>

<p>Below is the python script that gives you the address:</p>

<pre><code>import base58
from hashlib import sha256

redeem_script = '16523302f2eed0e0aa6a4c1d0a41396fc26f536e'
version = '05'
payload = version + redeem_script
checksum = sha256(sha256(bytes.fromhex(payload)).digest()).hexdigest()[:8]

pre_encoded_address = payload + checksum
address = base58.b58encode(bytes.fromhex(pre_encoded_address)).decode()
</code></pre>
