def getnewdestination(address_type='bech32m'): """Generate a random destination of the specified type and return the corresponding public key, scriptPubKey and address. Supported types are 'legacy', 'p2sh-segwit', 'bech32' and 'bech32m'. Can be used when a random destination is needed, but no compiled wallet is available (e.g. as replacement to the getnewaddress/getaddressinfo RPCs).""" key = ECKey() key.generate() pubkey = key.get_pubkey().get_bytes() if address_type == 'legacy': scriptpubkey = key_to_p2pkh_script(pubkey) address = key_to_p2pkh(pubkey) elif address_type == 'p2sh-segwit': scriptpubkey = key_to_p2sh_p2wpkh_script(pubkey) address = key_to_p2sh_p2wpkh(pubkey) elif address_type == 'bech32': scriptpubkey = key_to_p2wpkh_script(pubkey) address = key_to_p2wpkh(pubkey) elif address_type == 'bech32m': tap = taproot_construct(compute_xonly_pubkey(key.get_bytes())[0]) pubkey = tap.output_pubkey scriptpubkey = tap.scriptPubKey address = output_key_to_p2tr(pubkey) else: assert False return pubkey, scriptpubkey, address
def getnewdestination(address_type='bech32'): """Generate a random destination of the specified type and return the corresponding public key, scriptPubKey and address. Supported types are 'legacy', 'p2sh-segwit' and 'bech32'. Can be used when a random destination is needed, but no compiled wallet is available (e.g. as replacement to the getnewaddress/getaddressinfo RPCs).""" key = ECKey() key.generate() pubkey = key.get_pubkey().get_bytes() if address_type == 'legacy': scriptpubkey = key_to_p2pkh_script(pubkey) address = key_to_p2pkh(pubkey) elif address_type == 'p2sh-segwit': scriptpubkey = key_to_p2sh_p2wpkh_script(pubkey) address = key_to_p2sh_p2wpkh(pubkey) elif address_type == 'bech32': scriptpubkey = key_to_p2wpkh_script(pubkey) address = key_to_p2wpkh(pubkey) # TODO: also support bech32m (need to generate x-only-pubkey) else: assert False return pubkey, scriptpubkey, address