UNPKG

@bitgo-beta/utxo-lib

Version:

Client-side Bitcoin JavaScript library

108 lines 11.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.toCanonicalFormat = exports.toOutputScriptTryFormats = exports.toOutputScriptAndFormat = exports.toOutputScriptWithFormat = exports.fromOutputScriptWithFormat = exports.isSupportedAddressFormat = exports.addressFormats = void 0; /** * Implements methods for nonstandard (non-canonical) address formats. * * Use `toOutputScriptTryFormats()` instead of `toOutputScript()` to parse addresses in * non-canonical formats */ const networks_1 = require("./networks"); const address_1 = require("./address"); const bitgo_1 = require("./bitgo"); exports.addressFormats = ['default', 'cashaddr']; /** * @param format * @param network * @return true iff format is supported for network */ function isSupportedAddressFormat(format, network) { switch (format) { case 'default': return true; case 'cashaddr': return networks_1.getMainnet(network) === networks_1.networks.bitcoincash; } throw new Error(`unknown address format ${format}`); } exports.isSupportedAddressFormat = isSupportedAddressFormat; /** * @param outputScript * @param format * @param network * @return address formatted using provided AddressFormat */ function fromOutputScriptWithFormat(outputScript, format, network) { if (!isSupportedAddressFormat(format, network)) { throw new Error(`unsupported address format ${format} for network ${networks_1.getNetworkName(network)}`); } switch (networks_1.getMainnet(network)) { case networks_1.networks.bitcoincash: return bitgo_1.bcashAddress.fromOutputScriptWithFormat(outputScript, format, network); default: return address_1.fromOutputScript(outputScript, network); } } exports.fromOutputScriptWithFormat = fromOutputScriptWithFormat; /** * @param address * @param format * @param network * @return output script parsed with provided AddressFormat */ function toOutputScriptWithFormat(address, format, network) { if (!isSupportedAddressFormat(format, network)) { throw new Error(`unsupported address format ${format} for network ${networks_1.getNetworkName(network)}`); } switch (networks_1.getMainnet(network)) { case networks_1.networks.bitcoincash: return bitgo_1.bcashAddress.toOutputScriptWithFormat(address, format, network); default: return address_1.toOutputScript(address, network); } } exports.toOutputScriptWithFormat = toOutputScriptWithFormat; /** * 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 */ function toOutputScriptAndFormat(address, network, formats) { if (!formats) { formats = exports.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}]`); } exports.toOutputScriptAndFormat = toOutputScriptAndFormat; /** * Same as `toOutputScriptAndFormat`, only returning script * @param address - {@see toOutputScriptAndFormat} * @param network - {@see toOutputScriptAndFormat} * @param formats - {@see toOutputScriptAndFormat} * @return parsed output script */ function toOutputScriptTryFormats(address, network, formats) { const [, outputScript] = toOutputScriptAndFormat(address, network, formats); return outputScript; } exports.toOutputScriptTryFormats = toOutputScriptTryFormats; /** * @param address * @param network * @return address in canonical format */ function toCanonicalFormat(address, network) { return address_1.fromOutputScript(toOutputScriptTryFormats(address, network), network); } exports.toCanonicalFormat = toCanonicalFormat; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzc0Zvcm1hdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZGRyZXNzRm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7OztHQUtHO0FBQ0gseUNBQTJFO0FBQzNFLHVDQUE2RDtBQUU3RCxtQ0FBdUM7QUFFMUIsUUFBQSxjQUFjLEdBQUcsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFVLENBQUM7QUFJL0Q7Ozs7R0FJRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLE1BQXFCLEVBQUUsT0FBZ0I7SUFDOUUsUUFBUSxNQUFNLEVBQUU7UUFDZCxLQUFLLFNBQVM7WUFDWixPQUFPLElBQUksQ0FBQztRQUNkLEtBQUssVUFBVTtZQUNiLE9BQU8scUJBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxtQkFBUSxDQUFDLFdBQVcsQ0FBQztLQUN2RDtJQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDdEQsQ0FBQztBQVJELDREQVFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQiwwQkFBMEIsQ0FBQyxZQUFvQixFQUFFLE1BQXFCLEVBQUUsT0FBZ0I7SUFDdEcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRTtRQUM5QyxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixNQUFNLGdCQUFnQix5QkFBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNoRztJQUVELFFBQVEscUJBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUMzQixLQUFLLG1CQUFRLENBQUMsV0FBVztZQUN2QixPQUFPLG9CQUFZLENBQUMsMEJBQTBCLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRjtZQUNFLE9BQU8sMEJBQWdCLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0tBQ2xEO0FBQ0gsQ0FBQztBQVhELGdFQVdDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQix3QkFBd0IsQ0FBQyxPQUFlLEVBQUUsTUFBcUIsRUFBRSxPQUFnQjtJQUMvRixJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLE1BQU0sZ0JBQWdCLHlCQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ2hHO0lBRUQsUUFBUSxxQkFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQzNCLEtBQUssbUJBQVEsQ0FBQyxXQUFXO1lBQ3ZCLE9BQU8sb0JBQVksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3pFO1lBQ0UsT0FBTyx3QkFBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztLQUMzQztBQUNILENBQUM7QUFYRCw0REFXQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLHVCQUF1QixDQUNyQyxPQUFlLEVBQ2YsT0FBZ0IsRUFDaEIsT0FBeUI7SUFFekIsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNaLE9BQU8sR0FBRyxzQkFBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7S0FDOUU7SUFFRCxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRTtRQUM1QixJQUFJO1lBQ0YsT0FBTyxDQUFDLE1BQU0sRUFBRSx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDckU7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLFdBQVc7U0FDWjtLQUNGO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBbEJELDBEQWtCQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLE9BQWUsRUFBRSxPQUFnQixFQUFFLE9BQXlCO0lBQ25HLE1BQU0sQ0FBQyxFQUFFLFlBQVksQ0FBQyxHQUFHLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUUsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQUhELDREQUdDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLE9BQWUsRUFBRSxPQUFnQjtJQUNqRSxPQUFPLDBCQUFnQixDQUFDLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMvRSxDQUFDO0FBRkQsOENBRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEltcGxlbWVudHMgbWV0aG9kcyBmb3Igbm9uc3RhbmRhcmQgKG5vbi1jYW5vbmljYWwpIGFkZHJlc3MgZm9ybWF0cy5cbiAqXG4gKiBVc2UgYHRvT3V0cHV0U2NyaXB0VHJ5Rm9ybWF0cygpYCBpbnN0ZWFkIG9mIGB0b091dHB1dFNjcmlwdCgpYCB0byBwYXJzZSBhZGRyZXNzZXMgaW5cbiAqIG5vbi1jYW5vbmljYWwgZm9ybWF0c1xuICovXG5pbXBvcnQgeyBnZXRNYWlubmV0LCBnZXROZXR3b3JrTmFtZSwgTmV0d29yaywgbmV0d29ya3MgfSBmcm9tICcuL25ldHdvcmtzJztcbmltcG9ydCB7IGZyb21PdXRwdXRTY3JpcHQsIHRvT3V0cHV0U2NyaXB0IH0gZnJvbSAnLi9hZGRyZXNzJztcblxuaW1wb3J0IHsgYmNhc2hBZGRyZXNzIH0gZnJvbSAnLi9iaXRnbyc7XG5cbmV4cG9ydCBjb25zdCBhZGRyZXNzRm9ybWF0cyA9IFsnZGVmYXVsdCcsICdjYXNoYWRkciddIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBBZGRyZXNzRm9ybWF0ID0gdHlwZW9mIGFkZHJlc3NGb3JtYXRzW251bWJlcl07XG5cbi8qKlxuICogQHBhcmFtIGZvcm1hdFxuICogQHBhcmFtIG5ldHdvcmtcbiAqIEByZXR1cm4gdHJ1ZSBpZmYgZm9ybWF0IGlzIHN1cHBvcnRlZCBmb3IgbmV0d29ya1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTdXBwb3J0ZWRBZGRyZXNzRm9ybWF0KGZvcm1hdDogQWRkcmVzc0Zvcm1hdCwgbmV0d29yazogTmV0d29yayk6IGJvb2xlYW4ge1xuICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgIGNhc2UgJ2RlZmF1bHQnOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSAnY2FzaGFkZHInOlxuICAgICAgcmV0dXJuIGdldE1haW5uZXQobmV0d29yaykgPT09IG5ldHdvcmtzLmJpdGNvaW5jYXNoO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgdW5rbm93biBhZGRyZXNzIGZvcm1hdCAke2Zvcm1hdH1gKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gb3V0cHV0U2NyaXB0XG4gKiBAcGFyYW0gZm9ybWF0XG4gKiBAcGFyYW0gbmV0d29ya1xuICogQHJldHVybiBhZGRyZXNzIGZvcm1hdHRlZCB1c2luZyBwcm92aWRlZCBBZGRyZXNzRm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tT3V0cHV0U2NyaXB0V2l0aEZvcm1hdChvdXRwdXRTY3JpcHQ6IEJ1ZmZlciwgZm9ybWF0OiBBZGRyZXNzRm9ybWF0LCBuZXR3b3JrOiBOZXR3b3JrKTogc3RyaW5nIHtcbiAgaWYgKCFpc1N1cHBvcnRlZEFkZHJlc3NGb3JtYXQoZm9ybWF0LCBuZXR3b3JrKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgYWRkcmVzcyBmb3JtYXQgJHtmb3JtYXR9IGZvciBuZXR3b3JrICR7Z2V0TmV0d29ya05hbWUobmV0d29yayl9YCk7XG4gIH1cblxuICBzd2l0Y2ggKGdldE1haW5uZXQobmV0d29yaykpIHtcbiAgICBjYXNlIG5ldHdvcmtzLmJpdGNvaW5jYXNoOlxuICAgICAgcmV0dXJuIGJjYXNoQWRkcmVzcy5mcm9tT3V0cHV0U2NyaXB0V2l0aEZvcm1hdChvdXRwdXRTY3JpcHQsIGZvcm1hdCwgbmV0d29yayk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmcm9tT3V0cHV0U2NyaXB0KG91dHB1dFNjcmlwdCwgbmV0d29yayk7XG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0gYWRkcmVzc1xuICogQHBhcmFtIGZvcm1hdFxuICogQHBhcmFtIG5ldHdvcmtcbiAqIEByZXR1cm4gb3V0cHV0IHNjcmlwdCBwYXJzZWQgd2l0aCBwcm92aWRlZCBBZGRyZXNzRm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b091dHB1dFNjcmlwdFdpdGhGb3JtYXQoYWRkcmVzczogc3RyaW5nLCBmb3JtYXQ6IEFkZHJlc3NGb3JtYXQsIG5ldHdvcms6IE5ldHdvcmspOiBCdWZmZXIge1xuICBpZiAoIWlzU3VwcG9ydGVkQWRkcmVzc0Zvcm1hdChmb3JtYXQsIG5ldHdvcmspKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBhZGRyZXNzIGZvcm1hdCAke2Zvcm1hdH0gZm9yIG5ldHdvcmsgJHtnZXROZXR3b3JrTmFtZShuZXR3b3JrKX1gKTtcbiAgfVxuXG4gIHN3aXRjaCAoZ2V0TWFpbm5ldChuZXR3b3JrKSkge1xuICAgIGNhc2UgbmV0d29ya3MuYml0Y29pbmNhc2g6XG4gICAgICByZXR1cm4gYmNhc2hBZGRyZXNzLnRvT3V0cHV0U2NyaXB0V2l0aEZvcm1hdChhZGRyZXNzLCBmb3JtYXQsIG5ldHdvcmspO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdG9PdXRwdXRTY3JpcHQoYWRkcmVzcywgbmV0d29yayk7XG4gIH1cbn1cblxuLyoqXG4gKiBBdHRlbXB0cyB0byBwYXJzZSBhZGRyZXNzIHdpdGggZGlmZmVyZW50IGFkZHJlc3MgZm9ybWF0cywgcmV0dXJucyBmaXJzdCBoaXQuXG4gKiBAcGFyYW0gYWRkcmVzc1xuICogQHBhcmFtIG5ldHdvcmtcbiAqIEBwYXJhbSBmb3JtYXRzIC0gZGVmYXVsdHMgdG8gYWxsIHN1cHBvcnRlZCBhZGRyZXNzIGZvcm1hdHMgZm9yIG5ldHdvcmtcbiAqIEByZXR1cm4gdHVwbGUgd2l0aCBbQWRkcmVzc0Zvcm1hdCwgQnVmZmVyXSBjb250YWluaW5nIGZvcm1hdCBhbmQgcGFyc2VkIG91dHB1dCBzY3JpcHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvT3V0cHV0U2NyaXB0QW5kRm9ybWF0KFxuICBhZGRyZXNzOiBzdHJpbmcsXG4gIG5ldHdvcms6IE5ldHdvcmssXG4gIGZvcm1hdHM/OiBBZGRyZXNzRm9ybWF0W11cbik6IFtBZGRyZXNzRm9ybWF0LCBCdWZmZXJdIHtcbiAgaWYgKCFmb3JtYXRzKSB7XG4gICAgZm9ybWF0cyA9IGFkZHJlc3NGb3JtYXRzLmZpbHRlcigoZikgPT4gaXNTdXBwb3J0ZWRBZGRyZXNzRm9ybWF0KGYsIG5ldHdvcmspKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgZm9ybWF0IG9mIGZvcm1hdHMpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIFtmb3JtYXQsIHRvT3V0cHV0U2NyaXB0V2l0aEZvcm1hdChhZGRyZXNzLCBmb3JtYXQsIG5ldHdvcmspXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyB0cnkgbmV4dFxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgY291bGQgbm90IHBhcnNlIG91dHB1dFNjcmlwdCBbZm9ybWF0cz0ke2Zvcm1hdHN9XWApO1xufVxuXG4vKipcbiAqIFNhbWUgYXMgYHRvT3V0cHV0U2NyaXB0QW5kRm9ybWF0YCwgb25seSByZXR1cm5pbmcgc2NyaXB0XG4gKiBAcGFyYW0gYWRkcmVzcyAtIHtAc2VlIHRvT3V0cHV0U2NyaXB0QW5kRm9ybWF0fVxuICogQHBhcmFtIG5ldHdvcmsgLSB7QHNlZSB0b091dHB1dFNjcmlwdEFuZEZvcm1hdH1cbiAqIEBwYXJhbSBmb3JtYXRzIC0ge0BzZWUgdG9PdXRwdXRTY3JpcHRBbmRGb3JtYXR9XG4gKiBAcmV0dXJuIHBhcnNlZCBvdXRwdXQgc2NyaXB0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b091dHB1dFNjcmlwdFRyeUZvcm1hdHMoYWRkcmVzczogc3RyaW5nLCBuZXR3b3JrOiBOZXR3b3JrLCBmb3JtYXRzPzogQWRkcmVzc0Zvcm1hdFtdKTogQnVmZmVyIHtcbiAgY29uc3QgWywgb3V0cHV0U2NyaXB0XSA9IHRvT3V0cHV0U2NyaXB0QW5kRm9ybWF0KGFkZHJlc3MsIG5ldHdvcmssIGZvcm1hdHMpO1xuICByZXR1cm4gb3V0cHV0U2NyaXB0O1xufVxuXG4vKipcbiAqIEBwYXJhbSBhZGRyZXNzXG4gKiBAcGFyYW0gbmV0d29ya1xuICogQHJldHVybiBhZGRyZXNzIGluIGNhbm9uaWNhbCBmb3JtYXRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ2Fub25pY2FsRm9ybWF0KGFkZHJlc3M6IHN0cmluZywgbmV0d29yazogTmV0d29yayk6IHN0cmluZyB7XG4gIHJldHVybiBmcm9tT3V0cHV0U2NyaXB0KHRvT3V0cHV0U2NyaXB0VHJ5Rm9ybWF0cyhhZGRyZXNzLCBuZXR3b3JrKSwgbmV0d29yayk7XG59XG4iXX0=