{"_id":"@alixex/chain-constants","name":"@alixex/chain-constants","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@alixex/chain-constants","version":"1.0.0","description":"Shared chain constants and utilities for Aryxn multi-chain applications","main":"src/index.ts","types":"src/index.ts","scripts":{"lint":"oxlint","format":"oxlint --fix","type-check":"tsc -b --noEmit"},"license":"MIT","_id":"@alixex/chain-constants@1.0.0","gitHead":"ead0ebd3a7483ce233bde0c3421a5db59f47a51e","_nodeVersion":"23.10.0","_npmVersion":"11.4.2","dist":{"integrity":"sha512-k1IvlBamH2Z3vYW+rLGLC0KLBiSTTpf+tvAA7JXLXqfBmJzqQVE0s6+66sFdzWrkmr+43uMH/oKuMy8nAVNOZA==","shasum":"19fc95613b4f9a43327a30c933b082d963156d55","tarball":"https://registry.npmjs.org/@alixex/chain-constants/-/chain-constants-1.0.0.tgz","fileCount":29,"unpackedSize":320899,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIC4weoDR2LD4669tAmcQaVLQfsUD0256TTAAMFTM/ToqAiBo09e/hSMk9KLqHCNjc8rTL+K/JRTcZIYm6a7oArQl7g=="}]},"_npmUser":{"name":"chaxus","email":"nouo18@163.com"},"directories":{},"maintainers":[{"name":"chaxus","email":"nouo18@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/chain-constants_1.0.0_1773579034638_0.5843884098095395"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-15T12:50:34.530Z","1.0.0":"2026-03-15T12:50:34.881Z","modified":"2026-03-15T12:50:35.154Z"},"maintainers":[{"name":"chaxus","email":"nouo18@163.com"}],"description":"Shared chain constants and utilities for Aryxn multi-chain applications","license":"MIT","readme":"# @alixex/chain-constants\n\nAryxn 多链应用的共享链常量和工具函数。为链标识符、链 ID、浏览器 URL 和链相关元数据提供单一真相源。\n\n[English Documentation](./README.md)\n\n## 特性\n\n- ✨ **类型安全的链标识符** - 基于枚举的链常量防止拼写错误\n- 🔗 **多链支持** - Ethereum、Solana、Bitcoin、Arweave、Sui 等\n- 🌐 **浏览器 URL 构建器** - 自动生成交易浏览器链接\n- 📋 **精选链列表** - 为常见用例预定义的链列表（同步、账户、余额）\n- 🔢 **链 ID 映射** - 链名称 ↔ ID 的双向转换\n\n## 安装\n\n```bash\npnpm add @alixex/chain-constants\n```\n\n## 快速开始\n\n```typescript\nimport {\n  Chains,\n  ChainIds,\n  getExplorerTxUrl,\n  AccountChains,\n} from \"@alixex/chain-constants\"\n\n// 使用类型安全的链常量\nif (userChain === Chains.ETHEREUM) {\n  console.log(\"用户在以太坊上\")\n}\n\n// 获取链 ID\nconst ethChainId = ChainIds.ETHEREUM // 1\n\n// 生成浏览器 URL\nconst txUrl = getExplorerTxUrl(Chains.ETHEREUM, \"0xabc...\")\n// => \"https://etherscan.io/tx/0xabc...\"\n\n// 遍历支持的链\nAccountChains.forEach((chain) => {\n  console.log(`支持 ${chain}`)\n})\n```\n\n## API 参考\n\n### 链常量\n\n#### `Chains`\n\n支持的区块链标识符的类型安全枚举：\n\n```typescript\nexport const Chains = {\n  ETHEREUM: \"ethereum\",\n  SOLANA: \"solana\",\n  BITCOIN: \"bitcoin\",\n  ARWEAVE: \"arweave\",\n  SUI: \"sui\",\n} as const\n```\n\n**用法：**\n\n```typescript\nimport { Chains } from \"@alixex/chain-constants\"\n\n// ✅ 类型安全\nconst chain = Chains.ETHEREUM\n\n// ❌ 避免硬编码字符串\nconst chain = \"ethereum\" // 容易拼写错误\n```\n\n#### `ChainIds`\n\nEVM 和其他链的数字链 ID：\n\n```typescript\nexport const ChainIds = {\n  ETHEREUM: 1,\n  POLYGON: 137,\n  ARBITRUM: 42161,\n  OPTIMISM: 10,\n  BSC: 56,\n  AVALANCHE: 43114,\n  BASE: 8453,\n  SOLANA: 1151111081099710,\n  // ... 更多\n} as const\n```\n\n#### `EvmChainIds`\n\n所有 EVM 兼容链 ID 的数组：\n\n```typescript\nimport { EvmChainIds } from \"@alixex/chain-constants\"\n\nconst isEvm = EvmChainIds.includes(chainId)\n```\n\n### 链列表\n\n为常见用例预配置的数组：\n\n#### `AccountChains`\n\n支持账户/钱包管理的链：\n\n```typescript\nexport const AccountChains = [\n  Chains.ETHEREUM,\n  Chains.BITCOIN,\n  Chains.SOLANA,\n  Chains.SUI,\n  Chains.ARWEAVE,\n] as const\n```\n\n#### `TokenBalanceChains`\n\n支持代币余额查询的链：\n\n```typescript\nexport const TokenBalanceChains = [\n  Chains.ETHEREUM,\n  Chains.SOLANA,\n  Chains.SUI,\n] as const\n```\n\n#### `AppSyncChains`\n\n支持应用数据同步的链：\n\n```typescript\nexport const AppSyncChains = [\n  Chains.ETHEREUM,\n  Chains.SOLANA,\n  Chains.BITCOIN,\n  Chains.ARWEAVE,\n  Chains.SUI,\n] as const\n```\n\n### 链映射\n\n#### `ChainNameToId`\n\n将链名称（含别名）映射到数字 ID：\n\n```typescript\nimport { ChainNameToId } from \"@alixex/chain-constants\"\n\nChainNameToId.ethereum // 1\nChainNameToId.eth // 1 (别名)\nChainNameToId.polygon // 137\nChainNameToId.matic // 137 (别名)\n```\n\n#### `ChainIdToName`\n\n从链 ID 到显示名称的反向映射：\n\n```typescript\nimport { ChainIdToName } from \"@alixex/chain-constants\"\n\nChainIdToName[1] // \"Ethereum\"\nChainIdToName[137] // \"Polygon\"\n```\n\n### 浏览器工具\n\n#### `getExplorerTxUrl(chain, txHash)`\n\n为交易生成区块链浏览器 URL：\n\n```typescript\nimport { getExplorerTxUrl, Chains } from \"@alixex/chain-constants\"\n\nconst url = getExplorerTxUrl(Chains.ETHEREUM, \"0xabc123...\")\n// => \"https://etherscan.io/tx/0xabc123...\"\n\ngetExplorerTxUrl(Chains.SOLANA, \"abc123...\")\n// => \"https://solscan.io/tx/abc123...\"\n\ngetExplorerTxUrl(Chains.ARWEAVE, \"abc123...\")\n// => \"https://arweave.net/tx/abc123...\"\n\n// 未知链回退到 Blockchair\ngetExplorerTxUrl(\"unknown\", \"abc123\")\n// => \"https://blockchair.com/search?q=abc123\"\n```\n\n#### `isKnownExplorerChain(chain)`\n\n检查链是否有已知的浏览器 URL：\n\n```typescript\nimport { isKnownExplorerChain } from \"@alixex/chain-constants\"\n\nisKnownExplorerChain(\"ethereum\") // true\nisKnownExplorerChain(\"solana\") // true\nisKnownExplorerChain(\"unknown\") // false\n```\n\n#### `ExplorerTxBaseByChain`\n\n原始浏览器基础 URL 映射：\n\n```typescript\nexport const ExplorerTxBaseByChain = {\n  ethereum: \"https://etherscan.io/tx/\",\n  solana: \"https://solscan.io/tx/\",\n  bitcoin: \"https://mempool.space/tx/\",\n  arweave: \"https://arweave.net/tx/\",\n  sui: \"https://suiscan.xyz/mainnet/tx/\",\n  // ... 包含别名 (eth, sol, btc, ar)\n} as const\n```\n\n## TypeScript 类型\n\n```typescript\nimport type { ChainType } from \"@alixex/chain-constants\"\n\n// ChainType = \"ethereum\" | \"solana\" | \"bitcoin\" | \"arweave\" | \"sui\"\nconst chain: ChainType = Chains.ETHEREUM\n```\n\n## 最佳实践\n\n### ✅ 推荐：使用 Chains 枚举的处理器映射\n\n```typescript\nimport { Chains } from \"@alixex/chain-constants\"\n\nconst chainHandlers = {\n  [Chains.ETHEREUM]: () => handleEthereum(),\n  [Chains.SOLANA]: () => handleSolana(),\n  [Chains.ARWEAVE]: () => handleArweave(),\n}\n\nconst handler = chainHandlers[chain]\nif (handler) handler()\n```\n\n### ❌ 不推荐：使用硬编码的 if/else 链\n\n```typescript\n// 避免这种模式\nif (chain === \"ethereum\") {\n  // ...\n} else if (chain === \"solana\") {\n  // ...\n}\n```\n\n### ✅ 推荐：导入特定常量\n\n```typescript\nimport { Chains, AccountChains, getExplorerTxUrl } from \"@alixex/chain-constants\"\n```\n\n### ❌ 不推荐：重复定义链数组\n\n```typescript\n// 避免在应用中重复定义这些\nconst supportedChains = [\"ethereum\", \"solana\", \"sui\"] // 应使用 AccountChains\n```\n\n## 包结构\n\n```\npackages/chain-constants/\n├── src/\n│   ├── index.ts         # 统一导出\n│   └── chains.ts        # 所有常量和工具函数\n├── package.json\n├── README.md\n├── README.zh.md\n└── tsconfig.json\n```\n\n## 许可证\n\nAGPL-3.0-or-later\n\n## 相关包\n\n- [@alixex/cross-chain](../cross-chain) - 跨链桥接工具\n- [@alixex/query-chain](../query-chain) - 多链数据查询\n- [@alixex/wallet-core](../wallet-core) - 多链钱包管理\n\n---\n\n用 ❤️ 为 Aryxn 生态系统构建\n","readmeFilename":"README.zh.md","_rev":"1-763763a92ecf8d3e1a93ef5b10844880"}