What's up with all the "q" in some bech32 Bitcoin addresses?

3 replies 484 views
mr_minerMember
Posts: 7 · Reputation: 66
#1Mar 5, 2017, 08:16 PM
Hey everyone, I came across some bech32 Bitcoin addresses that have a weird pattern with a ton of "q" in them. Check out these examples: bc1qmdtv5qqqqqp4qnz5ghlejq9evyuxgqqqqq9yj3zp2sydwcmqqqqq2j6wen bc1qqyqzr7gyq5qqqqsq9smqqqqqyyqq6qqqqg6ffrepsrrvmgjspk7srnq0kp bc1qd4sn6vpwxs6ngdf4qqsljpq9q5qqvqpvqyqqzqqcqqwqqqqrmy5q505e7m And then there are these bech32 addresses that look different (so probably for something else): bc1q9scnqtpn9sejcdza05qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq5wx2ys bc1q9scjcvpvxykrqtpn9s6jcvf39sc46lgqqqqqqqqqqqqqqqqqqqqqlcyp97 Seems like those might be burn addresses linked to certain protocols using Bitcoin. Anyone know which protocol is behind these addresses? A link to some docs about their structure would be super helpful. Appreciate it!
4 Reply Quote Share
im_apeHero Member
Posts: 629 · Reputation: 3824
#2Mar 7, 2017, 03:25 PM
Somebody is probably using this abusive method to inject data into the blockchain. If you look at the transactions that introduced these addresses into the database (instead of the addresses individually) you get a better idea of what is happening. It is a clearly abusive method creating multiple outputs with similar structure. For example this one: https://mempool.space/tx/e8b00ef950db37b33e3618516afc82710bdef17c3861bb5fb92174ee8556ec57 The first "fake"/burn address after the OP_RETURN contains 0x504e47 which is PNG if converted to UTF8. So it's possible that this is some silly pixel someone injected into the blockchain.
1 Reply Quote Share
mr_minerMember
Posts: 7 · Reputation: 66
#3Mar 7, 2017, 09:11 PM
Thanks for the answer. Which address are you referring to after the OP_RETURN, is it bc1qqpfgj5zwguxs5xs2qqqqqr2ffpz9yqqqqqqsqqqqqyqsxqqqqqjsma5wzf When I convert it to hex, I do not find the sequence 0x504e47. Most likely, I am not converting it correctly. Here is the code I am using. import bech32 addr = "bc1qqpfgj5zwguxs5xs2qqqqqr2ffpz9yqqqqqqsqqqqqyqsxqqqqqjsma5wzf" # decode to obtain a list of integers between 0 and 31 b = bech32.bech32_decode(addr)[1] # convert from 5 bits to 8 bits encoding decoded_data = bech32.convertbits(b, 5, 8, False) # create a hex string based on the previous byte array hex_string = "".join(f"{byte:02x}" for byte in decoded_data) can you help me? Thanks.
3 Reply Quote Share
im_apeHero Member
Posts: 629 · Reputation: 3824
#4Mar 8, 2017, 01:21 AM
Yes. In the link above, if you click on the Details button below the Diagram it will break the tx down to its components which is also decoding the address. It's a quick way of finding 0x504e47. Try using the decode method instead of bech32_decode when you want to decode an address that should solve the problem. It handles things better like removing the first 5-bits which is the witness version (convertbits(b[1:], 5, 8, False)) https://github.com/sipa/bech32/blob/master/ref/python/segwit_addr.py#L114
4 Reply Quote Share

Related topics