Could someone provide an example of how to use the python reference implementation for generating a bech32 address?

For example, generating a mainnet bech32 address for this scriptPubKey: "0014751e76e8199196d454941c45d1b3a323f1433bd6"


2 Answers 2


The reference implementation provides a handy all-in-one encode function. To encode the scriptPubKey 0014751e76e8199196d454941c45d1b3a323f1433bd6 as a mainnet bech32 address, you would do:

import bech32
import binascii

spk = binascii.unhexlify('0014751e76e8199196d454941c45d1b3a323f1433bd6')
version = spk[0] - 0x50 if spk[0] else 0
program = spk[2:]
print(bech32.encode('bc', version, program))

To add to Andrew's answer I recently used the above code snippet to generate bech32m addresses from P2TR scriptPubKeys.

I cloned the bech32 repo and then created a file for the code snippet in the bech/ref/python directory.

I took a P2TR scriptPubKey from the BIP 341 test vectors e.g. 5120712447206d7a5238acc7ff53fbe94a3b64539ad291c7cdbc490b7577e4b17df5

Then this slightly adjusted code generated the associated bech32m address (bc1pwyjywgrd0ffr3tx8laflh6228dj98xkjj8rum0zfpd6h0e930h6saqxrrm).

import segwit_addr
import binascii

spk = binascii.unhexlify('5120712447206d7a5238acc7ff53fbe94a3b64539ad291c7cdbc490b7577e4b17df5')
version = spk[0] - 0x50 if spk[0] else 0
program = spk[2:]
print(segwit_addr.encode('bc', version, program))

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.