/**
 * @license
 * https://reviews.bitcoinabc.org
 * Copyright (c) 2017-2020 Emilio Almansi
 * Copyright (c) 2023-2024 Bitcoin ABC
 * Distributed under the MIT software license, see the accompanying
 * file LICENSE or http://www.opensource.org/licenses/mit-license.php.
 */
import { AddressType, DecodedAddress, TypeAndHash } from './types';
/**
 * Encoding and decoding of the new Cash Address format for eCash. <br />
 * Compliant with the original cashaddr specification:
 * {@link https://github.com/bitcoincashorg/bitcoincash.org/blob/master/spec/cashaddr.md}
 * @module cashaddr
 */
/**
 * Encodes a hash from a given type into an eCash address with the given prefix.
 *
 * @param prefix Cash address prefix. E.g.: 'ecash'.
 * @param type Type of address to generate
 * @param hash Hash to encode represented as an array of 8-bit integers.
 * @throws {ValidationError}
 */
export declare function encodeCashAddress(prefix: string, type: AddressType, hash: Uint8Array | string): string;
/**
 * Decodes the given address into its constituting prefix, type and hash. See [#encode()]{@link encode}.
 *
 * @param address Address to decode. E.g.: 'ecash:qpm2qsznhks23z7629mms6s4cwef74vcwva87rkuu2'.
 * @throws {ValidationError}
 */
export declare function decodeCashAddress(address: string): DecodedAddress;
/**
 * All valid address prefixes
 * Note that as of 2.0.0 we do not validate against these prefixes
 * However we do use them to guess prefix for prefixless addrs
 *
 * @private
 */
export declare const VALID_PREFIXES: string[];
/**
 * Returns a uint8array for a given string input
 *
 * @private
 * @param uint8Array Input string.
 */
export declare function uint8arrayToHexString(uint8Array: Uint8Array): string;
/**
 * Get type and hash from an outputScript
 *
 * Supported outputScripts:
 *
 * P2PKH: 76a914<hash>88ac
 * P2SH:  a914<hash>87
 *
 * Validates for supported outputScript and hash length *
 *
 * @param outputScript an ecash tx outputScript
 * @throws {ValidationError}
 */
export declare function getTypeAndHashFromOutputScript(outputScript: string): TypeAndHash;
export declare const getOutputScriptFromTypeAndHash: (type: AddressType, hash: string) => string;
/**
 * Encodes a given outputScript into an eCash address using the optionally specified prefix.
 *
 * @static
 * @param outputScript an ecash tx outputScript
 * @param prefix Cash address prefix. E.g.: 'ecash'.
 * @throws {ValidationError}
 */
export declare function encodeOutputScript(outputScript: string, prefix?: string): string;
/**
 * Return true for a valid cashaddress
 * Prefixless addresses with valid checksum are also valid
 *
 * @static
 * @param testedAddress a string tested for cashaddress validity
 * @param optionalPrefix cashaddr prefix
 * @throws {ValidationError}
 */
export declare function isValidCashAddress(cashaddress: string, optionalPrefix?: boolean | string): boolean;
/**
 * Return true for a valid cashaddress
 * Prefixless addresses with valid checksum are also valid
 *
 * @static
 * @param address a valid p2pkh or p2sh cash address
 * @returns the outputScript associated with this address and type
 * @throws {ValidationError} if decode fails
 */
export declare function getOutputScriptFromAddress(address: string): string;
