UNPKG

@unique-nft/api

Version:

Definitely typed JS API for the Unique Network blockchain

1 lines 32.6 kB
{"version":3,"sources":["../src/utils/address/constants.ts","../src/utils/address/imports.ts","../src/utils/address/stringUtils.ts","../src/tsUtils.ts","../src/utils/address/ethereum.ts","../src/utils/address/substrate.ts","../src/utils/address/crossAccountId.ts","../src/utils/address/index.ts"],"sourcesContent":["export const STATIC_ADDRESSES = <const>{\r\n contractHelpers: '0x842899ECF380553E8a4de75bF534cdf6fBF64049',\r\n collectionHelpers: '0x6C4E9fE1AE37a41E93CEE429e8E1881aBdcbb54F',\r\n}\r\nexport const NESTING_PREFIX = <const>'0xf8238ccfff8ed887463fd5e0'\r\nexport const COLLECTION_ADDRESS_PREFIX = <const>'0x17c4e6453cc49aaaaeaca894e6d9683e'\r\n","import basex from 'base-x'\r\nimport {keccak_256} from '@noble/hashes/sha3'\r\nimport {blake2b} from '@noble/hashes/blake2b'\r\n\r\nconst BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\r\nconst BASE64_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\r\n\r\nconst base58 = basex(BASE58_ALPHABET)\r\nconst base64 = basex(BASE64_ALPHABET)\r\n\r\nexport {keccak_256, blake2b, base58, base64, basex}\r\n","import {safeJSONParse} from \"../../tsUtils\";\n\nexport const vec2str = (arr: Array<number | string>) => {\n return arr\n .map(x => String.fromCharCode(typeof x === 'number' ? x : parseInt(x, 10)))\n .join('')\n}\n\nexport const str2vec = (str: string) => {\n if (typeof str !== 'string') {\n return str\n }\n return str.split('').map(x => x.charCodeAt(0))\n}\n\nexport const strToU8a = (str: string): Uint8Array => new Uint8Array(str2vec(str))\n\nexport const hexToU8a = (hexString: string): Uint8Array =>\n Uint8Array.from(((hexString.startsWith('0x') ? hexString.slice(2) : hexString).match(/.{1,2}/g) || []).map((byte) => parseInt(byte, 16)))\n\nexport const u8aToHex = (bytes: number[] | Uint8Array): string => {\n const arr = bytes instanceof Uint8Array ? Array.from(bytes) : bytes\n return '0x' + arr.reduce((str, byte) => str + byte.toString(16).padStart(2, '0'), '');\n}\n\nexport const hexStringToString = (hexString: string): string =>\n ((hexString.startsWith('0x') ? hexString.slice(2) : hexString).match(/.{1,2}/g) || [])\n .map(el => String.fromCharCode(parseInt(el, 16)))\n .join('')\n\n\nexport const safeJsonParseStringOrHexString = <T = any>(stringOrHexString: string): T | string => {\n try {\n return JSON.parse(stringOrHexString) as T\n } catch {\n return safeJSONParse<T>(hexStringToString(stringOrHexString))\n }\n}\n\nexport const parseAndCheckTheNumberIsDWORD = (n: number | string) => {\n const num: number = (typeof n === 'string') ? parseInt(n, 10) : n\n\n if (isNaN(num)) throw new Error(`Passed number is NaN: ${n}`)\n if (num < 0) throw new Error(`Passed number is less than 0: ${n}`)\n if (num > 0xFFFFFFFF) throw new Error(`Passed number is more than 2**32: ${n}`)\n\n return num\n}\n\nexport const DWORDHexString = {\n fromNumber: (n: number): string => {\n return parseAndCheckTheNumberIsDWORD(n).toString(16).padStart(8, '0')\n },\n toNumber: (s: string): number => {\n const num: number = parseInt(s, 16)\n\n if (isNaN(num)) throw new Error(`Passed string is not hexadecimal: ${s}`)\n\n return num\n }\n}\n","export const getKeys = <T extends Object>(o: T) => Object.keys(o) as Array<keyof T>\r\nexport const getValues = <T extends Object>(o: T) => Object.values(o) as Array<T[keyof T]>\r\nexport const getEntries = <T extends Object>(o: T) => Object.entries(o) as Array<[keyof T, T[keyof T]]>\r\n\r\nexport type Writeable<T> = { -readonly [P in keyof T]: T[P] };\r\n\r\ntype EnumBaseType = Record<string, number | string>\r\n\r\nexport const getEnumKeys = <T extends EnumBaseType>(en: T): Array<keyof T> => {\r\n const arr = getValues(en)\r\n return arr.slice(0, arr.length / 2) as any as Array<keyof T>\r\n}\r\nexport const getEnumValues = <T extends EnumBaseType>(en: T): Array<T[keyof T]> => {\r\n const arr = getValues(en)\r\n return arr.slice(arr.length / 2)\r\n}\r\n\r\ntype EnumReverse<T extends EnumBaseType> = {[K in T[keyof T]]: keyof T}\r\nexport const getReversedEnum = <T extends EnumBaseType>(en: T): EnumReverse<T> => {\r\n const arr = getValues(en)\r\n const result = {} as any\r\n for (let i = 0; i < arr.length/2; i++) {\r\n result[arr[i + arr.length/2]] = arr[i]\r\n }\r\n return result\r\n}\r\n\r\nexport const safeJSONParse = <T>(str: string): T | string => {\r\n try {\r\n return JSON.parse(str) as T\r\n } catch {\r\n return str\r\n }\r\n}\r\n","import * as string from \"./stringUtils\"\r\nimport {keccak_256} from \"./imports\"\r\nimport {COLLECTION_ADDRESS_PREFIX, NESTING_PREFIX} from \"./constants\"\r\nimport {is, validate} from \"./index\"\r\n\r\nconst unsafeNormalizeEthereumAddress = (address: string) => {\r\n const addr = address.toLowerCase().replace(/^0x/i, '')\r\n const addressHash = string.u8aToHex(keccak_256(addr)).replace(/^0x/i, '')\r\n\r\n let checksumAddress = '0x'\r\n\r\n for (let i = 0; i < addr.length; i++) {\r\n checksumAddress += (parseInt(addressHash[i], 16) > 7)\r\n ? addr[i].toUpperCase()\r\n : addr[i]\r\n }\r\n\r\n return checksumAddress\r\n}\r\nexport const normalizeEthereumAddress = (address: string) => {\r\n validate.ethereumAddress(address)\r\n return unsafeNormalizeEthereumAddress(address)\r\n}\r\n\r\ntype EthAddressObj = { Ethereum: string }\r\nexport const compareEthereumAddresses = (address1: string | EthAddressObj | object, address2: string | EthAddressObj | object): boolean => {\r\n const addr1 = typeof address1 === 'string'\r\n ? address1\r\n : ((address1 as EthAddressObj).Ethereum || (address1 as any).ethereum) as string | undefined\r\n const addr2 = typeof address2 === 'string'\r\n ? address2\r\n : ((address2 as EthAddressObj).Ethereum || (address2 as any).ethereum) as string | undefined\r\n\r\n if (!addr1 || !addr2 || !is.ethereumAddress(addr1) || !is.ethereumAddress(addr2)) {\r\n return false\r\n }\r\n return addr1.toLowerCase() === addr2.toLowerCase()\r\n\r\n}\r\n\r\nexport const collectionIdToEthAddress = (collectionId: number): string | null => {\r\n validate.collectionId(collectionId)\r\n return unsafeNormalizeEthereumAddress(\r\n COLLECTION_ADDRESS_PREFIX +\r\n string.DWORDHexString.fromNumber(collectionId)\r\n )\r\n}\r\nexport const ethAddressToCollectionId = (address: string): number | null => {\r\n validate.collectionAddress(address)\r\n return string.DWORDHexString.toNumber(address.slice(-8))\r\n}\r\n\r\nexport const collectionIdAndTokenIdToNestingAddress = (collectionId: number, tokenId: number): string => {\r\n validate.collectionId(collectionId)\r\n validate.tokenId(tokenId)\r\n\r\n return unsafeNormalizeEthereumAddress(\r\n NESTING_PREFIX +\r\n string.DWORDHexString.fromNumber(collectionId) +\r\n string.DWORDHexString.fromNumber(tokenId)\r\n )\r\n}\r\n\r\nexport const nestingAddressToCollectionIdAndTokenId = (address: string): { collectionId: number, tokenId: number } => {\r\n validate.nestingAddress(address)\r\n return {\r\n collectionId: string.DWORDHexString.toNumber(address.slice(-16, -8)),\r\n tokenId: string.DWORDHexString.toNumber(address.slice(-8)),\r\n }\r\n}\r\n","import {base58, blake2b} from './imports'\r\nimport {DecodeSubstrateAddressResult, validate} from './index'\r\nimport {normalizeEthereumAddress} from './ethereum'\r\nimport {hexToU8a, u8aToHex} from './stringUtils'\r\nimport * as string from \"./stringUtils\";\r\n\r\nconst blake2AsU8a = (u8a: Uint8Array, dkLen: 8 | 16 | 32 | 48 | 64 = 32): Uint8Array => {\r\n return blake2b(u8a, {dkLen})\r\n}\r\n\r\nconst u8aConcat = (u8as: readonly Uint8Array[]): Uint8Array => {\r\n let offset = 0\r\n\r\n let length = 0\r\n\r\n for (let i = 0; i < u8as.length; i++) {\r\n length += u8as[i].length\r\n }\r\n\r\n const result = new Uint8Array(length)\r\n\r\n for (let i = 0; i < u8as.length; i++) {\r\n result.set(u8as[i], offset)\r\n offset += u8as[i].length\r\n }\r\n\r\n return result\r\n}\r\n\r\n// strToU8a('SS58PRE')\r\nconst SS58_PREFIX = new Uint8Array([83, 83, 53, 56, 80, 82, 69])\r\n\r\nconst sshash = (data: Uint8Array): Uint8Array => {\r\n return blake2AsU8a(u8aConcat([SS58_PREFIX, data]), 64);\r\n}\r\n\r\nconst checkAddressChecksum = (decoded: Uint8Array): [boolean, number, number, number] => {\r\n const ss58Length = (decoded[0] & 0b0100_0000) ? 2 : 1;\r\n const ss58Decoded = ss58Length === 1\r\n ? decoded[0]\r\n : ((decoded[0] & 0x3f) << 2) | (decoded[1] >> 6) | ((decoded[1] & 0x3f) << 8);\r\n\r\n // 32/33 bytes public + 2 bytes checksum + prefix\r\n const isPublicKey = [34 + ss58Length, 35 + ss58Length].includes(decoded.length);\r\n const length = decoded.length - (isPublicKey ? 2 : 1);\r\n\r\n // calculate the hash and do the checksum byte checks\r\n const hash = sshash(decoded.subarray(0, length));\r\n const isValid = (decoded[0] & 0x80) === 0 && ![46, 47].includes(decoded[0]) && (\r\n isPublicKey\r\n ? decoded[decoded.length - 2] === hash[0] && decoded[decoded.length - 1] === hash[1]\r\n : decoded[decoded.length - 1] === hash[0]\r\n );\r\n\r\n return [isValid, length, ss58Length, ss58Decoded];\r\n}\r\n\r\nexport const normalizeSubstrateAddress = (address: string, prefix: number = 42): string => {\r\n return encodeSubstrateAddress(decodeSubstrateAddress(address).u8a, prefix)\r\n}\r\n\r\n\r\nexport function encodeSubstrateAddress (key: Uint8Array | string | bigint, ss58Format: number = 42): string {\r\n const u8a :Uint8Array = typeof key === 'string'\r\n ? hexToU8a(key)\r\n : typeof key === 'bigint'\r\n ? hexToU8a(key.toString(16))\r\n : key\r\n\r\n if (ss58Format < 0 || ss58Format > 16383 || [46, 47].includes(ss58Format)) {\r\n throw new Error(`ss58Format is not valid, received ${typeof ss58Format} \"${ss58Format}\"`)\r\n }\r\n\r\n const allowedDecodedLengths = [1, 2, 4, 8, 32, 33]\r\n if (!allowedDecodedLengths.includes(u8a.length)) {\r\n throw new Error(`key length is not valid, received ${u8a.length}, valid values are ${allowedDecodedLengths.join(', ')}`)\r\n }\r\n\r\n const u8aPrefix = ss58Format < 64\r\n ? new Uint8Array([ss58Format])\r\n : new Uint8Array([\r\n ((ss58Format & 0xfc) >> 2) | 0x40,\r\n (ss58Format >> 8) | ((ss58Format & 0x03) << 6)\r\n ])\r\n\r\n const input = u8aConcat([u8aPrefix, u8a])\r\n\r\n return base58.encode(\r\n u8aConcat([\r\n input,\r\n sshash(input).subarray(0, [32, 33].includes(u8a.length) ? 2 : 1)\r\n ])\r\n );\r\n}\r\n\r\nexport function decodeSubstrateAddress (address: string, ignoreChecksum?: boolean, ss58Format: number = -1): DecodeSubstrateAddressResult {\r\n let realError: Error | null = null\r\n\r\n try {\r\n const decoded = base58.decode(address);\r\n\r\n const allowedEncodedLengths = [3, 4, 6, 10, 35, 36, 37, 38]\r\n\r\n if (!allowedEncodedLengths.includes(decoded.length)) {\r\n realError = new Error(`key length is not valid, decoded key length is ${decoded.length}, valid values are ${allowedEncodedLengths.join(', ')}`)\r\n throw realError\r\n }\r\n\r\n const [isValid, endPos, ss58Length, ss58Decoded] = checkAddressChecksum(decoded)\r\n\r\n if (!ignoreChecksum && !isValid) {\r\n realError = new Error(`Invalid decoded address checksum`)\r\n throw realError\r\n }\r\n if (![-1, ss58Decoded].includes(ss58Format)) {\r\n realError = new Error(`Expected ss58Format ${ss58Format}, received ${ss58Decoded}`)\r\n throw realError\r\n }\r\n\r\n const publicKey = decoded.slice(ss58Length, endPos)\r\n\r\n const hex = u8aToHex(publicKey)\r\n return {\r\n u8a: publicKey,\r\n hex,\r\n bigint: BigInt(hex)\r\n }\r\n } catch (error) {\r\n throw realError\r\n ? realError\r\n : new Error(`Decoding ${address}: ${(error as Error).message}`)\r\n }\r\n}\r\n\r\ntype SubAddressObj = { Substrate: string }\r\nexport const compareSubstrateAddresses = (address1: string | SubAddressObj | object, address2: string | SubAddressObj | object): boolean => {\r\n const addr1 = typeof address1 === 'string'\r\n ? address1\r\n : ((address1 as SubAddressObj).Substrate || (address1 as any).substrate) as string | undefined\r\n const addr2 = typeof address2 === 'string'\r\n ? address2\r\n : ((address2 as SubAddressObj).Substrate || (address2 as any).substrate) as string | undefined\r\n\r\n if (!addr1 || !addr2) {\r\n return false\r\n }\r\n\r\n try {\r\n const decoded1 = decodeSubstrateAddress(addr1)\r\n const decoded2 = decodeSubstrateAddress(addr2)\r\n return decoded1.bigint === decoded2.bigint\r\n } catch(e) {\r\n return false\r\n }\r\n}\r\n\r\nexport const addressToEvm = (address: string, ignoreChecksum?: boolean): string => {\r\n const truncated = decodeSubstrateAddress(address, ignoreChecksum).u8a.subarray(0, 20)\r\n return normalizeEthereumAddress(u8aToHex(truncated))\r\n}\r\n\r\n// strToU8a('evm:')\r\nconst EVM_PREFIX_U8A = new Uint8Array([101, 118, 109, 58])\r\nexport const evmToAddress = (evmAddress: string, ss58Format: number = 42): string => {\r\n validate.ethereumAddress(evmAddress)\r\n\r\n const message = u8aConcat([EVM_PREFIX_U8A, hexToU8a(evmAddress)])\r\n\r\n return encodeSubstrateAddress(blake2AsU8a(message), ss58Format)\r\n}\r\n","import {normalizeEthereumAddress} from \"./ethereum\";\r\nimport {normalizeSubstrateAddress} from \"./substrate\";\r\nimport {CrossAccountId} from \"../../types\";\r\nimport {is, mirror, normalize} from \"./index\";\r\n\r\nexport const guessAddressAndExtractItNormalizedSafe = (address: string | object): string | null => {\r\n if (typeof address === 'object') {\r\n if (is.substrateAddressObject(address)) return normalize.substrateAddress(address.Substrate)\r\n else if (is.substrateAddressObjectUncapitalized(address)) return normalize.substrateAddress(address.substrate)\r\n else if (is.ethereumAddressObject(address)) return normalizeEthereumAddress(address.Ethereum)\r\n else if (is.ethereumAddressObjectUncapitalized(address)) return normalizeEthereumAddress(address.ethereum)\r\n else return null\r\n }\r\n if (typeof address === 'string') {\r\n if (is.substrateAddress(address)) return normalizeSubstrateAddress(address)\r\n else if (is.ethereumAddress(address)) return normalizeEthereumAddress(address)\r\n else return null\r\n }\r\n\r\n return null\r\n}\r\n\r\nexport const guessAddressAndExtractItNormalized = (address: string | object): string => {\r\n const result = guessAddressAndExtractItNormalizedSafe(address)\r\n if (!result) {\r\n throw new Error(`Passed address is not a valid address string or object: ${JSON.stringify(address).slice(0, 100)}`)\r\n }\r\n return result\r\n}\r\n\r\nexport const addressToCrossAccountId = (address: string): CrossAccountId => {\r\n if (is.substrateAddress(address)) {\r\n return {Substrate: address}\r\n } else if (is.ethereumAddress(address)) {\r\n return {Ethereum: address}\r\n }\r\n\r\n throw new Error(`Passed address ${address} is not substrate nor ethereum address`)\r\n}\r\n\r\nexport const addressToCrossAccountIdNormalized = (address: string): CrossAccountId => {\r\n if (is.substrateAddress(address)) {\r\n return {Substrate: normalize.substrateAddress(address)}\r\n } else if (is.ethereumAddress(address)) {\r\n return {Ethereum: normalize.ethereumAddress(address)}\r\n }\r\n\r\n throw new Error(`Passed address ${address} is not substrate nor ethereum address`)\r\n}\r\n\r\nexport const substrateNormalizedWithMirrorIfEthereum = (address: string): string => {\r\n const addressObject = addressToCrossAccountId(address)\r\n return addressObject.Substrate\r\n ? normalizeSubstrateAddress(addressObject.Substrate)\r\n : mirror.ethereumToSubstrate(addressObject.Ethereum as string)\r\n}\r\n","import {COLLECTION_ADDRESS_PREFIX, NESTING_PREFIX} from './constants'\r\n\r\nimport {\r\n addressToEvm, compareSubstrateAddresses,\r\n decodeSubstrateAddress, encodeSubstrateAddress,\r\n evmToAddress,\r\n normalizeSubstrateAddress\r\n} from './substrate'\r\n\r\nimport {\r\n collectionIdAndTokenIdToNestingAddress,\r\n collectionIdToEthAddress, compareEthereumAddresses,\r\n ethAddressToCollectionId,\r\n nestingAddressToCollectionIdAndTokenId,\r\n normalizeEthereumAddress\r\n} from './ethereum'\r\nimport {\r\n CrossAccountId, CrossAccountIdUncapitalized,\r\n EthAddressObj, EthAddressObjUncapitalized,\r\n SubAddressObj, SubAddressObjUncapitalized,\r\n} from \"../../types\";\r\nimport {\r\n substrateNormalizedWithMirrorIfEthereum,\r\n addressToCrossAccountId, addressToCrossAccountIdNormalized,\r\n guessAddressAndExtractItNormalized,\r\n guessAddressAndExtractItNormalizedSafe\r\n} from \"./crossAccountId\";\r\n\r\nimport * as StringUtils from './stringUtils'\r\nimport * as algorithms from './imports'\r\nimport * as constants from './constants'\r\n\r\nexport {constants, algorithms, StringUtils}\r\n\r\nconst ETH_ADDRESS_REGEX = /^0x[a-fA-F0-9]{40}$/\r\n\r\nexport type DecodeSubstrateAddressResult = {\r\n u8a: Uint8Array,\r\n hex: string,\r\n bigint: bigint\r\n}\r\n\r\nexport const validate = {\r\n substrateAddress: (address: string) => {\r\n decodeSubstrateAddress(address)\r\n return true\r\n },\r\n ethereumAddress: (address: string) => {\r\n if (!is.ethereumAddress(address)) {\r\n throw new Error(`address \"${address}\" is not valid ethereum address`)\r\n }\r\n return true\r\n },\r\n collectionAddress: (address: string) => {\r\n if (!is.collectionAddress(address)) {\r\n throw new Error(`address ${address} is not a collection address`)\r\n }\r\n return true\r\n },\r\n nestingAddress: (address: string) => {\r\n if (!is.nestingAddress(address)) {\r\n throw new Error(`address ${address} is not a nesting address`)\r\n }\r\n return true\r\n },\r\n collectionId: (collectionId: number) => {\r\n if (!is.collectionId(collectionId)) {\r\n throw new Error(`collectionId should be a number between 0 and 0xffffffff`)\r\n }\r\n return true\r\n },\r\n tokenId: (tokenId: number) => {\r\n if (!is.tokenId(tokenId)) {\r\n throw new Error(`collectionId should be a number between 0 and 0xffffffff`)\r\n }\r\n return true\r\n },\r\n}\r\n\r\nexport const is = {\r\n substrateAddress: (address: string): boolean => {\r\n try {\r\n decodeSubstrateAddress(address)\r\n return true\r\n } catch {\r\n return false\r\n }\r\n },\r\n ethereumAddress: (address: string): boolean => {\r\n return typeof address === 'string' && address.length === 42 && !!address.match(ETH_ADDRESS_REGEX)\r\n },\r\n\r\n collectionAddress: (address: string): boolean => {\r\n return is.ethereumAddress(address) && address.toLowerCase().startsWith(COLLECTION_ADDRESS_PREFIX)\r\n },\r\n nestingAddress: (address: string): boolean => {\r\n return is.ethereumAddress(address) && address.toLowerCase().startsWith(NESTING_PREFIX)\r\n },\r\n\r\n collectionId: (collectionId: number): boolean => {\r\n return !(typeof collectionId !== 'number' || isNaN(collectionId) || collectionId < 0 || collectionId > 0xffffffff)\r\n },\r\n tokenId: (tokenId: number): boolean => {\r\n return !(typeof tokenId !== 'number' || isNaN(tokenId) || tokenId < 0 || tokenId > 0xffffffff)\r\n },\r\n\r\n crossAccountId(obj: any): obj is CrossAccountId {\r\n return is.substrateAddressObject(obj) || is.ethereumAddressObject(obj)\r\n },\r\n crossAccountIdUncapitalized(obj: any): obj is CrossAccountIdUncapitalized {\r\n return is.substrateAddressObjectUncapitalized(obj) || is.ethereumAddressObjectUncapitalized(obj)\r\n },\r\n substrateAddressObject(obj: any): obj is SubAddressObj {\r\n return typeof obj === 'object' && typeof obj?.Substrate === 'string' && is.substrateAddress(obj.Substrate)\r\n },\r\n ethereumAddressObject(obj: any): obj is EthAddressObj {\r\n return typeof obj === 'object' && typeof obj?.Ethereum === 'string' && is.ethereumAddress(obj.Ethereum)\r\n },\r\n substrateAddressObjectUncapitalized(obj: any): obj is SubAddressObjUncapitalized {\r\n return typeof obj === 'object' && typeof obj?.substrate === 'string' && is.substrateAddress(obj.substrate)\r\n },\r\n ethereumAddressObjectUncapitalized(obj: any): obj is EthAddressObjUncapitalized {\r\n return typeof obj === 'object' && typeof obj?.ethereum === 'string' && is.ethereumAddress(obj.ethereum)\r\n },\r\n}\r\n\r\nexport const collection = {\r\n idToAddress: collectionIdToEthAddress,\r\n addressToId: ethAddressToCollectionId,\r\n}\r\nexport const nesting = {\r\n idsToAddress: collectionIdAndTokenIdToNestingAddress,\r\n addressToIds: nestingAddressToCollectionIdAndTokenId,\r\n}\r\nexport const to = {\r\n crossAccountId: addressToCrossAccountId,\r\n crossAccountIdNormalized: addressToCrossAccountIdNormalized,\r\n substrateNormalizedOrMirrorIfEthereum: substrateNormalizedWithMirrorIfEthereum,\r\n}\r\n\r\nexport const extract = {\r\n normalizedAddressFromObject: guessAddressAndExtractItNormalized,\r\n normalizedAddressFromObjectSafe: guessAddressAndExtractItNormalizedSafe,\r\n crossAccountIdFromObject: (obj: any): CrossAccountId => {\r\n return addressToCrossAccountId(guessAddressAndExtractItNormalized(obj))\r\n },\r\n crossAccountIdFromObjectNormalized: (obj: any): CrossAccountId => {\r\n return addressToCrossAccountId(guessAddressAndExtractItNormalized(obj))\r\n },\r\n}\r\n\r\nexport const mirror = {\r\n substrateToEthereum: addressToEvm,\r\n ethereumToSubstrate: evmToAddress,\r\n}\r\n\r\nexport const normalize = {\r\n substrateAddress: normalizeSubstrateAddress,\r\n ethereumAddress: normalizeEthereumAddress,\r\n}\r\n\r\nexport const compare = {\r\n substrateAddresses: compareSubstrateAddresses,\r\n ethereumAddresses: compareEthereumAddresses,\r\n}\r\n\r\nexport const substrate = {\r\n encode: encodeSubstrateAddress,\r\n decode: decodeSubstrateAddress,\r\n compare: compareSubstrateAddresses,\r\n}\r\n\r\nexport const Address = {\r\n constants,\r\n is,\r\n validate,\r\n collection,\r\n nesting,\r\n to,\r\n extract,\r\n mirror,\r\n normalize,\r\n compare,\r\n substrate,\r\n algorithms,\r\n StringUtils,\r\n}\r\n"],"mappings":"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","names":[]}