@continuumdao/ctm-mpc-defi 0.2.7 → 0.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/catalog.cjs +754 -104
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +693 -5
- package/dist/agent/catalog.js +721 -104
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/skills/_shared/multisign-mcp-gas.md +20 -0
- package/dist/agent/skills/aave-v4/SKILL.md +0 -7
- package/dist/agent/skills/curve-dao/SKILL.md +0 -7
- package/dist/agent/skills/ethena/SKILL.md +1 -1
- package/dist/agent/skills/euler-v2/SKILL.md +1 -1
- package/dist/agent/skills/gmx/SKILL.md +29 -2
- package/dist/agent/skills/hyperliquid/SKILL.md +177 -0
- package/dist/agent/skills/lido/SKILL.md +1 -1
- package/dist/agent/skills/maple-syrup/SKILL.md +1 -1
- package/dist/agent/skills/sky/SKILL.md +1 -1
- package/dist/agent/skills/uniswap-v4/SKILL.md +0 -7
- package/dist/protocols/evm/hyperliquid/index.cjs +1177 -0
- package/dist/protocols/evm/hyperliquid/index.cjs.map +1 -0
- package/dist/protocols/evm/hyperliquid/index.d.ts +515 -0
- package/dist/protocols/evm/hyperliquid/index.js +1109 -0
- package/dist/protocols/evm/hyperliquid/index.js.map +1 -0
- package/package.json +6 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/registry.ts","../../../../src/protocols/evm/hyperliquid/support.ts","../../../../src/protocols/evm/hyperliquid/constants.ts","../../../../src/protocols/evm/hyperliquid/api.ts","../../../../src/protocols/evm/hyperliquid/assets.ts","../../../../src/protocols/evm/hyperliquid/reads.ts","../../../../src/protocols/evm/hyperliquid/coreWriter.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/protocols/evm/hyperliquid/multisign.ts","../../../../src/protocols/evm/hyperliquid/vaultMultisign.ts","../../../../src/protocols/evm/hyperliquid/stakingMultisign.ts","../../../../src/protocols/evm/hyperliquid/index.ts"],"names":["name","parseAbi","encodeFunctionData","encodeAbiParameters","getClientIdFromKeyGenResult","gasLimitFromEstimateAndChainConfig","defineChain","createPublicClient","http","fetchChainFeeParams","getAddress","parseGwei","gweiToDecimalString","serializeTransaction","proposalTxParamsToFeeSnapshot","alignEip1559FeesWithLatestBase","keccak256"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ProtocolModule } from './types.js'\n\nconst modules: ProtocolModule[] = []\n\nexport function registerProtocolModule(mod: ProtocolModule): void {\n const existing = modules.findIndex((m) => m.id === mod.id)\n if (existing >= 0) {\n modules[existing] = mod\n } else {\n modules.push(mod)\n }\n}\n\nexport function getProtocolModules(): readonly ProtocolModule[] {\n return modules\n}\n\nexport function getProtocolModule(id: string): ProtocolModule | undefined {\n return modules.find((m) => m.id === id)\n}\n\nexport function getActionsByChainCategory(category: string): ProtocolModule['actions'] {\n return modules.filter((m) => m.chainCategory === category).flatMap((m) => m.actions)\n}\n","/** HyperEVM chains for Hyperliquid CoreWriter integration. */\nexport const HYPERLIQUID_SUPPORTED_CHAIN_IDS = [999, 998] as const\n\nexport type HyperliquidSupportedChainId = (typeof HYPERLIQUID_SUPPORTED_CHAIN_IDS)[number]\n\nexport function isHyperliquidChainSupported(chainId: number): chainId is HyperliquidSupportedChainId {\n return (HYPERLIQUID_SUPPORTED_CHAIN_IDS as readonly number[]).includes(chainId)\n}\n\nexport function hyperliquidApiBaseUrl(chainId: number): string {\n return chainId === 998 ? 'https://api.hyperliquid-testnet.xyz' : 'https://api.hyperliquid.xyz'\n}\n\n/** Stats feed used by app.hyperliquid.xyz/vaults (official vaultSummaries returns []). */\nexport function hyperliquidVaultStatsUrl(chainId: number): string | null {\n return chainId === 998 ? null : 'https://stats-data.hyperliquid.xyz/Mainnet/vaults'\n}\n\nexport const HYPERLIQUID_HLP_VAULT_ADDRESS = '0xdfc24b077bc1425ad1dea75bcb6f8158e10df303'\n","/** CoreWriter system contract on HyperEVM — sends actions to HyperCore. */\nexport const HYPERLIQUID_CORE_WRITER_ADDRESS = '0x3333333333333333333333333333333333333333' as const\n\n/** Spot asset IDs are offset from perp indices. */\nexport const HYPERLIQUID_SPOT_ASSET_OFFSET = 10_000\n\nexport const HYPERLIQUID_CORE_WRITER_GAS_FALLBACK = 120_000n\n\n/** Time-in-force encodings for CoreWriter limit orders. */\nexport const HYPERLIQUID_TIF = {\n alo: 1,\n gtc: 2,\n ioc: 3,\n} as const\n\nexport type HyperliquidTifKey = keyof typeof HYPERLIQUID_TIF\n","import { hyperliquidApiBaseUrl, hyperliquidVaultStatsUrl, HYPERLIQUID_HLP_VAULT_ADDRESS } from './support.js'\n\nexport type HyperliquidPerpMarket = {\n name: string\n asset: number\n szDecimals: number\n maxLeverage: number\n onlyIsolated?: boolean\n}\n\nexport type HyperliquidPerpDex = {\n name: string\n fullName: string\n}\n\nexport type HyperliquidSpotMarket = {\n name: string\n asset: number\n tokenIndex: number\n szDecimals: number\n}\n\nexport type HyperliquidOhlcvInterval = '1m' | '3m' | '5m' | '15m' | '30m' | '1h' | '2h' | '4h' | '8h' | '12h' | '1d' | '3d' | '1w' | '1M'\n\nexport type HyperliquidOhlcvCandle = {\n timestampMs: number\n open: string\n high: string\n low: string\n close: string\n volume: string\n}\n\nasync function hyperliquidInfoPost<T>(chainId: number, body: Record<string, unknown>): Promise<T> {\n const base = hyperliquidApiBaseUrl(chainId)\n const res = await fetch(`${base}/info`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n cache: 'no-store',\n })\n if (!res.ok) {\n const text = await res.text().catch(() => '')\n throw new Error(`Hyperliquid info API failed (${res.status}): ${text.slice(0, 200)}`)\n }\n return (await res.json()) as T\n}\n\ntype MetaResponse = {\n universe: Array<{\n name: string\n szDecimals: number\n maxLeverage: number\n onlyIsolated?: boolean\n }>\n}\n\ntype SpotMetaResponse = {\n universe: Array<{ name: string; tokens: number[]; index: number }>\n tokens: Array<{ name: string; szDecimals: number; index: number }>\n}\n\nexport async function hyperliquidFetchPerpMeta(args: {\n chainId: number\n dex?: string\n}): Promise<{ markets: HyperliquidPerpMarket[] }> {\n const req: Record<string, unknown> = { type: 'meta' }\n if (args.dex?.trim()) req.dex = args.dex.trim()\n const meta = await hyperliquidInfoPost<MetaResponse>(args.chainId, req)\n const markets: HyperliquidPerpMarket[] = (meta.universe ?? []).map((u, i) => ({\n name: u.name,\n asset: i,\n szDecimals: u.szDecimals,\n maxLeverage: u.maxLeverage,\n onlyIsolated: u.onlyIsolated,\n }))\n return { markets }\n}\n\nexport async function hyperliquidFetchSpotMeta(args: {\n chainId: number\n}): Promise<{ markets: HyperliquidSpotMarket[] }> {\n const meta = await hyperliquidInfoPost<SpotMetaResponse>(args.chainId, { type: 'spotMeta' })\n const tokenByIndex = new Map((meta.tokens ?? []).map((t) => [t.index, t]))\n const markets: HyperliquidSpotMarket[] = (meta.universe ?? []).map((u, i) => {\n const baseTokenIdx = u.tokens[0]\n const token = baseTokenIdx != null ? tokenByIndex.get(baseTokenIdx) : undefined\n return {\n name: u.name,\n asset: 10_000 + i,\n tokenIndex: i,\n szDecimals: token?.szDecimals ?? 8,\n }\n })\n return { markets }\n}\n\nexport async function hyperliquidFetchAllMids(args: {\n chainId: number\n dex?: string\n}): Promise<{ mids: Record<string, string> }> {\n const req: Record<string, unknown> = { type: 'allMids' }\n if (args.dex?.trim()) req.dex = args.dex.trim()\n const mids = await hyperliquidInfoPost<Record<string, string>>(args.chainId, req)\n return { mids }\n}\n\nexport async function hyperliquidFetchCandles(args: {\n chainId: number\n coin: string\n interval: HyperliquidOhlcvInterval\n startTimeMs?: number\n endTimeMs?: number\n}): Promise<{ candles: HyperliquidOhlcvCandle[] }> {\n const endTime = args.endTimeMs ?? Date.now()\n const startTime = args.startTimeMs ?? endTime - 7 * 24 * 60 * 60 * 1000\n const raw = await hyperliquidInfoPost<\n Array<{ t: number; o: string; h: string; l: string; c: string; v: string }>\n >(args.chainId, {\n type: 'candleSnapshot',\n req: {\n coin: args.coin,\n interval: args.interval,\n startTime,\n endTime,\n },\n })\n const candles = (raw ?? []).map((c) => ({\n timestampMs: c.t,\n open: c.o,\n high: c.h,\n low: c.l,\n close: c.c,\n volume: c.v,\n }))\n return { candles }\n}\n\nexport async function hyperliquidFetchMarketSnapshot(args: {\n chainId: number\n coin: string\n interval?: HyperliquidOhlcvInterval\n dex?: string\n}): Promise<{\n coin: string\n midUsd: string | null\n fetchedAtMs: number\n interval: HyperliquidOhlcvInterval\n candles: HyperliquidOhlcvCandle[]\n}> {\n const interval = args.interval ?? '1h'\n const [{ mids }, { candles }] = await Promise.all([\n hyperliquidFetchAllMids({ chainId: args.chainId, dex: args.dex }),\n hyperliquidFetchCandles({ chainId: args.chainId, coin: args.coin, interval }),\n ])\n return {\n coin: args.coin,\n midUsd: mids[args.coin] ?? null,\n fetchedAtMs: Date.now(),\n interval,\n candles,\n }\n}\n\ntype ClearinghouseState = {\n assetPositions?: Array<{\n position?: {\n coin?: string\n szi?: string\n entryPx?: string\n positionValue?: string\n unrealizedPnl?: string\n liquidationPx?: string | null\n leverage?: { type?: string; value?: number }\n maxLeverage?: number\n marginUsed?: string\n returnOnEquity?: string\n }\n }>\n marginSummary?: { accountValue?: string; totalMarginUsed?: string }\n /** USD that can leave perp margin (e.g. transfer to spot). */\n withdrawable?: string\n}\n\ntype SpotClearinghouseState = {\n balances?: Array<{\n coin?: string\n token?: number\n total?: string\n hold?: string\n entryNtl?: string\n }>\n}\n\nexport async function hyperliquidFetchClearinghouseState(args: {\n chainId: number\n user: string\n dex?: string\n}): Promise<{ state: ClearinghouseState }> {\n const req: Record<string, unknown> = { type: 'clearinghouseState', user: args.user }\n if (args.dex?.trim()) req.dex = args.dex.trim()\n const state = await hyperliquidInfoPost<ClearinghouseState>(args.chainId, req)\n return { state }\n}\n\nexport async function hyperliquidFetchSpotClearinghouseState(args: {\n chainId: number\n user: string\n}): Promise<{ state: SpotClearinghouseState }> {\n const state = await hyperliquidInfoPost<SpotClearinghouseState>(args.chainId, {\n type: 'spotClearinghouseState',\n user: args.user,\n })\n return { state }\n}\n\ntype ActiveAssetDataResponse = {\n coin?: string\n markPx?: string\n leverage?: { type?: string; value?: number; rawUsd?: string }\n /** [buy, sell] max size in coin units at current leverage/margin. */\n availableToTrade?: [string, string]\n}\n\nexport type HyperliquidActiveAssetContext = {\n markPx: string | null\n leverageLabel: string | null\n availableToBuy: string | null\n availableToSell: string | null\n}\n\nfunction hyperliquidFmtLeverage(leverage?: { type?: string; value?: number }): string | null {\n if (leverage?.value == null) return null\n const t = leverage.type === 'isolated' ? 'iso' : 'cross'\n return `${leverage.value}x ${t}`\n}\n\nfunction hyperliquidPositiveSizeString(value: string | undefined): string | null {\n const n = Number.parseFloat(String(value ?? '0'))\n if (!Number.isFinite(n) || n <= 0) return null\n return String(n)\n}\n\nexport async function hyperliquidFetchActiveAssetData(args: {\n chainId: number\n user: string\n coin: string\n}): Promise<{ activeAsset: HyperliquidActiveAssetContext }> {\n const raw = await hyperliquidInfoPost<ActiveAssetDataResponse>(args.chainId, {\n type: 'activeAssetData',\n user: args.user,\n coin: args.coin.trim(),\n })\n const avail = raw.availableToTrade\n return {\n activeAsset: {\n markPx: raw.markPx?.trim() || null,\n leverageLabel: hyperliquidFmtLeverage(raw.leverage),\n availableToBuy: avail?.[0] != null ? hyperliquidPositiveSizeString(avail[0]) : null,\n availableToSell: avail?.[1] != null ? hyperliquidPositiveSizeString(avail[1]) : null,\n },\n }\n}\n\nexport type HyperliquidOpenOrder = {\n coin: string\n side: string\n limitPx: string\n sz: string\n oid: number\n timestamp: number\n reduceOnly?: boolean\n}\n\nexport async function hyperliquidFetchOpenOrders(args: {\n chainId: number\n user: string\n dex?: string\n}): Promise<{ orders: HyperliquidOpenOrder[] }> {\n const req: Record<string, unknown> = { type: 'openOrders', user: args.user }\n if (args.dex?.trim()) req.dex = args.dex.trim()\n const orders = await hyperliquidInfoPost<HyperliquidOpenOrder[]>(args.chainId, req)\n return { orders: orders ?? [] }\n}\n\nexport type HyperliquidVaultEquity = {\n vaultAddress: string\n equity: string\n}\n\nexport async function hyperliquidFetchUserVaultEquities(args: {\n chainId: number\n user: string\n}): Promise<{ rows: HyperliquidVaultEquity[] }> {\n const rows = await hyperliquidInfoPost<HyperliquidVaultEquity[]>(args.chainId, {\n type: 'userVaultEquities',\n user: args.user,\n })\n return { rows: rows ?? [] }\n}\n\nexport type HyperliquidVaultSummary = {\n vaultAddress: string\n name: string\n /** Annualized return as decimal (0.12 = 12%). */\n apr: number | null\n tvlUsd: string | null\n}\n\ntype VaultStatsRow = {\n apr?: number\n summary?: {\n name?: string\n vaultAddress?: string\n tvl?: string\n isClosed?: boolean\n }\n}\n\ntype VaultDetailsResponse = {\n name?: string\n vaultAddress?: string\n apr?: number\n isClosed?: boolean\n}\n\nconst VAULT_CATALOG_MAX = 40\nconst VAULT_MIN_TVL_USD = 1_000\n\nfunction vaultSummaryFromStatsRow(row: VaultStatsRow): HyperliquidVaultSummary | null {\n const summary = row.summary\n if (!summary?.vaultAddress?.trim() || !summary.name?.trim() || summary.isClosed) return null\n const tvl = Number.parseFloat(summary.tvl ?? '')\n if (!Number.isFinite(tvl) || tvl < VAULT_MIN_TVL_USD) return null\n return {\n vaultAddress: summary.vaultAddress,\n name: summary.name.trim(),\n apr: typeof row.apr === 'number' && Number.isFinite(row.apr) ? row.apr : null,\n tvlUsd: summary.tvl ?? null,\n }\n}\n\nfunction sortVaultCatalog(vaults: HyperliquidVaultSummary[]): HyperliquidVaultSummary[] {\n const hlp = HYPERLIQUID_HLP_VAULT_ADDRESS.toLowerCase()\n return [...vaults].sort((a, b) => {\n const aHlp = a.vaultAddress.toLowerCase() === hlp\n const bHlp = b.vaultAddress.toLowerCase() === hlp\n if (aHlp && !bHlp) return -1\n if (bHlp && !aHlp) return 1\n return Number.parseFloat(b.tvlUsd ?? '0') - Number.parseFloat(a.tvlUsd ?? '0')\n })\n}\n\nasync function hyperliquidFetchVaultCatalogFromStats(chainId: number): Promise<HyperliquidVaultSummary[]> {\n const statsUrl = hyperliquidVaultStatsUrl(chainId)\n if (!statsUrl) return []\n\n const res = await fetch(statsUrl, { cache: 'no-store' })\n if (!res.ok) {\n const text = await res.text().catch(() => '')\n throw new Error(`Hyperliquid vault stats failed (${res.status}): ${text.slice(0, 200)}`)\n }\n const raw = (await res.json()) as VaultStatsRow[]\n const byAddr = new Map<string, HyperliquidVaultSummary>()\n for (const row of raw ?? []) {\n const vault = vaultSummaryFromStatsRow(row)\n if (!vault) continue\n byAddr.set(vault.vaultAddress.toLowerCase(), vault)\n }\n return sortVaultCatalog([...byAddr.values()]).slice(0, VAULT_CATALOG_MAX)\n}\n\nasync function hyperliquidFetchVaultDetails(args: {\n chainId: number\n vaultAddress: string\n}): Promise<HyperliquidVaultSummary | null> {\n const raw = await hyperliquidInfoPost<VaultDetailsResponse>(args.chainId, {\n type: 'vaultDetails',\n vaultAddress: args.vaultAddress,\n })\n if (!raw?.vaultAddress?.trim() || !raw.name?.trim() || raw.isClosed) return null\n return {\n vaultAddress: raw.vaultAddress,\n name: raw.name.trim(),\n apr: typeof raw.apr === 'number' && Number.isFinite(raw.apr) ? raw.apr : null,\n tvlUsd: null,\n }\n}\n\nexport async function hyperliquidFetchVaultSummaries(args: {\n chainId: number\n executorAddress?: string\n}): Promise<{ vaults: HyperliquidVaultSummary[] }> {\n const catalog = await hyperliquidFetchVaultCatalogFromStats(args.chainId)\n const byAddr = new Map(catalog.map((v) => [v.vaultAddress.toLowerCase(), v]))\n\n const executor = args.executorAddress?.trim().toLowerCase()\n if (executor) {\n const { rows } = await hyperliquidFetchUserVaultEquities({ chainId: args.chainId, user: executor })\n const missing = rows.filter((r) => r.vaultAddress && !byAddr.has(r.vaultAddress.toLowerCase()))\n const extras = await Promise.all(\n missing.map(async (r) => hyperliquidFetchVaultDetails({ chainId: args.chainId, vaultAddress: r.vaultAddress })),\n )\n for (const vault of extras) {\n if (vault) byAddr.set(vault.vaultAddress.toLowerCase(), vault)\n }\n }\n\n return { vaults: sortVaultCatalog([...byAddr.values()]) }\n}\n\nexport async function hyperliquidFetchDexList(args: {\n chainId: number\n}): Promise<{ dexes: HyperliquidPerpDex[] }> {\n const raw = await hyperliquidInfoPost<\n Array<{ name: string; fullName?: string } | string | null>\n >(args.chainId, {\n type: 'perpDexs',\n })\n if (!Array.isArray(raw)) return { dexes: [] }\n const dexes: HyperliquidPerpDex[] = []\n for (const entry of raw) {\n if (entry == null) continue\n if (typeof entry === 'string') {\n const name = entry.trim()\n if (name) dexes.push({ name, fullName: name })\n continue\n }\n const name = entry.name?.trim()\n if (!name) continue\n const fullName = entry.fullName?.trim() || name\n dexes.push({ name, fullName })\n }\n return { dexes }\n}\n\nexport async function hyperliquidFetchDelegations(args: {\n chainId: number\n user: string\n}): Promise<{ delegations: Array<{ validator: string; amount: string }> }> {\n const raw = await hyperliquidInfoPost<Array<{ validator: string; amount: string }>>(args.chainId, {\n type: 'delegations',\n user: args.user,\n })\n return { delegations: raw ?? [] }\n}\n\nexport async function hyperliquidFetchStakingSummary(args: {\n chainId: number\n user: string\n}): Promise<{ delegated: string; undelegated: string }> {\n const raw = await hyperliquidInfoPost<{ delegated: string; undelegated: string }>(args.chainId, {\n type: 'delegatorSummary',\n user: args.user,\n })\n return { delegated: raw?.delegated ?? '0', undelegated: raw?.undelegated ?? '0' }\n}\n","import { hyperliquidFetchPerpMeta, hyperliquidFetchSpotMeta } from './api.js'\nimport { HYPERLIQUID_SPOT_ASSET_OFFSET } from './constants.js'\n\nexport async function hyperliquidResolvePerpAsset(args: {\n chainId: number\n coin: string\n dex?: string\n}): Promise<{ asset: number; szDecimals: number; maxLeverage: number }> {\n const coin = args.coin.trim()\n const { markets } = await hyperliquidFetchPerpMeta({ chainId: args.chainId, dex: args.dex })\n const hit = markets.find((m) => m.name.toLowerCase() === coin.toLowerCase())\n if (!hit) throw new Error(`Unknown Hyperliquid perp market: ${coin}`)\n return { asset: hit.asset, szDecimals: hit.szDecimals, maxLeverage: hit.maxLeverage }\n}\n\nexport async function hyperliquidResolveSpotAsset(args: {\n chainId: number\n coin: string\n}): Promise<{ asset: number; szDecimals: number }> {\n const coin = args.coin.trim()\n const { markets } = await hyperliquidFetchSpotMeta({ chainId: args.chainId })\n const hit = markets.find((m) => m.name.toLowerCase() === coin.toLowerCase())\n if (!hit) throw new Error(`Unknown Hyperliquid spot market: ${coin}`)\n return { asset: hit.asset, szDecimals: hit.szDecimals }\n}\n\nexport async function hyperliquidResolveAsset(args: {\n chainId: number\n coin: string\n marketKind: 'perp' | 'spot'\n dex?: string\n}): Promise<{ asset: number; szDecimals: number; maxLeverage?: number }> {\n if (args.marketKind === 'spot') {\n const r = await hyperliquidResolveSpotAsset({ chainId: args.chainId, coin: args.coin })\n return r\n }\n return hyperliquidResolvePerpAsset({ chainId: args.chainId, coin: args.coin, dex: args.dex })\n}\n\nexport function hyperliquidIsSpotAssetId(asset: number): boolean {\n return asset >= HYPERLIQUID_SPOT_ASSET_OFFSET\n}\n","import {\n hyperliquidFetchActiveAssetData,\n hyperliquidFetchClearinghouseState,\n hyperliquidFetchDelegations,\n hyperliquidFetchDexList,\n hyperliquidFetchMarketSnapshot,\n hyperliquidFetchOpenOrders,\n hyperliquidFetchPerpMeta,\n hyperliquidFetchSpotClearinghouseState,\n hyperliquidFetchStakingSummary,\n hyperliquidFetchUserVaultEquities,\n hyperliquidFetchVaultSummaries,\n type HyperliquidActiveAssetContext,\n type HyperliquidOhlcvInterval,\n} from './api.js'\n\nexport type HyperliquidUsdClassBalances = {\n spotUsdcAvailable: string\n perpWithdrawable: string\n}\n\nfunction hyperliquidUsdAmountString(value: string | undefined): string {\n const n = Number.parseFloat(String(value ?? '0'))\n if (!Number.isFinite(n) || n <= 0) return '0'\n return n.toFixed(6).replace(/\\.?0+$/, '') || '0'\n}\n\nfunction hyperliquidSpotUsdcAvailable(balances: Array<{ coin?: string; total?: string; hold?: string }>): string {\n const usdc = balances.find((b) => b.coin === 'USDC')\n if (!usdc) return '0'\n const total = Number.parseFloat(String(usdc.total ?? '0'))\n const hold = Number.parseFloat(String(usdc.hold ?? '0'))\n if (!Number.isFinite(total)) return '0'\n const avail = Math.max(0, total - (Number.isFinite(hold) ? hold : 0))\n return hyperliquidUsdAmountString(String(avail))\n}\n\nexport async function hyperliquidFetchUsdClassBalances(args: {\n chainId: number\n executorAddress: string\n}): Promise<{ balances: HyperliquidUsdClassBalances }> {\n const user = args.executorAddress.trim().toLowerCase()\n const [{ state: spotState }, { state: perpState }] = await Promise.all([\n hyperliquidFetchSpotClearinghouseState({ chainId: args.chainId, user }),\n hyperliquidFetchClearinghouseState({ chainId: args.chainId, user }),\n ])\n return {\n balances: {\n spotUsdcAvailable: hyperliquidSpotUsdcAvailable(spotState.balances ?? []),\n perpWithdrawable: hyperliquidUsdAmountString(perpState.withdrawable),\n },\n }\n}\n\nexport type HyperliquidPerpAccountSummary = {\n accountValueUsd: string | null\n totalMarginUsedUsd: string | null\n withdrawableUsd: string | null\n}\n\nexport type HyperliquidOpenMarketContext = {\n account: HyperliquidPerpAccountSummary\n activeAsset: HyperliquidActiveAssetContext\n}\n\nexport type HyperliquidPositionDisplayRow = {\n key: string\n coin: string\n isLong: boolean\n size: string | null\n entryPx: string | null\n positionValueUsd: string | null\n unrealizedPnlUsd: string | null\n liquidationPx: string | null\n leverageLabel: string | null\n maxLeverage: number | null\n marginUsedUsd: string | null\n returnOnEquity: string | null\n}\n\nfunction fmtLeverage(leverage?: { type?: string; value?: number }): string | null {\n if (leverage?.value == null) return null\n const t = leverage.type === 'isolated' ? 'iso' : 'cross'\n return `${leverage.value}x ${t}`\n}\n\nfunction mapPositionRow(p: {\n coin?: string\n szi?: string\n entryPx?: string\n positionValue?: string\n unrealizedPnl?: string\n liquidationPx?: string | null\n leverage?: { type?: string; value?: number }\n maxLeverage?: number\n marginUsed?: string\n returnOnEquity?: string\n}): HyperliquidPositionDisplayRow | null {\n if (!p.coin) return null\n const szi = Number.parseFloat(String(p.szi ?? '0'))\n if (!Number.isFinite(szi) || szi === 0) return null\n return {\n key: `${p.coin}:${szi > 0 ? 'long' : 'short'}`,\n coin: p.coin,\n isLong: szi > 0,\n size: String(Math.abs(szi)),\n entryPx: p.entryPx ?? null,\n positionValueUsd: p.positionValue ?? null,\n unrealizedPnlUsd: p.unrealizedPnl ?? null,\n liquidationPx: p.liquidationPx ?? null,\n leverageLabel: fmtLeverage(p.leverage),\n maxLeverage: typeof p.maxLeverage === 'number' && Number.isFinite(p.maxLeverage) ? p.maxLeverage : null,\n marginUsedUsd: p.marginUsed ?? null,\n returnOnEquity: p.returnOnEquity ?? null,\n }\n}\n\nexport async function hyperliquidFetchOpenMarketContext(args: {\n chainId: number\n executorAddress: string\n coin: string\n dex?: string\n}): Promise<{ context: HyperliquidOpenMarketContext }> {\n const user = args.executorAddress.trim().toLowerCase()\n const coin = args.coin.trim()\n const [{ activeAsset }, { state }] = await Promise.all([\n hyperliquidFetchActiveAssetData({ chainId: args.chainId, user, coin }),\n hyperliquidFetchClearinghouseState({ chainId: args.chainId, user, dex: args.dex }),\n ])\n return {\n context: {\n activeAsset,\n account: {\n accountValueUsd: state.marginSummary?.accountValue ?? null,\n totalMarginUsedUsd: state.marginSummary?.totalMarginUsed ?? null,\n withdrawableUsd: state.withdrawable ?? null,\n },\n },\n }\n}\n\nexport async function hyperliquidFetchPositionDisplayRows(args: {\n chainId: number\n executorAddress: string\n dex?: string\n}): Promise<{ rows: HyperliquidPositionDisplayRow[] }> {\n const user = args.executorAddress.trim().toLowerCase()\n const { state } = await hyperliquidFetchClearinghouseState({\n chainId: args.chainId,\n user,\n dex: args.dex,\n })\n const rows: HyperliquidPositionDisplayRow[] = []\n for (const ap of state.assetPositions ?? []) {\n const row = mapPositionRow(ap.position ?? {})\n if (row) rows.push(row)\n }\n return { rows }\n}\n\nexport async function hyperliquidFetchOrdersForExecutor(args: {\n chainId: number\n executorAddress: string\n dex?: string\n}) {\n return hyperliquidFetchOpenOrders({\n chainId: args.chainId,\n user: args.executorAddress.trim().toLowerCase(),\n dex: args.dex,\n })\n}\n\n/** MCP: perp markets + HIP-3 dex list. */\nexport async function hyperliquidFetchMarketsSummary(args: { chainId: number; dex?: string }) {\n const [{ markets }, { dexes }] = await Promise.all([\n hyperliquidFetchPerpMeta({ chainId: args.chainId, dex: args.dex }),\n hyperliquidFetchDexList({ chainId: args.chainId }),\n ])\n return { markets, dexes }\n}\n\n/** MCP: open positions for executor. */\nexport async function hyperliquidFetchPositionsForExecutor(args: {\n chainId: number\n executorAddress: string\n dex?: string\n}) {\n const { rows } = await hyperliquidFetchPositionDisplayRows(args)\n return { positions: rows }\n}\n\n/** MCP: open orders for executor. */\nexport async function hyperliquidFetchOpenOrdersSummary(args: {\n chainId: number\n executorAddress: string\n dex?: string\n}) {\n const { orders } = await hyperliquidFetchOrdersForExecutor(args)\n return { orders }\n}\n\n/** MCP: trading context for a market (account + activeAssetData). */\nexport async function hyperliquidFetchOpenContextSummary(args: {\n chainId: number\n executorAddress: string\n coin: string\n dex?: string\n}) {\n const { context } = await hyperliquidFetchOpenMarketContext(args)\n return { context }\n}\n\n/** MCP: spot vs perp USD balances. */\nexport async function hyperliquidFetchUsdClassBalancesSummary(args: {\n chainId: number\n executorAddress: string\n}) {\n const { balances } = await hyperliquidFetchUsdClassBalances(args)\n return { balances }\n}\n\n/** MCP: vault catalog (may be slow on mainnet — large stats payload). */\nexport async function hyperliquidFetchVaultCatalogSummary(args: {\n chainId: number\n executorAddress?: string\n}) {\n const { vaults } = await hyperliquidFetchVaultSummaries({\n chainId: args.chainId,\n executorAddress: args.executorAddress,\n })\n return { vaults }\n}\n\n/** MCP: user vault equity rows. */\nexport async function hyperliquidFetchUserVaultEquitiesSummary(args: {\n chainId: number\n executorAddress: string\n}) {\n const { rows } = await hyperliquidFetchUserVaultEquities({\n chainId: args.chainId,\n user: args.executorAddress.trim().toLowerCase(),\n })\n return { rows }\n}\n\n/** MCP: HYPE staking summary. */\nexport async function hyperliquidFetchStakingSummaryForExecutor(args: {\n chainId: number\n executorAddress: string\n}) {\n const summary = await hyperliquidFetchStakingSummary({\n chainId: args.chainId,\n user: args.executorAddress.trim().toLowerCase(),\n })\n return { summary }\n}\n\n/** MCP: HYPE delegations. */\nexport async function hyperliquidFetchDelegationsForExecutor(args: {\n chainId: number\n executorAddress: string\n}) {\n const { delegations } = await hyperliquidFetchDelegations({\n chainId: args.chainId,\n user: args.executorAddress.trim().toLowerCase(),\n })\n return { delegations }\n}\n\n/** MCP: mid price + OHLCV candles. */\nexport async function hyperliquidFetchMarketSnapshotSummary(args: {\n chainId: number\n coin: string\n interval?: HyperliquidOhlcvInterval\n dex?: string\n}) {\n const snapshot = await hyperliquidFetchMarketSnapshot(args)\n return { snapshot }\n}\n","import { encodeAbiParameters, encodeFunctionData, parseAbi, type Hex } from 'viem'\nimport {\n HYPERLIQUID_CORE_WRITER_ADDRESS,\n HYPERLIQUID_TIF,\n type HyperliquidTifKey,\n} from './constants.js'\n\nconst coreWriterAbi = parseAbi(['function sendRawAction(bytes data) external'])\n\nconst ACTION_LIMIT_ORDER = 1\nconst ACTION_VAULT_TRANSFER = 2\nconst ACTION_TOKEN_DELEGATE = 3\nconst ACTION_STAKING_DEPOSIT = 4\nconst ACTION_STAKING_WITHDRAW = 5\nconst ACTION_USD_CLASS_TRANSFER = 7\nconst ACTION_CANCEL_BY_OID = 10\nconst ACTION_CANCEL_BY_CLOID = 11\n\nfunction encodeActionHeader(actionId: number): Hex {\n const idHex = actionId.toString(16).padStart(6, '0')\n return `0x01${idHex}` as Hex\n}\n\nfunction encodeCoreWriterCalldata(actionId: number, paramsEncoded: Hex): Hex {\n const header = encodeActionHeader(actionId).slice(2)\n const params = paramsEncoded.startsWith('0x') ? paramsEncoded.slice(2) : paramsEncoded\n const actionBytes = `0x${header}${params}` as Hex\n return encodeFunctionData({\n abi: coreWriterAbi,\n functionName: 'sendRawAction',\n args: [actionBytes],\n })\n}\n\n/** Hyperliquid CoreWriter uses 1e8 fixed-point for prices and sizes. */\nexport function hyperliquidEncodePx8(human: string | number): bigint {\n const n = typeof human === 'number' ? human : Number.parseFloat(String(human).trim())\n if (!Number.isFinite(n) || n < 0) throw new Error('Invalid price or size for Hyperliquid encoding.')\n return BigInt(Math.round(n * 1e8))\n}\n\n/** USD notional amounts on HyperCore typically use 6 decimals. */\nexport function hyperliquidEncodeUsd6(human: string | number): bigint {\n const n = typeof human === 'number' ? human : Number.parseFloat(String(human).trim())\n if (!Number.isFinite(n) || n < 0) throw new Error('Invalid USD amount for Hyperliquid encoding.')\n return BigInt(Math.round(n * 1e6))\n}\n\n/** HYPE / token wei on L1 actions (uint64). */\nexport function hyperliquidEncodeWei8(human: string | number): bigint {\n return hyperliquidEncodePx8(human)\n}\n\nexport function hyperliquidResolveTif(tif: HyperliquidTifKey | string): number {\n const key = String(tif).trim().toLowerCase() as HyperliquidTifKey\n const v = HYPERLIQUID_TIF[key]\n if (v == null) throw new Error(`Unknown time-in-force: ${tif}. Use alo, gtc, or ioc.`)\n return v\n}\n\nexport function buildCoreWriterLimitOrderCalldata(args: {\n asset: number\n isBuy: boolean\n limitPxHuman: string\n szHuman: string\n reduceOnly?: boolean\n tif?: HyperliquidTifKey\n cloid?: bigint\n}): Hex {\n const params = encodeAbiParameters(\n [\n { type: 'uint32' },\n { type: 'bool' },\n { type: 'uint64' },\n { type: 'uint64' },\n { type: 'bool' },\n { type: 'uint8' },\n { type: 'uint128' },\n ],\n [\n args.asset,\n args.isBuy,\n hyperliquidEncodePx8(args.limitPxHuman),\n hyperliquidEncodePx8(args.szHuman),\n Boolean(args.reduceOnly),\n hyperliquidResolveTif(args.tif ?? 'gtc'),\n args.cloid ?? 0n,\n ],\n )\n return encodeCoreWriterCalldata(ACTION_LIMIT_ORDER, params)\n}\n\nexport function buildCoreWriterCancelByOidCalldata(args: { asset: number; oid: bigint | number }): Hex {\n const params = encodeAbiParameters(\n [{ type: 'uint32' }, { type: 'uint64' }],\n [args.asset, BigInt(args.oid)],\n )\n return encodeCoreWriterCalldata(ACTION_CANCEL_BY_OID, params)\n}\n\nexport function buildCoreWriterCancelByCloidCalldata(args: { asset: number; cloid: bigint }): Hex {\n const params = encodeAbiParameters(\n [{ type: 'uint32' }, { type: 'uint128' }],\n [args.asset, args.cloid],\n )\n return encodeCoreWriterCalldata(ACTION_CANCEL_BY_CLOID, params)\n}\n\nexport function buildCoreWriterUsdClassTransferCalldata(args: { usdHuman: string; toPerp: boolean }): Hex {\n const params = encodeAbiParameters(\n [{ type: 'uint64' }, { type: 'bool' }],\n [hyperliquidEncodeUsd6(args.usdHuman), args.toPerp],\n )\n return encodeCoreWriterCalldata(ACTION_USD_CLASS_TRANSFER, params)\n}\n\nexport function buildCoreWriterVaultTransferCalldata(args: {\n vault: `0x${string}`\n isDeposit: boolean\n usdHuman: string\n}): Hex {\n const params = encodeAbiParameters(\n [{ type: 'address' }, { type: 'bool' }, { type: 'uint64' }],\n [args.vault, args.isDeposit, hyperliquidEncodeUsd6(args.usdHuman)],\n )\n return encodeCoreWriterCalldata(ACTION_VAULT_TRANSFER, params)\n}\n\nexport function buildCoreWriterStakingDepositCalldata(args: { hypeHuman: string }): Hex {\n const params = encodeAbiParameters([{ type: 'uint64' }], [hyperliquidEncodeWei8(args.hypeHuman)])\n return encodeCoreWriterCalldata(ACTION_STAKING_DEPOSIT, params)\n}\n\nexport function buildCoreWriterStakingWithdrawCalldata(args: { hypeHuman: string }): Hex {\n const params = encodeAbiParameters([{ type: 'uint64' }], [hyperliquidEncodeWei8(args.hypeHuman)])\n return encodeCoreWriterCalldata(ACTION_STAKING_WITHDRAW, params)\n}\n\nexport function buildCoreWriterTokenDelegateCalldata(args: {\n validator: `0x${string}`\n hypeHuman: string\n isUndelegate: boolean\n}): Hex {\n const params = encodeAbiParameters(\n [{ type: 'address' }, { type: 'uint64' }, { type: 'bool' }],\n [args.validator, hyperliquidEncodeWei8(args.hypeHuman), args.isUndelegate],\n )\n return encodeCoreWriterCalldata(ACTION_TOKEN_DELEGATE, params)\n}\n\nexport function coreWriterStep(data: Hex) {\n return {\n to: HYPERLIQUID_CORE_WRITER_ADDRESS as `0x${string}`,\n data,\n value: 0n,\n }\n}\n","/** Merge user purpose text with an optional batch / protocol suffix. */\nexport function mergePurposeText(purposeText: string, purposeSuffix?: string): string {\n const t = purposeText.trim()\n const suffix = (purposeSuffix ?? '').trim()\n if (!suffix) return t\n return t ? `${t}\\n\\n${suffix}` : suffix\n}\n","import type { ChainCategory, MultisignBuildResult, KeyGenSubset } from './types.js'\nimport { getClientIdFromKeyGenResult } from '@continuumdao/continuum-node-sdk'\nimport { mergePurposeText } from './purpose.js'\n\nexport interface MultisignLeg {\n msgHash: string\n msgRaw: string\n destinationAddress: string\n signatureText: string\n audit: Record<string, unknown>\n feeSnapshot: Record<string, unknown>\n proposalTxParams?: Record<string, unknown>\n /** Payable value wei string for first leg only when relevant */\n valueWei?: bigint\n}\n\nexport interface ChainCategoryBuildInput {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n destinationChainID: string\n legs: MultisignLeg[]\n extraJSON?: Record<string, unknown>\n /** Top-level destination address (first leg destination if omitted) */\n destinationAddress?: string\n}\n\nexport interface ChainCategoryModule {\n category: ChainCategory\n finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult\n}\n\n/**\n * Assemble mpc-auth `bodyForSign` from category-built legs.\n * Supports single-tx and batch (messageHashes / messageRawBatch / proposalTxParams).\n */\nexport function finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult {\n const { keyGen, destinationChainID, legs } = input\n if (legs.length === 0) {\n throw new Error('finalizeMultisign requires at least one leg')\n }\n\n const ph = (keyGen.pubkeyhex ?? '').trim()\n if (!ph) throw new Error('keyGen pubKey (pubkeyhex) is required')\n\n const keyList = keyGen.keylist ?? []\n const clientId = getClientIdFromKeyGenResult(keyGen)\n const first = legs[0]!\n\n const messageHashes = legs.map((l) => l.msgHash)\n const messageRawBatch = legs.map((l) => l.msgRaw)\n const batchMeta = legs.map((l) => ({\n destinationAddress: l.destinationAddress,\n signatureText: l.signatureText,\n ...l.audit,\n }))\n\n const proposalTxParams = legs\n .map((l) => l.proposalTxParams)\n .filter((p): p is Record<string, unknown> => p != null && typeof p === 'object')\n\n const extraPayload: Record<string, unknown> = {\n batchMeta,\n ...(input.extraJSON ?? {}),\n }\n const extraJSON = JSON.stringify(extraPayload)\n\n const bodyForSign: Record<string, unknown> = {\n keyList,\n pubKey: ph,\n msgHash: messageHashes[0],\n msgRaw: first.msgRaw,\n destinationChainID,\n destinationAddress: input.destinationAddress ?? first.destinationAddress,\n extraJSON,\n signatureText: first.signatureText,\n purpose: mergePurposeText(input.purposeText, input.purposeSuffix),\n ...first.feeSnapshot,\n }\n\n if (legs.length > 1) {\n bodyForSign.messageHashes = messageHashes\n bodyForSign.messageRawBatch = messageRawBatch\n }\n\n if (proposalTxParams.length > 0) {\n bodyForSign.proposalTxParams = proposalTxParams\n }\n\n const valueWei = first.valueWei\n if (valueWei != null && valueWei > 0n) {\n bodyForSign.value = valueWei.toString()\n }\n\n if (clientId) bodyForSign.clientId = clientId\n\n return { bodyForSign, messageToSign: JSON.stringify(bodyForSign) }\n}\n\nexport const coreChainCategoryModule: ChainCategoryModule = {\n category: 'evm',\n finalizeMultisign,\n}\n","import { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\n\n/** Curve router swap gas: chain cap when set, else 12/10 estimate bump. */\nexport function routerSwapGasLimitFromEstimate(\n estimatedGas: bigint,\n chainGasLimit?: number | null,\n): bigint {\n if (chainGasLimit != null && Number.isFinite(chainGasLimit) && chainGasLimit > 0) {\n return gasLimitFromEstimateAndChainConfig(estimatedGas, chainGasLimit)\n }\n return (estimatedGas * 12n + 9n) / 10n\n}\n","import {\n keccak256,\n createPublicClient,\n defineChain,\n http,\n serializeTransaction,\n getAddress,\n parseGwei,\n type Address,\n type PublicClient,\n} from 'viem'\nimport type { MultisignBuildResult } from '../../core/types.js'\nimport { finalizeMultisign, type MultisignLeg } from '../../core/envelope.js'\nimport type { KeyGenSubset } from '../../core/types.js'\nimport {\n fetchChainFeeParams,\n alignEip1559FeesWithLatestBase,\n gweiToDecimalString,\n gasLimitFromEstimateAndChainConfig,\n proposalTxParamsToFeeSnapshot,\n type ProposalTxParams,\n} from '@continuumdao/continuum-node-sdk'\nimport { routerSwapGasLimitFromEstimate } from './routerSwapGas.js'\nimport type { EvmProtocolContext, EvmTxStep } from './types.js'\n\nexport type EvmBatchMetaBuilder = (args: {\n step: EvmTxStep\n index: number\n gasLimit: bigint\n}) => Record<string, unknown>\n\nexport type EvmBuildBatchArgs = {\n context: EvmProtocolContext\n steps: EvmTxStep[]\n purposeSuffix?: string\n buildBatchMeta: EvmBatchMetaBuilder\n /** First leg msgRaw without 0x prefix; defaults to first step calldata */\n firstMsgRawNo0x?: string\n destinationAddress?: Address\n /** Top-level `value` on bodyForSign when the payable amount is not on the first leg */\n payableValueWei?: bigint\n resolveGasLimit?: (args: {\n step: EvmTxStep\n index: number\n estimatedGas: bigint\n publicClient: PublicClient\n }) => Promise<bigint> | bigint\n /** Override default `estimateGas` (e.g. trade-API gas, skip post-approve deposit estimate). */\n estimateGasForStep?: (args: {\n step: EvmTxStep\n index: number\n publicClient: PublicClient\n executor: Address\n }) => Promise<bigint> | bigint\n}\n\n/**\n * Build unsigned EVM txs, estimate gas, serialize, hash — then assemble mpc-auth body via core envelope.\n */\nexport async function buildEvmMultisignBatch(args: EvmBuildBatchArgs): Promise<MultisignBuildResult> {\n const { context, steps } = args\n const {\n chainId,\n rpcUrl,\n executorAddress,\n chainDetail,\n useCustomGas,\n customGasChainDetails,\n keyGen,\n purposeText,\n } = context\n\n if (steps.length === 0) throw new Error('buildEvmMultisignBatch requires at least one step')\n\n const ch = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: http(rpcUrl) })\n\n const feeParams = await fetchChainFeeParams(rpcUrl, chainId)\n const legacy = Boolean(chainDetail?.legacy) || !feeParams.isEip1559\n const latestBaseFeeWei = !legacy\n ? ((await publicClient.getBlock({ blockTag: 'latest' })).baseFeePerGas ?? 0n)\n : 0n\n\n const gasLimitConfig =\n useCustomGas && chainDetail?.gasLimit != null ? Number(chainDetail.gasLimit) : undefined\n const chainGasLimitRouter =\n chainDetail?.gasLimit != null &&\n Number.isFinite(Number(chainDetail.gasLimit)) &&\n Number(chainDetail.gasLimit) > 0\n ? Number(chainDetail.gasLimit)\n : undefined\n const gasFeeMultiplier =\n useCustomGas && chainDetail?.gasMultiplier != null ? Number(chainDetail.gasMultiplier) : undefined\n\n const executor = getAddress(executorAddress)\n const baseNonce = await publicClient.getTransactionCount({ address: executor, blockTag: 'pending' })\n\n const legs: MultisignLeg[] = []\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i]!\n const currentNonce = baseNonce + i\n\n let estimatedGas: bigint\n if (args.estimateGasForStep) {\n estimatedGas = await args.estimateGasForStep({ step, index: i, publicClient, executor })\n } else {\n try {\n estimatedGas = await publicClient.estimateGas({\n to: step.to,\n data: step.data,\n value: step.value,\n account: executor,\n })\n } catch {\n estimatedGas = step.fallbackGas ?? 100_000n\n }\n }\n\n let gasLimitI: bigint\n if (args.resolveGasLimit) {\n gasLimitI = await args.resolveGasLimit({ step, index: i, estimatedGas, publicClient })\n } else if (step.routerSwap) {\n gasLimitI = routerSwapGasLimitFromEstimate(estimatedGas, chainGasLimitRouter)\n } else {\n gasLimitI = useCustomGas\n ? gasLimitFromEstimateAndChainConfig(estimatedGas, gasLimitConfig)\n : estimatedGas\n }\n\n let proposalTxParams: ProposalTxParams\n let feeSnapshot: Record<string, unknown>\n let serialized: `0x${string}`\n\n if (legacy) {\n let gasPriceWei = await publicClient.getGasPrice()\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n gasPriceWei = (gasPriceWei * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n if (useCustomGas && chainDetail?.gasPrice != null && chainDetail.gasPrice > 0) {\n const configured = parseGwei(gweiToDecimalString(Number(chainDetail.gasPrice)))\n if (configured > gasPriceWei) gasPriceWei = configured\n }\n serialized = serializeTransaction({\n type: 'legacy',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n gasPrice: gasPriceWei,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'legacy',\n gasPrice: gasPriceWei.toString(),\n }\n feeSnapshot = proposalTxParamsToFeeSnapshot(proposalTxParams)\n } else {\n const fetchedBase = feeParams.baseFeeGwei ?? 0\n const fetchedPriority = feeParams.priorityFeeGwei ?? 0\n const configuredBase =\n useCustomGas && chainDetail?.baseFee != null ? Number(chainDetail.baseFee) : 0\n const configuredPriority =\n useCustomGas && chainDetail?.priorityFee != null ? Number(chainDetail.priorityFee) : 0\n const effectiveBaseFeeGwei = Math.max(fetchedBase, configuredBase)\n const effectivePriorityFeeGwei = Math.max(fetchedPriority, configuredPriority)\n const baseFeeMultiplierPct =\n useCustomGas && chainDetail?.baseFeeMultiplier != null\n ? Math.max(100, Number(chainDetail.baseFeeMultiplier))\n : 100\n const baseComponentGwei = (effectiveBaseFeeGwei * baseFeeMultiplierPct) / 100\n const maxFeePerGasGwei = baseComponentGwei + effectivePriorityFeeGwei\n let maxPriorityFeePerGas =\n effectivePriorityFeeGwei > 0\n ? parseGwei(gweiToDecimalString(effectivePriorityFeeGwei))\n : parseGwei('1')\n let maxFeePerGas = parseGwei(gweiToDecimalString(maxFeePerGasGwei))\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n maxPriorityFeePerGas = (maxPriorityFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n maxFeePerGas = (maxFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n ;({ maxFeePerGas, maxPriorityFeePerGas } = alignEip1559FeesWithLatestBase(\n maxFeePerGas,\n maxPriorityFeePerGas,\n latestBaseFeeWei,\n ))\n serialized = serializeTransaction({\n type: 'eip1559',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'eip1559',\n maxFeePerGas: maxFeePerGas.toString(),\n maxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n }\n feeSnapshot = i === 0 ? proposalTxParamsToFeeSnapshot(proposalTxParams) : {}\n }\n\n const h = keccak256(serialized)\n const msgHash = h.startsWith('0x') ? h.slice(2) : h\n\n const batchMetaExtra = args.buildBatchMeta({ step, index: i, gasLimit: gasLimitI })\n\n legs.push({\n msgHash,\n msgRaw: i === 0 && args.firstMsgRawNo0x != null ? args.firstMsgRawNo0x : serialized,\n destinationAddress: step.to,\n signatureText:\n typeof batchMetaExtra.signatureText === 'string'\n ? batchMetaExtra.signatureText\n : JSON.stringify(batchMetaExtra.signatureText ?? {}),\n audit: batchMetaExtra,\n feeSnapshot: i === 0 ? feeSnapshot : {},\n proposalTxParams,\n valueWei: i === 0 ? step.value : undefined,\n })\n\n if (i === 0 && args.firstMsgRawNo0x != null) {\n legs[0]!.msgRaw = args.firstMsgRawNo0x\n }\n }\n\n const extraJSON: Record<string, unknown> = {}\n if (useCustomGas && customGasChainDetails && Object.keys(customGasChainDetails).length > 0) {\n extraJSON.customGasChainDetails = customGasChainDetails\n }\n\n const result = finalizeMultisign({\n keyGen: keyGen as KeyGenSubset,\n purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: String(chainId),\n destinationAddress: args.destinationAddress ?? steps[0]!.to,\n legs,\n extraJSON: Object.keys(extraJSON).length > 0 ? extraJSON : undefined,\n })\n const pv = args.payableValueWei\n if (pv != null && pv > 0n) {\n result.bodyForSign.value = pv.toString()\n }\n return result\n}\n\nexport const evmChainCategoryModule = {\n category: 'evm' as const,\n finalizeMultisign,\n buildEvmMultisignBatch,\n}\n","import { getAddress, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail } from '../../../chains/evm/types.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport { hyperliquidResolveAsset } from './assets.js'\nimport {\n buildCoreWriterCancelByOidCalldata,\n buildCoreWriterLimitOrderCalldata,\n buildCoreWriterUsdClassTransferCalldata,\n coreWriterStep,\n} from './coreWriter.js'\nimport { HYPERLIQUID_CORE_WRITER_GAS_FALLBACK } from './constants.js'\nimport type { HyperliquidTifKey } from './constants.js'\n\ntype HyperliquidMultisignCommon = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n}\n\nexport type HyperliquidLimitOrderArgs = HyperliquidMultisignCommon & {\n coin: string\n marketKind?: 'perp' | 'spot'\n isBuy: boolean\n limitPxHuman: string\n szHuman: string\n reduceOnly?: boolean\n tif?: HyperliquidTifKey\n dex?: string\n}\n\nexport type HyperliquidCancelOrderArgs = HyperliquidMultisignCommon & {\n coin: string\n marketKind?: 'perp' | 'spot'\n oid: number\n dex?: string\n}\n\nexport type HyperliquidUsdClassTransferArgs = HyperliquidMultisignCommon & {\n usdHuman: string\n toPerp: boolean\n}\n\nasync function buildCoreWriterMultisign(\n common: HyperliquidMultisignCommon,\n data: `0x${string}`,\n signatureMeta: Record<string, unknown>,\n) {\n const step = coreWriterStep(data)\n return buildEvmMultisignBatch({\n context: {\n keyGen: common.keyGen,\n chainCategory: 'evm',\n chainId: common.chainId,\n rpcUrl: common.rpcUrl,\n chainDetail: common.chainDetail,\n useCustomGas: common.useCustomGas,\n customGasChainDetails: common.customGasChainDetails ?? null,\n executorAddress: getAddress(common.executorAddress),\n purposeText: common.purposeText,\n },\n steps: [{ ...step, fallbackGas: HYPERLIQUID_CORE_WRITER_GAS_FALLBACK }],\n destinationAddress: step.to,\n buildBatchMeta: () => ({\n kind: 'Hyperliquid',\n ...signatureMeta,\n evm: { type: 'hyperliquid_core_writer', version: 1, chainId: String(common.chainId) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyHyperliquidLimitOrderBatch(args: HyperliquidLimitOrderArgs) {\n const marketKind = args.marketKind ?? 'perp'\n const { asset } = await hyperliquidResolveAsset({\n chainId: args.chainId,\n coin: args.coin,\n marketKind,\n dex: args.dex,\n })\n const data = buildCoreWriterLimitOrderCalldata({\n asset,\n isBuy: args.isBuy,\n limitPxHuman: args.limitPxHuman,\n szHuman: args.szHuman,\n reduceOnly: args.reduceOnly,\n tif: args.tif,\n })\n return buildCoreWriterMultisign(args, data, {\n action: 'limitOrder',\n coin: args.coin,\n marketKind,\n isBuy: args.isBuy,\n limitPxHuman: args.limitPxHuman,\n szHuman: args.szHuman,\n reduceOnly: Boolean(args.reduceOnly),\n tif: args.tif ?? 'gtc',\n asset,\n })\n}\n\nexport type HyperliquidCloseOrderArgs = Omit<HyperliquidLimitOrderArgs, 'isBuy' | 'reduceOnly' | 'marketKind'> & {\n isLong: boolean\n}\n\n/** IoC reduce-only close — inverts side from position direction. */\nexport async function buildEvmMultisignBodyHyperliquidCloseBatch(args: HyperliquidCloseOrderArgs) {\n return buildEvmMultisignBodyHyperliquidLimitOrderBatch({\n ...args,\n marketKind: 'perp',\n isBuy: !args.isLong,\n reduceOnly: true,\n tif: args.tif ?? 'ioc',\n })\n}\n\nexport async function buildEvmMultisignBodyHyperliquidCancelBatch(args: HyperliquidCancelOrderArgs) {\n const marketKind = args.marketKind ?? 'perp'\n const { asset } = await hyperliquidResolveAsset({\n chainId: args.chainId,\n coin: args.coin,\n marketKind,\n dex: args.dex,\n })\n const data = buildCoreWriterCancelByOidCalldata({ asset, oid: args.oid })\n return buildCoreWriterMultisign(args, data, {\n action: 'cancelOrder',\n coin: args.coin,\n marketKind,\n oid: args.oid,\n asset,\n })\n}\n\nexport async function buildEvmMultisignBodyHyperliquidUsdClassTransferBatch(\n args: HyperliquidUsdClassTransferArgs,\n) {\n const data = buildCoreWriterUsdClassTransferCalldata({\n usdHuman: args.usdHuman,\n toPerp: args.toPerp,\n })\n return buildCoreWriterMultisign(args, data, {\n action: 'usdClassTransfer',\n usdHuman: args.usdHuman,\n toPerp: args.toPerp,\n })\n}\n","import { getAddress, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail } from '../../../chains/evm/types.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport { buildCoreWriterVaultTransferCalldata, coreWriterStep } from './coreWriter.js'\nimport { HYPERLIQUID_CORE_WRITER_GAS_FALLBACK } from './constants.js'\n\ntype HyperliquidVaultCommon = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n vaultAddress: `0x${string}`\n usdHuman: string\n}\n\nexport type HyperliquidVaultDepositArgs = HyperliquidVaultCommon\nexport type HyperliquidVaultWithdrawArgs = HyperliquidVaultCommon\n\nasync function buildVaultMultisign(\n common: HyperliquidVaultCommon,\n isDeposit: boolean,\n) {\n const vault = getAddress(common.vaultAddress)\n const data = buildCoreWriterVaultTransferCalldata({\n vault,\n isDeposit,\n usdHuman: common.usdHuman,\n })\n const step = coreWriterStep(data)\n return buildEvmMultisignBatch({\n context: {\n keyGen: common.keyGen,\n chainCategory: 'evm',\n chainId: common.chainId,\n rpcUrl: common.rpcUrl,\n chainDetail: common.chainDetail,\n useCustomGas: common.useCustomGas,\n customGasChainDetails: common.customGasChainDetails ?? null,\n executorAddress: getAddress(common.executorAddress),\n purposeText: common.purposeText,\n },\n steps: [{ ...step, fallbackGas: HYPERLIQUID_CORE_WRITER_GAS_FALLBACK }],\n destinationAddress: step.to,\n buildBatchMeta: () => ({\n kind: 'Hyperliquid',\n action: isDeposit ? 'vaultDeposit' : 'vaultWithdraw',\n vault,\n usdHuman: common.usdHuman,\n evm: { type: 'hyperliquid_vault', version: 1, chainId: String(common.chainId) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyHyperliquidVaultDepositBatch(args: HyperliquidVaultDepositArgs) {\n return buildVaultMultisign(args, true)\n}\n\nexport async function buildEvmMultisignBodyHyperliquidVaultWithdrawBatch(args: HyperliquidVaultWithdrawArgs) {\n return buildVaultMultisign(args, false)\n}\n","import { getAddress, type Address } from 'viem'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport type { EvmChainDetail } from '../../../chains/evm/types.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport {\n buildCoreWriterStakingDepositCalldata,\n buildCoreWriterStakingWithdrawCalldata,\n buildCoreWriterTokenDelegateCalldata,\n coreWriterStep,\n} from './coreWriter.js'\nimport { HYPERLIQUID_CORE_WRITER_GAS_FALLBACK } from './constants.js'\n\ntype HyperliquidStakingCommon = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: EvmChainDetail\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n hypeHuman: string\n}\n\nasync function buildStakingMultisign(\n common: HyperliquidStakingCommon,\n data: `0x${string}`,\n action: string,\n extra: Record<string, unknown> = {},\n) {\n const step = coreWriterStep(data)\n return buildEvmMultisignBatch({\n context: {\n keyGen: common.keyGen,\n chainCategory: 'evm',\n chainId: common.chainId,\n rpcUrl: common.rpcUrl,\n chainDetail: common.chainDetail,\n useCustomGas: common.useCustomGas,\n customGasChainDetails: common.customGasChainDetails ?? null,\n executorAddress: getAddress(common.executorAddress),\n purposeText: common.purposeText,\n },\n steps: [{ ...step, fallbackGas: HYPERLIQUID_CORE_WRITER_GAS_FALLBACK }],\n destinationAddress: step.to,\n buildBatchMeta: () => ({\n kind: 'Hyperliquid',\n action,\n hypeHuman: common.hypeHuman,\n ...extra,\n evm: { type: 'hyperliquid_staking', version: 1, chainId: String(common.chainId) },\n }),\n })\n}\n\nexport async function buildEvmMultisignBodyHyperliquidStakeDepositBatch(args: HyperliquidStakingCommon) {\n const data = buildCoreWriterStakingDepositCalldata({ hypeHuman: args.hypeHuman })\n return buildStakingMultisign(args, data, 'stakingDeposit')\n}\n\nexport async function buildEvmMultisignBodyHyperliquidStakeWithdrawBatch(args: HyperliquidStakingCommon) {\n const data = buildCoreWriterStakingWithdrawCalldata({ hypeHuman: args.hypeHuman })\n return buildStakingMultisign(args, data, 'stakingWithdraw')\n}\n\nexport type HyperliquidDelegateArgs = HyperliquidStakingCommon & {\n validator: `0x${string}`\n isUndelegate: boolean\n}\n\nexport async function buildEvmMultisignBodyHyperliquidDelegateBatch(args: HyperliquidDelegateArgs) {\n const validator = getAddress(args.validator)\n const data = buildCoreWriterTokenDelegateCalldata({\n validator,\n hypeHuman: args.hypeHuman,\n isUndelegate: args.isUndelegate,\n })\n return buildStakingMultisign(args, data, args.isUndelegate ? 'undelegate' : 'delegate', { validator })\n}\n\nexport async function buildEvmMultisignBodyHyperliquidDelegateOnlyBatch(\n args: Omit<HyperliquidDelegateArgs, 'isUndelegate'>,\n) {\n return buildEvmMultisignBodyHyperliquidDelegateBatch({ ...args, isUndelegate: false })\n}\n\nexport async function buildEvmMultisignBodyHyperliquidUndelegateBatch(\n args: Omit<HyperliquidDelegateArgs, 'isUndelegate'>,\n) {\n return buildEvmMultisignBodyHyperliquidDelegateBatch({ ...args, isUndelegate: true })\n}\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport { isHyperliquidChainSupported } from './support.js'\n\nexport * from './support.js'\nexport * from './constants.js'\nexport * from './api.js'\nexport * from './assets.js'\nexport * from './reads.js'\nexport * from './coreWriter.js'\nexport * from './multisign.js'\nexport * from './vaultMultisign.js'\nexport * from './stakingMultisign.js'\n\nexport const HYPERLIQUID_PROTOCOL_ID = 'hyperliquid'\n\nexport const hyperliquidProtocolModule: ProtocolModule = {\n id: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n if (ctx.chainCategory !== 'evm') return false\n const chainId = typeof ctx.chainId === 'number' ? ctx.chainId : Number(ctx.chainId)\n return Number.isFinite(chainId) && isHyperliquidChainSupported(chainId)\n },\n isTokenSupported(token) {\n if (token.category !== 'evm') return false\n return token.kind === 'erc20' || token.kind === 'native'\n },\n actions: [\n {\n id: 'hyperliquid.limitOrder',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Place a Hyperliquid limit/IoC order via HyperEVM CoreWriter',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n coin: { type: 'string', required: true, description: 'Market coin e.g. BTC' },\n isBuy: { type: 'boolean', required: true, description: 'true for buy/long, false for sell/short' },\n limitPxHuman: { type: 'string', required: true, description: 'Limit price' },\n szHuman: { type: 'string', required: true, description: 'Order size in coin units' },\n marketKind: { type: 'string', required: false, description: 'perp (default) or spot' },\n tif: { type: 'string', required: false, description: 'gtc, ioc, or alo' },\n dex: { type: 'string', required: false, description: 'HIP-3 dex name when applicable' },\n },\n },\n {\n id: 'hyperliquid.close',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Close or reduce a perp via IoC reduce-only limit order (CoreWriter)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n coin: { type: 'string', required: true, description: 'Market coin' },\n isLong: { type: 'boolean', required: true, description: 'true if closing a long position' },\n limitPxHuman: { type: 'string', required: true, description: 'Limit price' },\n szHuman: { type: 'string', required: true, description: 'Size to close in coin units' },\n },\n },\n {\n id: 'hyperliquid.cancel',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Cancel a Hyperliquid open order via CoreWriter',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n coin: { type: 'string', required: true, description: 'Market coin' },\n oid: { type: 'number', required: true, description: 'Order id from openOrders' },\n },\n },\n {\n id: 'hyperliquid.usdTransfer',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Move USDC between Hyperliquid spot and perp margin accounts',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n usdHuman: { type: 'string', required: true, description: 'USD amount' },\n toPerp: { type: 'boolean', required: true, description: 'true spot→perp, false perp→spot' },\n },\n },\n {\n id: 'hyperliquid.vaultDeposit',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Deposit USD into a Hyperliquid vault',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n vaultAddress: { type: 'string', required: true, description: 'Vault address' },\n usdHuman: { type: 'string', required: true, description: 'USD amount' },\n },\n },\n {\n id: 'hyperliquid.vaultWithdraw',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Withdraw USD from a Hyperliquid vault (includes accrued PnL)',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n vaultAddress: { type: 'string', required: true, description: 'Vault address' },\n usdHuman: { type: 'string', required: true, description: 'USD amount' },\n },\n },\n {\n id: 'hyperliquid.stake',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Stake HYPE via CoreWriter',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n hypeHuman: { type: 'string', required: true, description: 'HYPE amount' },\n },\n },\n {\n id: 'hyperliquid.unstake',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Unstake HYPE via CoreWriter',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n hypeHuman: { type: 'string', required: true, description: 'HYPE amount' },\n },\n },\n {\n id: 'hyperliquid.delegate',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Delegate staked HYPE to a validator',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n hypeHuman: { type: 'string', required: true, description: 'HYPE amount' },\n validator: { type: 'string', required: true, description: 'Validator address' },\n },\n },\n {\n id: 'hyperliquid.undelegate',\n protocolId: HYPERLIQUID_PROTOCOL_ID,\n chainCategory: 'evm',\n description: 'Undelegate HYPE from a validator',\n commonParams: ['keyGen', 'purposeText', 'useCustomGas'],\n params: {\n hypeHuman: { type: 'string', required: true, description: 'HYPE amount' },\n validator: { type: 'string', required: true, description: 'Validator address' },\n },\n },\n ],\n}\n\nregisterProtocolModule(hyperliquidProtocolModule)\n"]}
|