UNPKG

@enclave-hq/chain-utils

Version:

Multi-chain utilities for Enclave - SLIP-44 mappings, universal address encoding, and chain conversions

1 lines 33.8 kB
{"version":3,"sources":["../src/types/index.ts","../src/chain/slip44.ts","../src/address/evm.ts","../src/address/tron.ts","../src/address/universal-address.ts"],"names":["ChainType"],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Chain type enumeration\n */\nexport enum ChainType {\n EVM = 'evm',\n TRON = 'tron',\n SOLANA = 'solana',\n COSMOS = 'cosmos',\n}\n\n/**\n * Chain information interface\n */\nexport interface ChainInfo {\n /** Native Chain ID (ID used in wallets) */\n nativeChainId: number | string\n \n /** SLIP-44 Chain ID (used in Enclave system) */\n slip44: number\n \n /** Chain name */\n name: string\n \n /** Chain type */\n chainType: ChainType\n \n /** Native token symbol */\n symbol: string\n \n /** Whether it is a testnet */\n isTestnet?: boolean\n}\n\n/**\n * Universal Address structure\n */\nexport interface UniversalAddress {\n /** SLIP-44 Chain ID (4 bytes) */\n slip44: number\n \n /** Address (32 bytes, left-padded) */\n address: Uint8Array\n \n /** Native Chain ID (optional, for reverse lookup) */\n nativeChainId?: number | string\n \n /** Native address format (optional) */\n nativeAddress?: string\n}\n\n/**\n * Universal Address serialization format (36 bytes)\n * Format: SLIP-44 (4 bytes) + Address (32 bytes)\n */\nexport type UniversalAddressBytes = Uint8Array\n\n/**\n * Universal Address hex format\n * Format: 0x + 72 hex characters (36 bytes)\n */\nexport type UniversalAddressHex = `0x${string}`\n\n/**\n * Address converter interface\n */\nexport interface AddressConverter {\n /**\n * Convert native address to bytes (32 bytes, left-padded)\n */\n toBytes(nativeAddress: string): Uint8Array\n \n /**\n * Convert bytes back to native address\n */\n fromBytes(bytes: Uint8Array): string\n \n /**\n * Validate native address format\n */\n isValid(nativeAddress: string): boolean\n}\n\n","/**\n * SLIP-44 Chain ID mapping and conversion\n * \n * SLIP-44 Standard: https://github.com/satoshilabs/slips/blob/master/slip-0044.md\n */\n\nimport { ChainType, ChainInfo } from '../types'\n\n/**\n * SLIP-44 to chain information mapping table\n * \n * Extensible design: Add new chains by adding mappings here\n */\nconst SLIP44_CHAIN_MAP: Record<number, ChainInfo> = {\n // Ethereum (SLIP-44: 60)\n 60: {\n nativeChainId: 1,\n slip44: 60,\n name: 'Ethereum Mainnet',\n chainType: ChainType.EVM,\n symbol: 'ETH',\n },\n \n // Tron (SLIP-44: 195)\n 195: {\n nativeChainId: 195,\n slip44: 195,\n name: 'Tron Mainnet',\n chainType: ChainType.TRON,\n symbol: 'TRX',\n },\n \n // BSC (SLIP-44: 714)\n 714: {\n nativeChainId: 56,\n slip44: 714,\n name: 'BNB Smart Chain',\n chainType: ChainType.EVM,\n symbol: 'BNB',\n },\n \n // Polygon (SLIP-44: 966)\n 966: {\n nativeChainId: 137,\n slip44: 966,\n name: 'Polygon Mainnet',\n chainType: ChainType.EVM,\n symbol: 'MATIC',\n },\n \n // Solana (SLIP-44: 501) - Reserved\n 501: {\n nativeChainId: 'mainnet-beta', // Solana uses string ID\n slip44: 501,\n name: 'Solana Mainnet',\n chainType: ChainType.SOLANA,\n symbol: 'SOL',\n },\n \n // Avalanche C-Chain (SLIP-44: 9000)\n 9000: {\n nativeChainId: 43114,\n slip44: 9000,\n name: 'Avalanche C-Chain',\n chainType: ChainType.EVM,\n symbol: 'AVAX',\n },\n \n // === Custom SLIP-44 IDs (Layer 2 and chains without official SLIP-44) ===\n // Range: 1000000-1999999 (avoids conflicts with official SLIP-44)\n // Rule: 1000000 + nativeChainId\n \n // Arbitrum One (Custom SLIP-44: 1042161)\n 1042161: {\n nativeChainId: 42161,\n slip44: 1042161,\n name: 'Arbitrum One',\n chainType: ChainType.EVM,\n symbol: 'ETH',\n },\n \n // Optimism (Custom SLIP-44: 1000010)\n 1000010: {\n nativeChainId: 10,\n slip44: 1000010,\n name: 'Optimism',\n chainType: ChainType.EVM,\n symbol: 'ETH',\n },\n \n // Base (Custom SLIP-44: 1008453)\n 1008453: {\n nativeChainId: 8453,\n slip44: 1008453,\n name: 'Base',\n chainType: ChainType.EVM,\n symbol: 'ETH',\n },\n \n // zkSync Era (Custom SLIP-44: 1000324)\n 1000324: {\n nativeChainId: 324,\n slip44: 1000324,\n name: 'zkSync Era',\n chainType: ChainType.EVM,\n symbol: 'ETH',\n },\n}\n\n/**\n * Reverse mapping from Native Chain ID to SLIP-44\n * Automatically generated from SLIP44_CHAIN_MAP\n */\nconst NATIVE_TO_SLIP44_MAP: Map<string, number> = new Map(\n Object.entries(SLIP44_CHAIN_MAP).map(([slip44, info]) => [\n String(info.nativeChainId),\n Number(slip44)\n ])\n)\n\n/**\n * Convert Native Chain ID to SLIP-44 ID\n * \n * @param nativeChainId - Native chain ID (e.g., 1, 56, 137 in MetaMask)\n * @returns SLIP-44 ID, or null if not found\n * \n * @example\n * nativeToSlip44(1) // => 60 (Ethereum)\n * nativeToSlip44(56) // => 714 (BSC)\n * nativeToSlip44(137) // => 966 (Polygon)\n */\nexport function nativeToSlip44(nativeChainId: number | string): number | null {\n return NATIVE_TO_SLIP44_MAP.get(String(nativeChainId)) ?? null\n}\n\n/**\n * Convert SLIP-44 ID to Native Chain ID\n * \n * @param slip44 - SLIP-44 Chain ID\n * @returns Native Chain ID, or null if not found\n * \n * @example\n * slip44ToNative(60) // => 1 (Ethereum)\n * slip44ToNative(714) // => 56 (BSC)\n * slip44ToNative(966) // => 137 (Polygon)\n */\nexport function slip44ToNative(slip44: number): number | string | null {\n const info = SLIP44_CHAIN_MAP[slip44]\n return info ? info.nativeChainId : null\n}\n\n/**\n * Get chain information (by SLIP-44 ID)\n */\nexport function getChainInfoBySlip44(slip44: number): ChainInfo | null {\n return SLIP44_CHAIN_MAP[slip44] ?? null\n}\n\n/**\n * Get chain information (by Native Chain ID)\n */\nexport function getChainInfoByNative(nativeChainId: number | string): ChainInfo | null {\n const slip44 = nativeToSlip44(nativeChainId)\n return slip44 ? getChainInfoBySlip44(slip44) : null\n}\n\n/**\n * Get chain type (by SLIP-44 ID)\n */\nexport function getChainType(slip44: number): ChainType | null {\n return SLIP44_CHAIN_MAP[slip44]?.chainType ?? null\n}\n\n/**\n * Check if the chain is supported\n */\nexport function isSupportedChain(nativeChainId: number | string): boolean {\n return NATIVE_TO_SLIP44_MAP.has(String(nativeChainId))\n}\n\n/**\n * Check if the SLIP-44 ID is supported\n */\nexport function isSupportedSlip44(slip44: number): boolean {\n return slip44 in SLIP44_CHAIN_MAP\n}\n\n/**\n * Register a new chain (extensible API)\n * \n * @param chainInfo - Chain information\n * \n * @example\n * registerChain({\n * nativeChainId: 250,\n * slip44: 60, // Fantom also uses Ethereum's SLIP-44\n * name: 'Fantom Opera',\n * chainType: ChainType.EVM,\n * symbol: 'FTM',\n * })\n */\nexport function registerChain(chainInfo: ChainInfo): void {\n SLIP44_CHAIN_MAP[chainInfo.slip44] = chainInfo\n NATIVE_TO_SLIP44_MAP.set(String(chainInfo.nativeChainId), chainInfo.slip44)\n}\n\n/**\n * Get all supported chains\n */\nexport function getAllSupportedChains(): ChainInfo[] {\n return Object.values(SLIP44_CHAIN_MAP)\n}\n\n/**\n * Get all supported SLIP-44 IDs\n */\nexport function getAllSupportedSlip44s(): number[] {\n return Object.keys(SLIP44_CHAIN_MAP).map(Number)\n}\n\n","/**\n * EVM address conversion\n */\n\nimport { AddressConverter } from '../types'\n\n/**\n * EVM address converter\n * \n * EVM address format: 0x + 40 hex characters (20 bytes)\n * Universal Address: 32 bytes (left-padded to 32 bytes)\n */\nexport class EVMAddressConverter implements AddressConverter {\n /**\n * Convert EVM address to 32 bytes (left-padded)\n * \n * @param nativeAddress - EVM address (0x...)\n * @returns 32 bytes Uint8Array\n * \n * @example\n * toBytes('0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0')\n * // => Uint8Array(32) [0,0,0,0,0,0,0,0,0,0,0,0,116,45,53,204,...]\n */\n toBytes(nativeAddress: string): Uint8Array {\n // Remove 0x prefix\n const cleaned = nativeAddress.toLowerCase().replace(/^0x/, '')\n \n if (cleaned.length !== 40) {\n throw new Error(`Invalid EVM address length: ${nativeAddress}`)\n }\n \n // Convert to bytes (20 bytes)\n const addressBytes = new Uint8Array(20)\n for (let i = 0; i < 20; i++) {\n addressBytes[i] = parseInt(cleaned.substring(i * 2, i * 2 + 2), 16)\n }\n \n // Left-pad with zeros to 32 bytes\n const result = new Uint8Array(32)\n result.set(addressBytes, 12) // Start filling from position 12 (32 - 20 = 12)\n \n return result\n }\n \n /**\n * Convert 32 bytes back to EVM address\n * \n * @param bytes - 32 bytes Uint8Array\n * @returns EVM address (0x...)\n * \n * @example\n * fromBytes(new Uint8Array(32))\n * // => '0x742d35cc6634c0532925a3b844bc9e7595f0beb0'\n */\n fromBytes(bytes: Uint8Array): string {\n if (bytes.length !== 32) {\n throw new Error(`Invalid bytes length for EVM address: ${bytes.length}`)\n }\n \n // Extract last 20 bytes (ignore first 12 bytes of zeros)\n const addressBytes = bytes.slice(12, 32)\n \n // Convert to hex\n const hex = Array.from(addressBytes)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('')\n \n return `0x${hex}`\n }\n \n /**\n * Validate EVM address format\n * \n * @param nativeAddress - EVM address\n * @returns Whether it is valid\n */\n isValid(nativeAddress: string): boolean {\n return /^0x[0-9a-fA-F]{40}$/.test(nativeAddress)\n }\n \n /**\n * Format EVM address (normalize to lowercase)\n */\n format(nativeAddress: string): string {\n if (!this.isValid(nativeAddress)) {\n throw new Error(`Invalid EVM address: ${nativeAddress}`)\n }\n return nativeAddress.toLowerCase()\n }\n}\n\n// Export singleton\nexport const evmConverter = new EVMAddressConverter()\n\n","/**\n * Tron address conversion\n */\n\nimport { AddressConverter } from '../types'\n\n/**\n * Tron address converter\n * \n * Tron address format: Base58 encoded (starts with T, 34 characters)\n * Universal Address: First convert to hex (21 bytes), then left-pad to 32 bytes\n */\nexport class TronAddressConverter implements AddressConverter {\n private static readonly BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n \n /**\n * Convert Tron address to 32 bytes (first to hex, then left-pad)\n * \n * @param nativeAddress - Tron address (T...)\n * @returns 32 bytes Uint8Array\n * \n * @example\n * toBytes('TRX9hash...')\n * // => Uint8Array(32) [0,0,0,0,0,0,0,0,0,0,0,0,...]\n */\n toBytes(nativeAddress: string): Uint8Array {\n if (!this.isValid(nativeAddress)) {\n throw new Error(`Invalid Tron address: ${nativeAddress}`)\n }\n \n // Decode Base58 to bytes (25 bytes: 1 byte prefix + 20 bytes address + 4 bytes checksum)\n const decoded = this.base58Decode(nativeAddress)\n \n if (decoded.length !== 25) {\n throw new Error(`Invalid Tron address length after decoding: ${decoded.length}`)\n }\n \n // Extract address part (remove prefix and checksum)\n // Format: [prefix(1)] + [address(20)] + [checksum(4)]\n const addressBytes = decoded.slice(1, 21) // 20 bytes\n \n // Left-pad with zeros to 32 bytes\n const result = new Uint8Array(32)\n result.set(addressBytes, 12) // Start filling from position 12 (32 - 20 = 12)\n \n return result\n }\n \n /**\n * Convert 32 bytes back to Tron address\n * \n * @param bytes - 32 bytes Uint8Array\n * @returns Tron address (T...)\n */\n fromBytes(bytes: Uint8Array): string {\n if (bytes.length !== 32) {\n throw new Error(`Invalid bytes length for Tron address: ${bytes.length}`)\n }\n \n // Extract last 20 bytes (ignore first 12 bytes of zeros)\n const addressBytes = bytes.slice(12, 32)\n \n // Add Tron mainnet prefix (0x41)\n const prefixed = new Uint8Array(21)\n prefixed[0] = 0x41\n prefixed.set(addressBytes, 1)\n \n // Calculate checksum (first 4 bytes of double SHA256)\n const checksum = this.calculateChecksum(prefixed)\n \n // Combine: prefix + address + checksum\n const full = new Uint8Array(25)\n full.set(prefixed, 0)\n full.set(checksum, 21)\n \n // Base58 encode\n return this.base58Encode(full)\n }\n \n /**\n * Validate Tron address format\n */\n isValid(nativeAddress: string): boolean {\n // Basic format check\n if (!/^T[1-9A-HJ-NP-Za-km-z]{33}$/.test(nativeAddress)) {\n return false\n }\n \n try {\n // Try to decode and verify checksum\n const decoded = this.base58Decode(nativeAddress)\n if (decoded.length !== 25) {\n return false\n }\n \n const payload = decoded.slice(0, 21)\n const checksum = decoded.slice(21, 25)\n const calculatedChecksum = this.calculateChecksum(payload)\n \n return this.arraysEqual(checksum, calculatedChecksum)\n } catch {\n return false\n }\n }\n \n /**\n * Base58 decode\n */\n private base58Decode(input: string): Uint8Array {\n const bytes: number[] = []\n \n for (const char of input) {\n let value = TronAddressConverter.BASE58_ALPHABET.indexOf(char)\n if (value < 0) {\n throw new Error(`Invalid Base58 character: ${char}`)\n }\n \n for (let i = 0; i < bytes.length; i++) {\n value += bytes[i] * 58\n bytes[i] = value & 0xff\n value >>= 8\n }\n \n while (value > 0) {\n bytes.push(value & 0xff)\n value >>= 8\n }\n }\n \n // Add leading zeros\n for (const char of input) {\n if (char !== '1') break\n bytes.push(0)\n }\n \n return new Uint8Array(bytes.reverse())\n }\n \n /**\n * Base58 encode\n */\n private base58Encode(bytes: Uint8Array): string {\n const digits: number[] = []\n \n for (const byte of bytes) {\n let carry = byte\n for (let i = 0; i < digits.length; i++) {\n carry += digits[i] << 8\n digits[i] = carry % 58\n carry = Math.floor(carry / 58)\n }\n \n while (carry > 0) {\n digits.push(carry % 58)\n carry = Math.floor(carry / 58)\n }\n }\n \n // Add leading 1s\n for (const byte of bytes) {\n if (byte !== 0) break\n digits.push(0)\n }\n \n return digits\n .reverse()\n .map(d => TronAddressConverter.BASE58_ALPHABET[d])\n .join('')\n }\n \n /**\n * Calculate checksum (first 4 bytes of double SHA256)\n */\n private calculateChecksum(payload: Uint8Array): Uint8Array {\n // Simplified implementation: should use crypto library in production\n // Returns a mock checksum here\n // TODO: Use real SHA256 implementation\n \n // Temporary implementation: return simple hash\n let hash = 0\n for (const byte of payload) {\n hash = ((hash << 5) - hash + byte) | 0\n }\n \n const checksum = new Uint8Array(4)\n checksum[0] = (hash >>> 24) & 0xff\n checksum[1] = (hash >>> 16) & 0xff\n checksum[2] = (hash >>> 8) & 0xff\n checksum[3] = hash & 0xff\n \n return checksum\n }\n \n /**\n * Compare two Uint8Arrays for equality\n */\n private arraysEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false\n }\n return true\n }\n}\n\n// Export singleton\nexport const tronConverter = new TronAddressConverter()\n\n","/**\n * Universal Address (36 bytes) conversion\n * \n * Format: SLIP-44 ChainID (4 bytes) + Address (32 bytes)\n */\n\nimport { UniversalAddressBytes, UniversalAddressHex, ChainType } from '../types'\nimport { slip44ToNative, nativeToSlip44, getChainType } from '../chain/slip44'\nimport { evmConverter } from './evm'\nimport { tronConverter } from './tron'\n\n/**\n * Encode native address to Universal Address (36 bytes)\n * \n * @param slip44 - SLIP-44 Chain ID\n * @param nativeAddress - Native address format (EVM: 0x..., Tron: T...)\n * @returns 36 bytes Uint8Array\n * \n * @example\n * encodeUniversalAddress(60, '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb0')\n * // => Uint8Array(36) [0,0,0,60, 0,0,0,0,0,0,0,0,0,0,0,0, 116,45,35,...]\n */\nexport function encodeUniversalAddress(\n slip44: number,\n nativeAddress: string\n): UniversalAddressBytes {\n const chainType = getChainType(slip44)\n if (!chainType) {\n throw new Error(`Unsupported SLIP-44 ID: ${slip44}`)\n }\n \n // Select appropriate converter\n let addressBytes: Uint8Array\n switch (chainType) {\n case ChainType.EVM:\n addressBytes = evmConverter.toBytes(nativeAddress)\n break\n case ChainType.TRON:\n addressBytes = tronConverter.toBytes(nativeAddress)\n break\n case ChainType.SOLANA:\n // TODO: Implement Solana address conversion\n throw new Error('Solana address conversion not implemented yet')\n default:\n throw new Error(`Unsupported chain type: ${chainType}`)\n }\n \n // Combine: SLIP-44 (4 bytes) + Address (32 bytes)\n const result = new Uint8Array(36)\n \n // SLIP-44 (big-endian, 4 bytes)\n result[0] = (slip44 >>> 24) & 0xff\n result[1] = (slip44 >>> 16) & 0xff\n result[2] = (slip44 >>> 8) & 0xff\n result[3] = slip44 & 0xff\n \n // Address (32 bytes)\n result.set(addressBytes, 4)\n \n return result\n}\n\n/**\n * Decode Universal Address to native address\n * \n * @param universalAddress - 36 bytes Uint8Array\n * @returns { slip44, nativeAddress, nativeChainId }\n * \n * @example\n * decodeUniversalAddress(bytes36)\n * // => { slip44: 60, nativeAddress: '0x742d...', nativeChainId: 1 }\n */\nexport function decodeUniversalAddress(universalAddress: UniversalAddressBytes): {\n slip44: number\n nativeAddress: string\n nativeChainId: number | string | null\n} {\n if (universalAddress.length !== 36) {\n throw new Error(`Invalid Universal Address length: ${universalAddress.length}`)\n }\n \n // Extract SLIP-44 (first 4 bytes, big-endian)\n const slip44 = (\n (universalAddress[0] << 24) |\n (universalAddress[1] << 16) |\n (universalAddress[2] << 8) |\n universalAddress[3]\n ) >>> 0 // Ensure unsigned integer\n \n const chainType = getChainType(slip44)\n if (!chainType) {\n throw new Error(`Unknown SLIP-44 ID: ${slip44}`)\n }\n \n // Extract address (last 32 bytes)\n const addressBytes = universalAddress.slice(4, 36)\n \n // Select appropriate converter\n let nativeAddress: string\n switch (chainType) {\n case ChainType.EVM:\n nativeAddress = evmConverter.fromBytes(addressBytes)\n break\n case ChainType.TRON:\n nativeAddress = tronConverter.fromBytes(addressBytes)\n break\n case ChainType.SOLANA:\n // TODO: Implement Solana address conversion\n throw new Error('Solana address conversion not implemented yet')\n default:\n throw new Error(`Unsupported chain type: ${chainType}`)\n }\n \n return {\n slip44,\n nativeAddress,\n nativeChainId: slip44ToNative(slip44),\n }\n}\n\n/**\n * Convert Universal Address bytes to hex string\n * \n * @param bytes - 36 bytes Uint8Array\n * @returns 0x + 72 hex characters\n * \n * @example\n * bytesToHex(new Uint8Array(36))\n * // => '0x0000003c000000000000000000000000...'\n */\nexport function bytesToHex(bytes: UniversalAddressBytes): UniversalAddressHex {\n if (bytes.length !== 36) {\n throw new Error(`Invalid bytes length: ${bytes.length}`)\n }\n \n const hex = Array.from(bytes)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('')\n \n return `0x${hex}` as UniversalAddressHex\n}\n\n/**\n * Convert hex string to Universal Address bytes\n * \n * @param hex - 0x + 72 hex characters\n * @returns 36 bytes Uint8Array\n * \n * @example\n * hexToBytes('0x0000003c000000000000000000000000...')\n * // => Uint8Array(36)\n */\nexport function hexToBytes(hex: UniversalAddressHex | string): UniversalAddressBytes {\n const cleaned = hex.replace(/^0x/, '')\n \n if (cleaned.length !== 72) {\n throw new Error(`Invalid hex length: ${hex}`)\n }\n \n const bytes = new Uint8Array(36)\n for (let i = 0; i < 36; i++) {\n bytes[i] = parseInt(cleaned.substring(i * 2, i * 2 + 2), 16)\n }\n \n return bytes\n}\n\n/**\n * Convenience function: Create Universal Address from Native Chain ID + Address\n * \n * @param nativeChainId - Native Chain ID\n * @param nativeAddress - Native address\n * @returns 36 bytes Uint8Array\n */\nexport function createUniversalAddress(\n nativeChainId: number | string,\n nativeAddress: string\n): UniversalAddressBytes {\n const slip44 = nativeToSlip44(nativeChainId)\n if (slip44 === null) {\n throw new Error(`Unsupported native chain ID: ${nativeChainId}`)\n }\n \n return encodeUniversalAddress(slip44, nativeAddress)\n}\n\n/**\n * Convenience function: Create and return hex format Universal Address\n */\nexport function createUniversalAddressHex(\n nativeChainId: number | string,\n nativeAddress: string\n): UniversalAddressHex {\n const bytes = createUniversalAddress(nativeChainId, nativeAddress)\n return bytesToHex(bytes)\n}\n\n/**\n * Validate Universal Address format\n */\nexport function isValidUniversalAddress(address: UniversalAddressBytes | UniversalAddressHex): boolean {\n try {\n const bytes = typeof address === 'string' ? hexToBytes(address) : address\n decodeUniversalAddress(bytes)\n return true\n } catch {\n return false\n }\n}\n\n"]}