PHP WebShell
Текущая директория: /opt/BitGoJS/modules/utxo-lib/src
Просмотр файла: addressFormat.ts
/**
* Implements methods for nonstandard (non-canonical) address formats.
*
* Use `toOutputScriptTryFormats()` instead of `toOutputScript()` to parse addresses in
* non-canonical formats
*/
import { getMainnet, getNetworkName, isValidNetwork, Network, networks } from './networks';
import { fromOutputScript, toOutputScript } from './address';
import { bcashAddress } from './bitgo';
export const addressFormats = ['default', 'cashaddr'] as const;
export type AddressFormat = (typeof addressFormats)[number];
function isCashaddrNetwork(network: Network): boolean {
return isValidNetwork(network) && [networks.bitcoincash, networks.ecash].includes(getMainnet(network));
}
/**
* @param format
* @param network
* @return true iff format is supported for network
*/
export function isSupportedAddressFormat(format: AddressFormat, network: Network): boolean {
switch (format) {
case 'default':
return true;
case 'cashaddr':
return isCashaddrNetwork(network);
}
throw new Error(`unknown address format ${format}`);
}
/**
* @param outputScript
* @param format
* @param network
* @return address formatted using provided AddressFormat
*/
export function fromOutputScriptWithFormat(outputScript: Buffer, format: AddressFormat, network: Network): string {
if (!isSupportedAddressFormat(format, network)) {
throw new Error(`unsupported address format ${format} for network ${getNetworkName(network)}`);
}
return isCashaddrNetwork(network)
? bcashAddress.fromOutputScriptWithFormat(outputScript, format, network)
: fromOutputScript(outputScript, network);
}
/**
* @param address
* @param format
* @param network
* @return output script parsed with provided AddressFormat
*/
export function toOutputScriptWithFormat(address: string, format: AddressFormat, network: Network): Buffer {
if (!isSupportedAddressFormat(format, network)) {
throw new Error(`unsupported address format ${format} for network ${getNetworkName(network)}`);
}
return isCashaddrNetwork(network)
? bcashAddress.toOutputScriptWithFormat(address, format, network)
: toOutputScript(address, network);
}
/**
* Attempts to parse address with different address formats, returns first hit.
* @param address
* @param network
* @param formats - defaults to all supported address formats for network
* @return tuple with [AddressFormat, Buffer] containing format and parsed output script
*/
export function toOutputScriptAndFormat(
address: string,
network: Network,
formats?: AddressFormat[]
): [AddressFormat, Buffer] {
if (!formats) {
formats = addressFormats.filter((f) => isSupportedAddressFormat(f, network));
}
for (const format of formats) {
try {
return [format, toOutputScriptWithFormat(address, format, network)];
} catch (e) {
// try next
}
}
throw new Error(`could not parse outputScript [formats=${formats}]`);
}
/**
* Same as `toOutputScriptAndFormat`, only returning script
* @param address - {@see toOutputScriptAndFormat}
* @param network - {@see toOutputScriptAndFormat}
* @param formats - {@see toOutputScriptAndFormat}
* @return parsed output script
*/
export function toOutputScriptTryFormats(address: string, network: Network, formats?: AddressFormat[]): Buffer {
const [, outputScript] = toOutputScriptAndFormat(address, network, formats);
return outputScript;
}
/**
* @param address
* @param network
* @return address in canonical format
*/
export function toCanonicalFormat(address: string, network: Network): string {
return fromOutputScript(toOutputScriptTryFormats(address, network), network);
}
Выполнить команду
Для локальной разработки. Не используйте в интернете!