UNPKG

@bitgo/utxo-lib

Version:

Client-side Bitcoin JavaScript library

105 lines 12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.addressFormats = void 0; exports.isSupportedAddressFormat = isSupportedAddressFormat; exports.fromOutputScriptWithFormat = fromOutputScriptWithFormat; exports.toOutputScriptWithFormat = toOutputScriptWithFormat; exports.toOutputScriptAndFormat = toOutputScriptAndFormat; exports.toOutputScriptTryFormats = toOutputScriptTryFormats; exports.toCanonicalFormat = toCanonicalFormat; /** * 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']; function isCashaddrNetwork(network) { return (0, networks_1.isValidNetwork)(network) && [networks_1.networks.bitcoincash, networks_1.networks.ecash].includes((0, networks_1.getMainnet)(network)); } /** * @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 isCashaddrNetwork(network); } throw new Error(`unknown address format ${format}`); } /** * @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 ${(0, networks_1.getNetworkName)(network)}`); } return isCashaddrNetwork(network) ? bitgo_1.bcashAddress.fromOutputScriptWithFormat(outputScript, format, network) : (0, address_1.fromOutputScript)(outputScript, network); } /** * @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 ${(0, networks_1.getNetworkName)(network)}`); } return isCashaddrNetwork(network) ? bitgo_1.bcashAddress.toOutputScriptWithFormat(address, format, network) : (0, address_1.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 */ 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}]`); } /** * 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; } /** * @param address * @param network * @return address in canonical format */ function toCanonicalFormat(address, network) { return (0, address_1.fromOutputScript)(toOutputScriptTryFormats(address, network), network); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzc0Zvcm1hdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZGRyZXNzRm9ybWF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQXdCQSw0REFRQztBQVFELGdFQVFDO0FBUUQsNERBUUM7QUFTRCwwREFrQkM7QUFTRCw0REFHQztBQU9ELDhDQUVDO0FBaEhEOzs7OztHQUtHO0FBQ0gseUNBQTJGO0FBQzNGLHVDQUE2RDtBQUU3RCxtQ0FBdUM7QUFFMUIsUUFBQSxjQUFjLEdBQUcsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFVLENBQUM7QUFJL0QsU0FBUyxpQkFBaUIsQ0FBQyxPQUFnQjtJQUN6QyxPQUFPLElBQUEseUJBQWMsRUFBQyxPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFRLENBQUMsV0FBVyxFQUFFLG1CQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUEscUJBQVUsRUFBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3pHLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0Isd0JBQXdCLENBQUMsTUFBcUIsRUFBRSxPQUFnQjtJQUM5RSxRQUFRLE1BQU0sRUFBRSxDQUFDO1FBQ2YsS0FBSyxTQUFTO1lBQ1osT0FBTyxJQUFJLENBQUM7UUFDZCxLQUFLLFVBQVU7WUFDYixPQUFPLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLDBCQUEwQixDQUFDLFlBQW9CLEVBQUUsTUFBcUIsRUFBRSxPQUFnQjtJQUN0RyxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDL0MsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsTUFBTSxnQkFBZ0IsSUFBQSx5QkFBYyxFQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRUQsT0FBTyxpQkFBaUIsQ0FBQyxPQUFPLENBQUM7UUFDL0IsQ0FBQyxDQUFDLG9CQUFZLENBQUMsMEJBQTBCLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUM7UUFDeEUsQ0FBQyxDQUFDLElBQUEsMEJBQWdCLEVBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLE9BQWUsRUFBRSxNQUFxQixFQUFFLE9BQWdCO0lBQy9GLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUMvQyxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixNQUFNLGdCQUFnQixJQUFBLHlCQUFjLEVBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pHLENBQUM7SUFFRCxPQUFPLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztRQUMvQixDQUFDLENBQUMsb0JBQVksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztRQUNqRSxDQUFDLENBQUMsSUFBQSx3QkFBYyxFQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQ3JDLE9BQWUsRUFDZixPQUFnQixFQUNoQixPQUF5QjtJQUV6QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixPQUFPLEdBQUcsc0JBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFFRCxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQztZQUNILE9BQU8sQ0FBQyxNQUFNLEVBQUUsd0JBQXdCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsV0FBVztRQUNiLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0Isd0JBQXdCLENBQUMsT0FBZSxFQUFFLE9BQWdCLEVBQUUsT0FBeUI7SUFDbkcsTUFBTSxDQUFDLEVBQUUsWUFBWSxDQUFDLEdBQUcsdUJBQXVCLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1RSxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLE9BQWUsRUFBRSxPQUFnQjtJQUNqRSxPQUFPLElBQUEsMEJBQWdCLEVBQUMsd0JBQXdCLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9FLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEltcGxlbWVudHMgbWV0aG9kcyBmb3Igbm9uc3RhbmRhcmQgKG5vbi1jYW5vbmljYWwpIGFkZHJlc3MgZm9ybWF0cy5cbiAqXG4gKiBVc2UgYHRvT3V0cHV0U2NyaXB0VHJ5Rm9ybWF0cygpYCBpbnN0ZWFkIG9mIGB0b091dHB1dFNjcmlwdCgpYCB0byBwYXJzZSBhZGRyZXNzZXMgaW5cbiAqIG5vbi1jYW5vbmljYWwgZm9ybWF0c1xuICovXG5pbXBvcnQgeyBnZXRNYWlubmV0LCBnZXROZXR3b3JrTmFtZSwgaXNWYWxpZE5ldHdvcmssIE5ldHdvcmssIG5ldHdvcmtzIH0gZnJvbSAnLi9uZXR3b3Jrcyc7XG5pbXBvcnQgeyBmcm9tT3V0cHV0U2NyaXB0LCB0b091dHB1dFNjcmlwdCB9IGZyb20gJy4vYWRkcmVzcyc7XG5cbmltcG9ydCB7IGJjYXNoQWRkcmVzcyB9IGZyb20gJy4vYml0Z28nO1xuXG5leHBvcnQgY29uc3QgYWRkcmVzc0Zvcm1hdHMgPSBbJ2RlZmF1bHQnLCAnY2FzaGFkZHInXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQWRkcmVzc0Zvcm1hdCA9ICh0eXBlb2YgYWRkcmVzc0Zvcm1hdHMpW251bWJlcl07XG5cbmZ1bmN0aW9uIGlzQ2FzaGFkZHJOZXR3b3JrKG5ldHdvcms6IE5ldHdvcmspOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzVmFsaWROZXR3b3JrKG5ldHdvcmspICYmIFtuZXR3b3Jrcy5iaXRjb2luY2FzaCwgbmV0d29ya3MuZWNhc2hdLmluY2x1ZGVzKGdldE1haW5uZXQobmV0d29yaykpO1xufVxuXG4vKipcbiAqIEBwYXJhbSBmb3JtYXRcbiAqIEBwYXJhbSBuZXR3b3JrXG4gKiBAcmV0dXJuIHRydWUgaWZmIGZvcm1hdCBpcyBzdXBwb3J0ZWQgZm9yIG5ldHdvcmtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3VwcG9ydGVkQWRkcmVzc0Zvcm1hdChmb3JtYXQ6IEFkZHJlc3NGb3JtYXQsIG5ldHdvcms6IE5ldHdvcmspOiBib29sZWFuIHtcbiAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICBjYXNlICdkZWZhdWx0JzpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGNhc2UgJ2Nhc2hhZGRyJzpcbiAgICAgIHJldHVybiBpc0Nhc2hhZGRyTmV0d29yayhuZXR3b3JrKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd24gYWRkcmVzcyBmb3JtYXQgJHtmb3JtYXR9YCk7XG59XG5cbi8qKlxuICogQHBhcmFtIG91dHB1dFNjcmlwdFxuICogQHBhcmFtIGZvcm1hdFxuICogQHBhcmFtIG5ldHdvcmtcbiAqIEByZXR1cm4gYWRkcmVzcyBmb3JtYXR0ZWQgdXNpbmcgcHJvdmlkZWQgQWRkcmVzc0Zvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbU91dHB1dFNjcmlwdFdpdGhGb3JtYXQob3V0cHV0U2NyaXB0OiBCdWZmZXIsIGZvcm1hdDogQWRkcmVzc0Zvcm1hdCwgbmV0d29yazogTmV0d29yayk6IHN0cmluZyB7XG4gIGlmICghaXNTdXBwb3J0ZWRBZGRyZXNzRm9ybWF0KGZvcm1hdCwgbmV0d29yaykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGFkZHJlc3MgZm9ybWF0ICR7Zm9ybWF0fSBmb3IgbmV0d29yayAke2dldE5ldHdvcmtOYW1lKG5ldHdvcmspfWApO1xuICB9XG5cbiAgcmV0dXJuIGlzQ2FzaGFkZHJOZXR3b3JrKG5ldHdvcmspXG4gICAgPyBiY2FzaEFkZHJlc3MuZnJvbU91dHB1dFNjcmlwdFdpdGhGb3JtYXQob3V0cHV0U2NyaXB0LCBmb3JtYXQsIG5ldHdvcmspXG4gICAgOiBmcm9tT3V0cHV0U2NyaXB0KG91dHB1dFNjcmlwdCwgbmV0d29yayk7XG59XG5cbi8qKlxuICogQHBhcmFtIGFkZHJlc3NcbiAqIEBwYXJhbSBmb3JtYXRcbiAqIEBwYXJhbSBuZXR3b3JrXG4gKiBAcmV0dXJuIG91dHB1dCBzY3JpcHQgcGFyc2VkIHdpdGggcHJvdmlkZWQgQWRkcmVzc0Zvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9PdXRwdXRTY3JpcHRXaXRoRm9ybWF0KGFkZHJlc3M6IHN0cmluZywgZm9ybWF0OiBBZGRyZXNzRm9ybWF0LCBuZXR3b3JrOiBOZXR3b3JrKTogQnVmZmVyIHtcbiAgaWYgKCFpc1N1cHBvcnRlZEFkZHJlc3NGb3JtYXQoZm9ybWF0LCBuZXR3b3JrKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgYWRkcmVzcyBmb3JtYXQgJHtmb3JtYXR9IGZvciBuZXR3b3JrICR7Z2V0TmV0d29ya05hbWUobmV0d29yayl9YCk7XG4gIH1cblxuICByZXR1cm4gaXNDYXNoYWRkck5ldHdvcmsobmV0d29yaylcbiAgICA/IGJjYXNoQWRkcmVzcy50b091dHB1dFNjcmlwdFdpdGhGb3JtYXQoYWRkcmVzcywgZm9ybWF0LCBuZXR3b3JrKVxuICAgIDogdG9PdXRwdXRTY3JpcHQoYWRkcmVzcywgbmV0d29yayk7XG59XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gcGFyc2UgYWRkcmVzcyB3aXRoIGRpZmZlcmVudCBhZGRyZXNzIGZvcm1hdHMsIHJldHVybnMgZmlyc3QgaGl0LlxuICogQHBhcmFtIGFkZHJlc3NcbiAqIEBwYXJhbSBuZXR3b3JrXG4gKiBAcGFyYW0gZm9ybWF0cyAtIGRlZmF1bHRzIHRvIGFsbCBzdXBwb3J0ZWQgYWRkcmVzcyBmb3JtYXRzIGZvciBuZXR3b3JrXG4gKiBAcmV0dXJuIHR1cGxlIHdpdGggW0FkZHJlc3NGb3JtYXQsIEJ1ZmZlcl0gY29udGFpbmluZyBmb3JtYXQgYW5kIHBhcnNlZCBvdXRwdXQgc2NyaXB0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b091dHB1dFNjcmlwdEFuZEZvcm1hdChcbiAgYWRkcmVzczogc3RyaW5nLFxuICBuZXR3b3JrOiBOZXR3b3JrLFxuICBmb3JtYXRzPzogQWRkcmVzc0Zvcm1hdFtdXG4pOiBbQWRkcmVzc0Zvcm1hdCwgQnVmZmVyXSB7XG4gIGlmICghZm9ybWF0cykge1xuICAgIGZvcm1hdHMgPSBhZGRyZXNzRm9ybWF0cy5maWx0ZXIoKGYpID0+IGlzU3VwcG9ydGVkQWRkcmVzc0Zvcm1hdChmLCBuZXR3b3JrKSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGZvcm1hdCBvZiBmb3JtYXRzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBbZm9ybWF0LCB0b091dHB1dFNjcmlwdFdpdGhGb3JtYXQoYWRkcmVzcywgZm9ybWF0LCBuZXR3b3JrKV07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gdHJ5IG5leHRcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYGNvdWxkIG5vdCBwYXJzZSBvdXRwdXRTY3JpcHQgW2Zvcm1hdHM9JHtmb3JtYXRzfV1gKTtcbn1cblxuLyoqXG4gKiBTYW1lIGFzIGB0b091dHB1dFNjcmlwdEFuZEZvcm1hdGAsIG9ubHkgcmV0dXJuaW5nIHNjcmlwdFxuICogQHBhcmFtIGFkZHJlc3MgLSB7QHNlZSB0b091dHB1dFNjcmlwdEFuZEZvcm1hdH1cbiAqIEBwYXJhbSBuZXR3b3JrIC0ge0BzZWUgdG9PdXRwdXRTY3JpcHRBbmRGb3JtYXR9XG4gKiBAcGFyYW0gZm9ybWF0cyAtIHtAc2VlIHRvT3V0cHV0U2NyaXB0QW5kRm9ybWF0fVxuICogQHJldHVybiBwYXJzZWQgb3V0cHV0IHNjcmlwdFxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9PdXRwdXRTY3JpcHRUcnlGb3JtYXRzKGFkZHJlc3M6IHN0cmluZywgbmV0d29yazogTmV0d29yaywgZm9ybWF0cz86IEFkZHJlc3NGb3JtYXRbXSk6IEJ1ZmZlciB7XG4gIGNvbnN0IFssIG91dHB1dFNjcmlwdF0gPSB0b091dHB1dFNjcmlwdEFuZEZvcm1hdChhZGRyZXNzLCBuZXR3b3JrLCBmb3JtYXRzKTtcbiAgcmV0dXJuIG91dHB1dFNjcmlwdDtcbn1cblxuLyoqXG4gKiBAcGFyYW0gYWRkcmVzc1xuICogQHBhcmFtIG5ldHdvcmtcbiAqIEByZXR1cm4gYWRkcmVzcyBpbiBjYW5vbmljYWwgZm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0Nhbm9uaWNhbEZvcm1hdChhZGRyZXNzOiBzdHJpbmcsIG5ldHdvcms6IE5ldHdvcmspOiBzdHJpbmcge1xuICByZXR1cm4gZnJvbU91dHB1dFNjcmlwdCh0b091dHB1dFNjcmlwdFRyeUZvcm1hdHMoYWRkcmVzcywgbmV0d29yayksIG5ldHdvcmspO1xufVxuIl19