I’m trying to understand Bitcoin address encodings. I understand there’s three (four?) different address encodings P2PKH, P2SH, Bech32, and Bech32m (Bech32m just uses a different constant when XORing). They all encode the public key using Ripe160 (RIPEMD160?). I was able to use some libraries to extract the ripe160 encoded address, which should be 20 bytes, but there are some longer strings in this list of addresses with currency:
Bitcoin addresses with currency from loyce.com
34xp4vRoCGJym3xR7yCVPFHoCNxv4Twseo **bc1qgdjqv0av3q56jvd82tkdjpy7gdp9ut8tlqmgrpmv24sq90ecnvqqjwvw97** 1P5ZEDWTKTFGxQjZphgWPQUpe554WKDfHQ 37XuVSEpWW4trkfmvWzegTHQt7BdktSKUs 38UmuUqPCrFmQo4khkomQwZ4VbY2nZMJ67 3Kzh9qAqVWQhEsfQz7zEQL1EuSx5tyNLNS 1FeexV6bAHb8ybZjqQMjJrcCrHGW9sb6uF 3LYJfcfHPXYJreMsASk2jkn69LWEYKzexb bc1qa5wkgaew2dkv56kfvj49j0av5nml45x9ek9hz6 1LdRcdxfbSnmCYYNdeYpUnztiYzVfBEQeC 1AC4fMwgY8j9onSbXEWeH6Zan8QGMSdmtA 1LruNZjwamWJXThX2Y8C2d47QqhAkkc5os 1NDyJtNTjmwk5xPNhjgAMu4HDHigtobu1s 3Gpex6g5FPmYWm26myFq7dW12ntd8zMcCY bc1q5shngj24323nsrmxv99st02na6srekfctt30ch 385cR5DM96n1HvBDMzLHPYcw89fZAXULJP 3LQUu4v9z6KNch71j7kbj8GPeAGUo1FW6a **bc1q5pucatprjrqltdp58f92mhqkfuvwpa43vhsjwpxlryude0plzyhqjkqazp** ...
They start with
bc1 so that indicates Bech32, correct? When decoding using something like bech32-buffer I get 32 bytes.
In doing some more digging, there’s also this scriptPubKey encoding. Is that what these long encodings are? How do you differentiate them? I assume since the site is listing address with currency, I should be able to pull the ripe160 address from the script, are there any recommended parsers?
I found another post which suggests doing pattern matching, and pulling the parsing code from Bitcoin Core. Am I heading down the correct path here?